Shikata Ga Nai

Private? There is no such things.

Lab: Hostヘッダーによる認証バイパス

Hello there, ('ω')ノ

🎯 ラボの目的

このラボでは、HTTPリクエストのHostヘッダーを悪用して認証を回避する方法を学びます。 特定のHost値(例:localhost)で接続した場合にのみ管理機能が有効になるという設計を突き、 管理画面への不正アクセスと、ユーザー削除(carlos)を達成するのが目的です。


🧩 攻略手順(ステップバイステップ)

✅ 1. 通常アクセスの動作確認

  • / にアクセスして200 OKが返ることを確認。
  • このリクエストをBurp SuiteのRepeaterに送る。

✅ 2. Hostヘッダーの任意値テスト

  • Repeater上で Host: anything.com のように変更して送信。
  • 正常にページが表示されれば、Hostの値が無視されている(脆弱性の兆候)。

✅ 3. /robots.txt を確認

  • Disallow: /admin が記載されていれば、管理画面のパスは /admin

✅ 4. /admin にアクセス

  • ブラウザでアクセスすると、「内部ユーザーのみがアクセス可能」などのエラーメッセージが出る。

✅ 5. Hostを localhost に変更して再アクセス

  • Repeaterで /admin へのリクエストに Host: localhost を追加。
  • 成功すれば、管理画面にアクセス可能。
  • 画面上に「ユーザー削除」などのオプションが表示される。

✅ 6. ユーザー削除を実行

  • リクエストラインを以下に変更:
  GET /admin/delete?username=carlos HTTP/1.1
  Host: localhost
  • リクエストを送信して carlos を削除。
  • 成功すればラボ完了。

🔍 技術的解説

  • サーバ側で「Host: localhost」での接続を信頼された内部接続と誤認識している。
  • 通常のユーザーは「example.com」などでアクセスするため、Hostを偽装することで内部扱いに昇格可能
  • HostヘッダーはHTTP/1.1以降必須項目だが、身元認証として使うのは設計ミス

⚠ 教訓と対策

問題点 対策例
Hostヘッダーによる信頼判断 IPベースのファイアウォール制御やVPNの使用
管理画面への簡易アクセス制御 強制ログイン/認証プロセスを導入
内部と外部の区別を論理で制御 ホスト名ではなくセッション/認証トークンで判断する設計に

Best regards, (^^ゞ