Hello there, ('ω')ノ
$$$相当のクッキー! | | 反映された DOM ベースの XSS | バグ報奨金 POCを。
脆弱性:
DOMXSS
記事:
今回は Synack Red Team の QR ベースのターゲットで。
脆弱性分析:
主な焦点は、https://redacted.com であるメイン ドメインにあったため。
サブドメインの列挙は行わず、ジューシーな JavaScript ファイルを探し始めて。
幸いなことに、次の JavaScript を見つけた 2 つの。
興味深い JavaScript ファイルを見つけて。
function:
code: function(e) {
var a = e.car,
t = e.articleUuid,
i = e.returnPath,
u = e.moreInfoData,
m = e.currentUser,
o = m.canPrint,
d = void 0 === o || o,
E = m.canBookmark,
b = void 0 === E || E,
f = a.uuid,
h = i ? "Search Results" : "Car";
return l.createElement("div", null, l.createElement("div", {
className: "viewer-header"
}, l.createElement("div", {
className: "car-form-container"
}, l.createElement("div", {
className: "article-toolbar-container"
}, l.createElement("div", {
className: "page-width article-toolbar"
}, l.createElement(l.Suspense, {
fallback: l.createElement("div", null)
}, l.createElement(s, a)), l.createElement("ul", {
className: "back-to-search-ul"
}, l.createElement("li", {
className: "back-to-search-results"
}, l.createElement("a", {
className: "button",
href: i || "/car/" + f + "/search"
},
このコードは、React アプリケーションで car viewer コンポーネントを。
レンダリングするために使用され。
このコンポーネントは、車の詳細のほか、検索に戻るボタンや。
ユーザが特定のアクションを実行できるツールバーなど。
その他の情報を表示して。
「a」タグの href 属性が適切にサニタイズされていない場合は。
このコードで DOM ベースの XSS が可能になり。
ユーザ入力が適切にサニタイズされていない場合は。
悪意のあるコードが実行される可能性があり。
DOM ベースの XSS 攻撃が可能になって。
2 番目の JavaScript ファイルで、Reflected DOM-Based XSS の。
適切なソースとシンクを見つけて。
以下はソースとシンクで。
Source:
document.addEventListener("DOMContentLoaded", (function() {
var e = document.getElementById("search-application-container")
, t = JSON.parse(e.getAttribute("state")) || window.initialState;
a.render(r.createElement(rr, t), e)
この Source は、DOM で React コンポーネントを。
レンダリングするために使用され。
ID「search-application-container」を持つ要素から状態を解析し。
React コンポーネントに渡して。
Sink:
l.createElement("a", {
className: "button",
href: i || "/car/" + f + "/search"
}
DOM 関数 l.createElement は HTML タグ a を作成し。
その属性値を HTML href 属性に設定し。
これは、ユーザが制御できる returnPath パラメータで。
JavaScript コードを理解すると、returnPath パラメータからユーザ提供の入力を。
取得し、それを DOM 別名シンクで実行することが明確にわかり。
そこで、次の JavaScript ペイロードを使用して。
javascript:alert(document.domain)
Best regards, (^^ゞ