AWS - DynamoDB Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Amazon DynamoDBは、AWSによって完全に管理されたサーバーレスのキー・バリューNoSQLデータベースとして提供されており、サイズに関係なく高性能アプリケーションを支えるために特化されています。このサービスは、固有のセキュリティ対策、途切れのないバックアップ、複数のリージョンにわたる自動レプリケーション、統合されたインメモリキャッシング、便利なデータエクスポートユーティリティなど、堅牢な機能を保証します。
DynamoDBの文脈では、従来のデータベースを構築する代わりに、テーブルが作成されます。各テーブルは、テーブルの主キーの不可欠な要素としてパーティションキーの指定を義務付けています。このパーティションキーは、基本的にハッシュ値であり、アイテムの取得とデータのさまざまなホストへの分配の両方において重要な役割を果たします。この分配は、データベースのスケーラビリティと可用性を維持するために重要です。さらに、データの整理をさらに洗練させるために、ソートキーを組み込むオプションもあります。
デフォルトでは、DynamoDBはAmazon DynamoDBに属するKMSキーを使用しており、少なくともあなたのアカウントに属するAWS管理キーではありません。
テーブルバックアップの生成をスケジュールしたり、オンデマンドで作成したりすることが可能です。さらに、テーブルのポイントインタイムリカバリ(PITR)を有効にすることも可能です。ポイントインタイムリカバリは、DynamoDBデータの35日間の継続的なバックアップを提供し、偶発的な書き込みや削除操作から保護するのに役立ちます。
テーブルのデータをS3にエクスポートすることも可能ですが、テーブルにはPITRが有効である必要があります。
ダイナモDBローカル、dynalite、localstackなどのローカルDynamoサービス用のGUIがあり、役立つ可能性があります: https://github.com/aaronshaf/dynamodb-admin
DynamoDB データに SQL 構文でアクセスする方法があるため、典型的な SQL インジェクションも可能です。
DynamoDB では、データを取得するために異なる 条件を使用できます。一般的な NoSQL インジェクションのように、データを取得するために 複数の条件を連結することが可能であれば、隠れたデータを取得したり(またはテーブル全体をダンプしたり)することができます。 DynamoDB がサポートする条件はここで確認できます: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
データが query
または scan
を介してアクセスされる場合、異なる条件がサポートされていることに注意してください。
実際、Query アクションは、プライマリ キーで 条件 "EQ" (等しい) を指定する必要があり、これにより NoSQL インジェクションに対してはるかに脆弱性が低くなります(また、操作が非常に制限されることになります)。
比較を 変更 したり、新しいものを追加したりできる場合、より多くのデータを取得することができます。
この脆弱性は現在非推奨のdynamodbスキャンフィルターに基づいています!
DynamoDBはJsonオブジェクトを受け入れ、DB内のデータを検索します。検索に送信されるjsonオブジェクトに書き込むことができる場合、DBのダンプを作成し、すべての内容を取得することができます。
例えば、次のようなリクエストにインジェクトすることができます:
攻撃者は次のようなものを注入することができます:
1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0
ID 1000を検索する「EQ」条件を修正し、その後、すべてのデータを探すためにId文字列が0より大きいものを探します。
別のログインを使用した脆弱な例は次のようになります:
これは次のような脆弱性があります:
一部のSDKでは、実行されるフィルタリングを示す文字列を使用することができます。
DynamoDBでアイテムをスキャンする際にフィルター式で属性値を置き換えるために検索する場合、トークンは**:
文字で始まる必要があります。そのようなトークンは実行時に実際の属性値に置き換えられます**。
したがって、前述のようなログインは次のようなもので回避できます:
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)