Hello there, ('ω')ノ
DOM ベースの XSS は楽しくて利益も得られますを。
脆弱性:
DOM ベースXSS
記事:
https://medium.com/@haroonhameed_76621/dom-based-xss-for-fun-and-profit-bug-bounty-poc-f4b9554e95d
今回は、https://redacted.comというメインドメインにあり。
サブドメインの列挙は行わず、ジューシーなJavaScriptファイルを探し始め。
幸運なことに、興味深い2つのJavaScriptファイルを見つかって。
function saveRegion(regionId, forceReload) {//Save selection
customer_RegionId = regionId;
$.ajax({
type: 'POST',
url: "/Unauthenticated/SaveRegion",
data: {
regionId: regionId
},
success: function (response) {
setCookie('RegionId', regionId, 1);
$('#select-region-modal').modal('hide');
var url = getParameterByName('url');
if (url != null && url != '') {
createCookie('UAPathway', 'Start', 1);
setTimeout(function () {
window.open(url, '_self');
}, 1000);
上記のコードでは、認証されていないユーザが「Save Region」をクリックすると
Ajaxリクエストが送信されて。
Ajaxリクエストは、XMLHttpRequestオブジェクトを使用して
Webサーバと非同期にデータを交換するHTTPリクエストで。
これにより、完全なページの再読み込みなしで動的なWebページの更新が
可能になって。
POSTタイプのリクエストは、
/Unauthenticated/SaveRegionエンドポイントに送信され、
このコードは選択したregionId(regionIdは関数に渡されるパラメータ)を
クッキーに保存し、
ページを再読み込み(または指定されたURLにリダイレクト)し。
そして、ユーザのパスウェイ(UAPathway)に値「Start」のクッキーを設定して。
上記のコードはDOMベースのXSSの脆弱性を持っていて。
攻撃者が「url」パラメータに悪意のあるJavaScriptを注入できれば、
そのコードがページ上で実行され。
コードは「getParameterByName」関数を使用して「url」パラメータの値を取得し、
それが「window.open」関数で使用されて。
ソースコード:
function getParameterByName(name, url = window.location.href) {
name = name.replace(/[
]/g, '\$&');
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/+/g, ' '));
}
このJavaScriptコードでは、「getParameterByName()」という関数が
使用されていて。
この関数はURLからパラメータを取得するために使用され、
攻撃者は「url」パラメータを操作することでウェブサイト上で
悪意のあるコードを実行することができて。
window.open(url, '_self');
以下は、document.domainやdocument.cookieなどのDOM要素にアクセスし、
JavaScriptコマンドを実行するために使用できるデモンストレーションペイロードの
いくつかで。
JavaScriptコードを理解した後、
ユーザが提供する「url」パラメータから入力を受け取り、
DOM(sink)で実行されることが明確になり。
したがって、次のJavaScriptペイロードを使用して。
javascript:alert(document.domain)
javascript:alert(document.cookie)
Best regards, (^^ゞ