Shikata Ga Nai

Private? There is no such things.

How i was able to bypass Cloudflare for XSS!を訳してみた

Hello there, ('ω')ノ

 

XSS用のCloudflareをバイパスすることができた方法を。

 

脆弱性:

 XSS

 

記事:

 https://infosecwriteups.com/how-i-was-able-to-bypass-cloudflare-for-xss-e94cd827a5d6


まずは、ログインページに「rurl」というパラメータがあったので。

オープンリダイレクトを試すと成功して。

オープンリダイレクトの脆弱性がある場合は、「a」タグ内の。

「href」属性に挿入されているので、xssを試すことができるので。

xssペイロード「javascript:alert(1)」を試すと。

下記のCloudflareという応答を得ることができて。

 

f:id:ThisIsOne:20210920170451p:plain


バイパス時間:

このような状況に対処するためのお気に入りの方法の1つは。

すべての仮定を1つずつ試すことで。

なので「javascript:」を試すことに。

 ■JavaScriptキーワード全体が削除されましたか?
 ■「:」の部分は削除されましたか?

 

これで200の応答を得たので、「javascript:alert」について進めることに。

 ■alertキーワードは削除されましたか?
 ■alert(1)の括弧が削除されている場合は?

 

なので、主な問題は括弧にあるので。

alert`1`」で括弧をバイパスしようとすると成功せず。

 

しかしながら、throwのような他のテクニックがあって。

多くのフィルタは、関数の呼び出しとパラメーターの受け渡しに不可欠なので。

括弧をブロックするので。

フィルタが挿入されたベクトルの括弧を削除する場合は。

それをバイパスする方法がいくつかあって。

Gareth Heyesが見つけた従来の方法を見ることに。

 https://portswigger.net/research/xss-without-parentheses-and-semi-colons

 

f:id:ThisIsOne:20210920171008p:plain

 

throwテクニックを使用して、括弧を使用せずに関数に引数を渡すメソッドで。

throwテクニックは、エラーがトリガーされると。

関数呼び出しを割り当てるためにonerrorイベントハンドラーを悪用するので。

throwを使用したXSSペイロードは、下記のようになって。

 javascript:window.onerror=alert;throw 1


このペイロードを試すと、再びcloudflareの応答が。

したがって、ここでは、「base64」、「UrlEncoding」、「Htmlencoding」などの。

他のエンコード手法を使用してさまざまなペイロードを試して。

下記が、最終的なペイロードで。

 javascript%3avar{a%3aonerror}%3d{a%3aalert}%3bthrow%2520document.cookie

 

Best regards, (^^ゞ