Shikata Ga Nai

Private? There is no such things.

HTTP Hostヘッダーを悪用したクラシックなサーバーサイド脆弱性の攻略方法

Hello there, ('ω')ノ

概要

Host ヘッダーは一見単なるリクエスト情報の一部に思えますが、実はサーバー側での処理に影響を与える入力として扱われることがあります。そのため、他のHTTPヘッダーと同様に、サーバーサイド脆弱性の攻撃ベクトルとなり得ます。


典型的な攻撃方法

1. SQLインジェクションの検出

サーバーが Host ヘッダーの値をそのままSQLクエリに組み込んでいる場合、SQLインジェクションが発生する可能性があります。以下のようなペイロードを Host ヘッダーに入力し、レスポンスの挙動を観察します:

Host: vulnerable.com' OR '1'='1

エラーメッセージや異常な動作が見られれば、攻撃が成功している可能性があります。


2. 制限された機能へのアクセス

多くのサイトでは、管理パネルなどの特定機能へのアクセスを社内ネットワークなどの制限された範囲に限定しています。ただし、リクエストの Host ヘッダーの値によってアクセス制御が行われているケースでは、これを改ざんすることで外部からでもアクセスできる場合があります。

例:

Host: internal-admin.company.local

これにより、通常外部からは到達できない管理画面が表示されることがあります。


攻略のコツとポイント

  • Burp Suiteを活用:Hostヘッダーはユーザーが自由に編集可能なので、Burp Repeaterでリクエストを複製・編集して反応を確認しましょう。
  • レスポンスの違いに注目:少しの変化(ステータスコード、メッセージなど)でも攻撃成功のヒントになります。
  • 他のヘッダーと併用X-Forwarded-HostX-Hostなどのヘッダーも同時に使用してみることでバイパスに成功することがあります。

対策

  • Hostヘッダーを信頼せず、内部ロジックで明示的に使用しない。
  • SQLなどに挿入する前にホワイトリスト検証やサニタイズを行う。
  • アクセス制御は信頼できるIPアドレスやVPNなど、他の方法と組み合わせて行う。
  • 監視やログ分析によって異常なHostヘッダーのリクエストを検出する。

まとめ

Host ヘッダーは一見目立たない存在ですが、サーバーサイドでの取り扱い方次第では重大な脆弱性となります。診断時には必ず検査対象として含めるようにしましょう。

Best regards, (^^ゞ