以下の内容はhttps://cysec148.hatenablog.com/entry/2023/05/23/155257より取得しました。


Web cache poisoning with an unkeyed headerをやってみた

Hello there, ('ω')ノ

 

キーのないヘッダによる Web キャッシュ ポイズニングを。

 

キーのないヘッダからの入力を安全でない方法で処理するため、

Web キャッシュ ポイズニングに対して脆弱で。

何の疑いも持たないユーザは定期的にサイトのホームページにアクセスして。

このラボを解決するには、訪問者のブラウザでalert(document.cookie)を

実行するレスポンスでキャッシュを毒して。

 

 

リクエストをリピータへ。

 

 

送信して、レスポンスのX-Cacheに注目して。

 

 

Cache-Controlで指定されている30秒間はキャッシュされたプールから

取得するようで。

 

 

 

30秒が経過するとX-Cache: missとなり、オリジンサーバから取得したことがわかり。

 

 

次のリクエストからは、X-Cache: hitなのでキャッシュされたプールから

取得されていて。

 

 

次に適当なエンドポイントを送信してみると。

X-Cache: missとなって。

ただし、エンドポイントは存在しなくて。

 

 

次にエンドポイントでなくパラメータを試すことに。

パラメータを追加するとキャッシュキーとして30秒内でも

X-Cache: missとなり、違うリクエストと認識され。

X-Forwarded-Hostを追加して送信すると、X-Cache: missとはならないので

無視されるようで。  

つまり、X-Forwarded-Hostの有無はキャッシュには影響ないので

被害者がサイトにアクセスした際にX-Forwarded-Hostを追加しなくても

キャッシュされたプールから取得することになって。

 

まずは、エンドポイントでなくパラメータ(キャッシュバスター)を試すことに。

 

 

次に送信するとキャッシュされたプールから取得されて。

 

 

 

さらにレスポンスの一部が、Hostヘッダの一部と合致していて。

 

 

X-Forwarded-Host: example.comを追加して送信してみると。

レスポンスに反映され、さらにはキャッシュには影響がないので。

 

 

エクスプロイトサーバにて、レスポンスのJSを起動するようにして。

 

 

単純なペイロードを設定してからStoreして。

 

 

エクスプロイトサーバのドメインをX-Forwarded-Hostに移して。

 

 

キャッシュバスターを削除してオリジナルのリクエストにもどして

X-Forwarded-Hostがレスポンスに反映されるので、

値をエクスプロイトサーバのドメインに変更して送信すると。

キャッシュにないので、X-Cache: missで。

 

 

2 回目にリクエストを送信すると、X-Cache: hitを受け取ったことがわかり。

これで同じサイトへアクセスしたすべてのリクエストは

X-Forwarded-Host パラメータが読み込まれることになって。

 

 

ブラウザをリロードするとペイロードが実行できて。

 

 

 

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2023/05/23/155257より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14