AWS - DynamoDB Enum

从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

DynamoDB

基本信息

Amazon DynamoDB 被 AWS 提供为一种 完全托管、无服务器、键值 NoSQL 数据库,专为驱动高性能应用而设计,无论其规模如何。该服务确保强大的功能,包括固有的安全措施、不间断的备份、跨多个区域的自动复制、集成内存缓存以及便捷的数据导出工具。

在 DynamoDB 的上下文中,不是建立传统数据库,而是创建表。每个表都要求指定一个 分区键 作为 表的主键 的一个组成部分。这个分区键,本质上是一个 哈希值,在检索项目和在各个主机之间分发数据方面发挥关键作用。这种分发对于维护数据库的可伸缩性和可用性至关重要。此外,还可以选择添加一个 排序键 来进一步细化数据组织。

加密

默认情况下,DynamoDB 使用属于 Amazon DynamoDB 的 KMS 密钥,而不是至少属于您账户的 AWS 托管密钥。

备份 & 导出到 S3

可以安排生成表备份或根据需求创建备份。此外,还可以为表启用恢复到某个时间点 (PITR)。恢复到某个时间点提供了 DynamoDB 数据的连续备份,持续 35 天,以帮助您防范意外的写入或删除操作。

还可以将表的数据导出到 S3,但需要启用PITR

GUI

有一个用于本地 Dynamo 服务的 GUI,如 DynamoDB Localdynalitelocalstack 等,可能会很有用: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 Privesc

漏洞利用后

AWS - DynamoDB Post Exploitation

持久性

AWS - DynamoDB Persistence

DynamoDB注入

SQL注入

有方法可以使用SQL语法访问DynamoDB数据,因此,典型的SQL注入也是可能的

NoSQL注入

在DynamoDB中,可以使用不同的条件来检索数据,就像在常见的NoSQL注入中,如果可以链接更多条件来检索数据,您可以获取隐藏数据(或转储整个表)。 您可以在这里找到DynamoDB支持的条件:https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html

请注意,如果通过**queryscan访问数据,则支持不同的条件**。

实际上,查询操作需要在键中指定**条件“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注入

DynamoDB接受Json对象来搜索数据库中的数据。如果您发现可以在发送到搜索的json对象中写入内容,您可以导出整个数据库的内容。

例如,在类似以下请求中注入:

'{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}'

攻击者可以注入类似以下内容:

1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0

修复"EQ"条件,搜索ID为1000的数据,然后查找所有ID字符串大于0的数据,即所有数据。

:property注入

某些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
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

其他支持HackTricks的方式:

Last updated