AWS - DynamoDB Enum

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

DynamoDB

基本情報

Amazon DynamoDBは、サイズに関係なく高性能なアプリケーションを駆動するために設計された、完全に管理された、サーバーレス、キー値型NoSQLデータベースとしてAWSによって提示されています。このサービスは、固有のセキュリティ対策、中断のないバックアップ、複数のリージョン間での自動レプリケーション、統合されたインメモリキャッシュ、便利なデータエクスポートユーティリティなど、堅牢な機能を提供しています。

DynamoDBのコンテキストでは、従来のデータベースを確立する代わりに、テーブルが作成されます。各テーブルは、テーブルの主キーの重要な構成要素としてパーティションキーの指定を必須とします。このパーティションキーは、基本的にハッシュ値であり、アイテムの取得とデータのさまざまなホスト間での分配の両方において重要な役割を果たします。この分配は、データベースの拡張性と可用性の維持にとって重要です。さらに、データの組織化をさらに細かくするためにソートキーを組み込むオプションもあります。

暗号化

デフォルトでは、DynamoDBは、あなたのアカウントに少なくとも属しているAWS管理キーではなく、Amazon DynamoDBに属するKMSキーを使用しています。

バックアップ&S3へのエクスポート

テーブルのバックアップをスケジュールしたり、要求に応じて作成したりすることが可能です。さらに、テーブルにポイントインタイムリカバリ(PITR)を有効にすることもできます。ポイントインタイムリカバリは、35日間にわたってDynamoDBデータの連続したバックアップを提供し、誤った書き込みや削除操作に対して保護するのに役立ちます。

また、テーブルのデータをS3にエクスポートすることも可能ですが、そのテーブルにはPITRを有効にする必要があります。

GUI

DynamoDB Localdynalitelocalstackなどのローカル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インジェクション

SQLインジェクション

SQL構文を使用してDynamoDBデータにアクセスする方法があり、そのため、典型的な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は、DB内のデータを検索するためにJsonオブジェクトを受け入れます。送信されたjsonオブジェクトに書き込むことができることがわかった場合、DBのダンプ、つまりすべての内容を取得できます。

たとえば、次のようなリクエストにインジェクションすることができます:

'{"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 Expert) でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法:

  • HackTricksで企業を宣伝したいまたはHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!

  • The PEASS Familyを発見し、独占的なNFTsのコレクションを見つける

  • 💬 Discordグループまたはtelegramグループ参加するか、Twitter 🐦 @hacktricks_liveフォローする

  • HackTricks(https://github.com/carlospolop/hacktricks)とHackTricks Cloud(https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。

最終更新