Shikata Ga Nai

Private? There is no such things.

Bypassing Amazon WAF to pop an alert()を訳してみた

Hello there, ('ω')ノ

 

Amazon WAF をバイパスしてアラートをポップするを。

 

脆弱性:

 WAFファームウェア

 XSS

 

記事:

 https://infosecwriteups.com/bypassing-amazon-waf-to-pop-an-alert-4646ce35554e

 

今回は、Amazon WAF をバイパスしてターゲットで XSS を取得する方法を。

バグバウンティに興味がある場合は。

WAF をバイパスできるペイロードを作成するという考え方を作成するのに役立ち。

 

WAF (Web Application Firewall) は。

悪意のあるトラフィックをフィルター処理することにより。

SQL インジェクション、クロスサイト スクリプティング (XSS) などの。

一般的な攻撃から Web アプリケーションを保護するために。

使用されるファイアウォールで。


発見:

コンテンツの発見段階で、できるだけ多くのエンドポイントを集めようとし。

パッシブ スキャン拡張機能を有効にして、常に Burpsuite Proxy を。

バックグラウンドで実行してみて。

かなりの時間を費やした後、Burp Suiteが生成したサイトマップを分析して。

エンドポイントを手動で検査し。

ターゲットの Web サイト自体は機能がかなり制限されていたため。

役立つものを見つけることができず。

 

robots.txt ファイルに移動すると、許可されていないエンドポイント、つまり。

/index.aspx が表示され。

Web サイトは Wordpress で実行されており、.aspx エンドポイントを。

含むページは wordpressのサイトで表示されるものではないため、これは少し奇妙で。

 

ページ自体は空白でしたが、ソース コードを確認すると。

HTML と JavaScript がいくつかあり。

これは、このページの目的が何なのか疑問に思い。

パズルに何かが欠けているように感じて。

 

次に、パラメータの発見ができることを思い出し。

Arjun は、この目的に最適なツールで。

サーバへの最小限のリクエストで、パラメーター名の膨大なリストを照会できて。

 

 

https://github.com/s0md3v/Arjun

 

3つのパラメータのうち、パラメータacc は <script>tag 内の。

Web ページに反映され。

JavaScript は次のようになり。

 xt_multc ='&x1=0&x2=REFLECTION_POINT';

 

REFLECTION_POINT は、パラメータ値が反映される領域を指し。

ページに JavaScript を挿入できるようにするには。

一重引用符をエスケープする必要があり。

 

このパラメータを使用してページで kxss をすばやく実行し。

サニタイズ/エンコードされておらず、そのまま反映されている特殊文字を。

特定して。

kxss は、パラメータ内のフィルタ処理されていない文字を識別するための。

優れたツールで。

 

https://github.com/Emoe/kxss

 

 

ご覧のとおり、フィルタリングされていない特殊文字がたくさんあり。

その中の一重引用符もその 1 つで。

目標に一歩近づいたので、これは朗報で。

 

この時点で、「;alert(document.domain);//」などの単純なペイロードを試すと。

WAF が作動し、試行は失敗して。

 


WAF をバイパス:

さまざまなペイロードを試してみたところ、alert( などの有効な JavaScript 関数名を含むペイロードが含まれているという結論に達しました。アラートと開き括弧の間にコメントを挿入してバイパスしようとしましたが、それもブロックされました。

Burpsuite Intruder を使用して、このコンテキスト (Javascript 文字列内のリフレクション) に基づいてペイロードをファジングしようとし

ましたが、成果が得られませんでした。

 

alert() 以外の関数でファジングすると、fetch() や print() などの関数が許可されていることがわかりました。これらを使用して、レポートで概念実証を実証することもできましたが、WAF を打ち負かして alert() 関数を実行するという課題に取り組みました。

 

alert(document.domain) を書く代わりに、window オブジェクトを使用してアラート関数を呼び出すことができます: window["alert"](document.domain) 。

 

残念ながら、このペイロードもブロックされました。次に、Javascript の複数行コメント構文をペイロードの間に使用して、通常は一連のルールと正規表現に基づいて実行される WAF をだますことができることを思い出しました。

 

最終的なペイロードは ';window/*aabb*/['al'%2b'ert'](document./*aabb*/location);// です。 「alert」文字列を「al」と「ert」の 2 つの部分に分割して追加しました。プラス記号は URL エンコードする必要があります。そうしないと、スペース記号として解釈されます。


ついにアラートを鳴らしました!

 

Best regards, (^^ゞ