AWS - DynamoDB Enum

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

DynamoDB

Basiese Inligting

Amazon DynamoDB word deur AWS aangebied as 'n volledig bestuurde, serverlose, sleutel-waarde NoSQL-databasis, wat geskik is vir die aandrywing van hoë-prestasie-toepassings ongeag hul grootte. Die diens verseker robuuste kenmerke, insluitend inherente sekuriteitsmaatreëls, ononderbroke rugsteune, geoutomatiseerde replikasie oor verskeie streke, geïntegreerde in-memory caching, en gerieflike data-uitvoerhulpmiddels.

In die konteks van DynamoDB, eerder as om 'n tradisionele databasis te vestig, word tabelle geskep. Elke tabel vereis die spesifikasie van 'n partisiesleutel as 'n integrale komponent van die tabel se primêre sleutel. Hierdie partisiesleutel, essensieel 'n hashwaarde, speel 'n kritieke rol in beide die herwinning van items en die verspreiding van data oor verskeie gasheer. Hierdie verspreiding is noodsaaklik vir die handhawing van beide die skaalbaarheid en beskikbaarheid van die databasis. Daar is ook 'n opsie om 'n sorteersleutel in te sluit om data-organisasie verder te verfyn.

Versleuteling

Standaard gebruik DynamoDB 'n KMS-sleutel wat ***behoort aan Amazon DynamoDB,**nie eens die AWS-bestuurde sleutel wat ten minste aan jou rekening behoort.

Rugsteune & Uitvoer na S3

Dit is moontlik om die generering van tabelrugsteune te skeduleer of om hulle op aanvraag te skep. Daarbenewens is dit ook moontlik om Punt-in-tyd-herwinning (PITR) vir 'n tabel te aktiveer. Punt-in-tyd-herwinning bied voortdurende rugsteune van jou DynamoDB-data vir 35 dae om jou te help teen ongelukkige skryf- of verwyderingsoperasies te beskerm.

Dit is ook moontlik om die data van 'n tabel na S3 uit te voer, maar die tabel 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

Ongeverifieerde Toegang

AWS - DynamoDB Unauthenticated Access

Privesc

AWS - DynamoDB Privesc

Post Exploitation

AWS - DynamoDB Post Exploitation

Volharding

AWS - DynamoDB Persistence

DynamoDB Inspruiting

SQL Inspruiting

Daar is maniere om toegang tot DynamoDB-data te kry met SQL-sintaksis, daarom is tipiese SQL-inspuitings ook moontlik.

NoSQL Inspruiting

In DynamoDB kan verskillende voorwaardes gebruik word om data op te haal, soos in 'n tipiese NoSQL Inspruiting as dit moontlik is om meer voorwaardes te koppel om data op te haal, kan jy verskuilde data verkry (of die hele tabel dump). Hier kan jy die voorwaardes wat deur DynamoDB ondersteun word, vind: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html

Let daarop dat verskillende voorwaardes ondersteun word as die data toegang kry via query of via scan.

Eintlik moet Query-aksies die voorwaarde "EQ" (gelyk aan) in die primêre sleutel spesifiseer om te werk, wat dit baie minder vatbaar vir NoSQL-inspuitings maak (en maak ook die operasie baie beperk).

As jy die vergelyking kan verander wat uitgevoer word of nuwes kan byvoeg, kan jy meer data ophaal.

# 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

Roue Json inspuiting

DynamoDB aanvaar Json-voorwerpe om vir data binne die DB te soek. As jy vind dat jy kan skryf in die json-voorwerp wat gestuur word om te soek, 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 inspuit:

1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0

herstel die "EQ" toestand wat soek na die ID 1000 en dan kyk vir al die data met 'n Id string groter as 0, wat almal is.

:property Inspruiting

Sommige SDK's maak dit moontlik om 'n string te gebruik wat die filter wat uitgevoer moet word, aandui soos:

new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap)

Jy moet weet dat as jy in DynamoDB soek vir die vervanging van 'n attribuut waarde in filter uitdrukkings terwyl jy die items skandeer, moet die tokens begin met die : karakter. Sulke tokens sal by die uitvoering vervang word met die werklike attribuut waarde.

Daarom kan 'n login soos die vorige een 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
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated