Hello there, ('ω')ノ
XSSを実行するためにWAFをバイパスするを。
脆弱性:
XSS
記事:
https://infosecwriteups.com/bypassing-waf-to-perform-xss-2d2f5a4367f3
XSSを探していたところ、/adminディレクトリに管理者ログインフォームがある。
Webサイト(website.comと仮定)にアクセスすると。
下記が、website.com/adminの管理パネルで。
ランダムなクレデンシャルを入力して、どのような応答が得られるかを確認すると。
/admin/index.php?msg=Invalid%20Email%20and%20Password
これは私がリダイレクトされたURLであり、デフォルトではエラーメッセージを表示するのは非常に悪い考えですが、これはさまざまなWebサイトでよく見られる実装です。
?msgの任意の値がWebサイトに反映される可能性があるため。
理解しやすいように下記のように変更してみると。
website.com/admin/index.php?msg=HelloWorld
?msg=HelloWorldが反映されて。
これで、入力したすべての入力がその赤いフォントのテキストに。
反映されていることがわかったので。
HTMLタグを挿入しようとするとどうなるかHTMLインジェクションを。
?msg=<h1>Hello World</h1>
HTMLインジェクションが成功したので。
今度は、Javascriptコードを配置することに。
XSSがポップアップすることを期待して。
50を超える基本的なXSSペイロードを試すことに。
?msg=<script>alert(1)</script>
?msg=<img src=xss onerror=alert(1)>
?msg=<input/onmouseover=”javaSCRIPT:confirm(1)”
?msg=<iframe %00 src=”	javascript:prompt(1)	”%00>
すべてサーバによってブロックされており、裏にWAFがあるようで。
下記がXSSリクエストがWAFによってブロックされた画面で。
50を超えるXSSペイロードを入力することで。
WAFが実際にフィルタリングしているものについて結論を出すことに。
<script>、<frame、<input、<formのすべてのペイロードは。
WAFによって直接ブロックされて。
alert( )を含むすべてのペイロードも、WAFによって直接ブロックされて。
では、alert( )が除外されたときに、XSSをどのようにポップアップするのかを。
推測していると、<imgが除外されていないことに気付いたので。
それに基づいてより複雑なペイロードを作成し始めて。
下記は、<imgはバイパスされたもののXSSはなくて。
?msg=<img/src=`%00`%20onerror=this.onerror=confirm(1)
次に、<svg>が除外されていないことに気づいて。
alert()がブロックされているものの、confirm()が機能したので試すと。
<svg><script%20?>confirm(1)
svgが挿入されたものの、XSSポップアップはなくて。
WAFがあるので、eval.atobを使用したBase64デコードなどバイパスを試すと。
うまくいったので、<svg>を使い続けて。
<svg/onload=eval(atob(‘YWxlcnQoJ1hTUycp’))>
https://developer.mozilla.org/ja/docs/Web/API/atob
このペイロードは、base64値をデコードしてalert(‘XSS’)に。
ペイロードを起動するとXSSが。
XSSペイロード(WAFによってフィルタで除外された)を。
base64にエンコードすることで、実行できて。
<svg/onload=eval(atob(‘YWxlcnQoZG9jdW1lbnQuY29va2llKQ==’))>
このbase64は、alert(document.cookie) で、期待どおりに機能して。
Base64でエンコードされると、WAFによって検出されないようで。
Best regards, (^^ゞ