Shikata Ga Nai

Private? There is no such things.

Bypassing Cloudflare’s WAF!を訳してみた

Hello there, ('ω')ノ

 

CloudflareのWAFをバイパスします!を。

 

脆弱性:

 XSS

 WAFバイパス

 

記事:

 https://medium.com/@friendly_/bypassing-cloudflares-waf-b1b83a50fb2f

 

XSSをテストする場合:

\"><h1>Hi</h1>などの単純なペイロードを使用して。

 

サイトのWAFはトリガーされず、誤検知の出力が得られないため。

単純なタグ(提供)を使用して。

HTML入力がサニタイズされているかどうか。

 

これで理解ができたので、XSSがどのように発生するかを説明できて。

URLを見るとき、常にパラメータまたは非表示のパラメーターを探しますが。

このシナリオでは少し異なって。

サイトにアクセスして数回クリックすると、パラメータを確認できて。

下記がページに反映されて。

 ?country=NYC

 

 

目的は、Reflect Cross Site Scriptingをテストすることでしたが。

WAF(Cloudflare)が導入されていることはわかっていたので。

 

次に、このバイパスに適切なペイロードを作成するために。

単純なタグの使用を開始して。

<svg>を使用するのは素晴らしいことですが、<iframe>の方が簡単で。

<iframe>タグが機能して。

HTMLインジェクションができたので、今度はそれをエスカレーションすることに。

下記のように<iframe>タグが挿入されて。

 

 

このペイロードを作成しているときに、次のペイロードを使用できることがわかって。

 <iframe/src=javascript:alert)>

 

 

ペイロードを作成し、完全なレンダリングが適切に行われるのを確認して。

しかし、Cloudflare WAFを持っているのを見て、括弧を取得しようと決めて。

 

%28&#40; , &lpar;などの多数のエンコーディングを試すと。

 %28    (

 &#40;    (

 

 https://unicode-table.com/jp/html-entities/ 

 

しかし、これらのどれも正しく機能せず、レンダリングされず。

それから他のいくつかの方法を探すことに。

 

サイトはURLエンコードとHTMLエンコードで適切にレンダリングされるので。

&#x000000028;を見つけて。

これは、( に変換され、次にURLエンコードして%26%23x0000000%3bになって。

 

 https://gist.github.com/jimmy-ly00/aa7308405c0f949e94015134f8246cc0

 

それを行った後、私の最終的なペイロードは次のようになって。

 \"><iframe/src=javascript:alert%26%23x000000028%3b)>

 

これが機能する理由は、サイトがURLを適切にデコードしてから。

下記のHTMLエンコードで適切にレンダリングしているためで。

したがって、反映されたXSSにつながって。

 &#x000000028;  ⇨  (

 

 

Best regards, (^^ゞ