AWS - DynamoDB Enum

htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!

HackTricks를 지원하는 다른 방법:

DynamoDB

기본 정보

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

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

암호화

기본적으로 DynamoDB는 Amazon DynamoDB에 속하는 KMS 키를 사용하며, 적어도 귀하의 계정에 속하는 AWS 관리형 키가 아닙니다.

백업 및 S3로 내보내기

테이블 백업을 예약하거나 요청에 따라 생성할 수 있습니다. 또한 테이블에 대한 시점 복구 (PITR)를 활성화할 수도 있습니다. 시점 복구는 35일 동안 DynamoDB 데이터의 지속적인 백업을 제공하여 우연한 쓰기 또는 삭제 작업에 대비할 수 있도록 도와줍니다.

또한 테이블의 데이터를 S3로 내보낼 수 있지만, 테이블은 PITR를 활성화해야 합니다.

GUI

DynamoDB Local, dynalite, localstack 등 로컬 Dynamo 서비스에 대한 GUI가 있어 유용할 수 있습니다: 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

인증되지 않은 액세스

pageAWS - DynamoDB Unauthenticated Access

권한 상승

pageAWS - DynamoDB Privesc

사후 공격

pageAWS - DynamoDB Post Exploitation

지속성

pageAWS - DynamoDB Persistence

DynamoDB Injection

SQL Injection

SQL 구문을 사용하여 DynamoDB 데이터에 액세스하는 방법이 있으므로, 전형적인 SQL 인젝션도 가능합니다.

NoSQL Injection

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

데이터에 query 또는 **scan**을 통해 액세스하는 경우 다른 조건이 지원됨을 유의하십시오.

실제로 Query 작업은 작동하려면 기본 키에서 **조건 "EQ (equals)"**을 지정해야 하므로 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은 데이터베이스 내에서 데이터를 검색하기 위해 Json 객체를 허용합니다. 검색에 보내는 json 객체에 쓸 수 있다면, 데이터베이스 덤프를 만들어 모든 내용을 볼 수 있습니다.

예를 들어, 다음과 같이 요청에 주입하는 경우:

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

공격자는 다음과 같이 삽입할 수 있습니다:

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

ID 1000을 검색하고 Id 문자열이 0보다 큰 모든 데이터를 찾는 "EQ" 조건을 수정할 수 있습니다.

: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
htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요!

다른 방법으로 HackTricks를 지원하는 방법:

最終更新