簡體   English   中英

HTML 在這個 domxss.com 挑戰中如何注入

[英]How is HTML injection possible in this domxss.com challenge

OWASP 對 HTML 注入頁面( 鏈接)的測試顯示了一個特定的代碼,該代碼應該容易受到 HTML 注入的攻擊。

<script src="../js/jquery-1.7.1.js"></script>
<script>
function setMessage(){
    var t=location.hash.slice(1);
    $("div[id="+t+"]").text("The DOM is now loaded and can be manipulated.");
}
$(document).ready(setMessage  );
$(window).bind("hashchange",setMessage)
</script>
<body>
    <script src="../js/embed.js"></script>
    <span><a href="#message" > Show Here</a><div id="message">Showing Message1</div></span>
    <span><a href="#message1" > Show Here</a><div id="message1">Showing Message2</div>
    <span><a href="#message2" > Show Here</a><div id="message2">Showing Message3</div>
</body>

這段代碼是 ( domxss.com ) 上的挑戰之一,我不確定這有多脆弱。

據我了解,URL 的 hash 可以用作輸入,並且 URL 中的任何更改都將觸發setMessage function。 這個 URL hash 將是我的有效載荷。 但是,此有效負載僅用作 jQuery 中的選擇器,這是我碰壁的地方。

我對 XSS 比較陌生,所以任何有效載荷都會受到贊賞。 一個解釋顯然是受歡迎的。

此外,通過 jQuery 更好地了解 HTML 注入攻擊的任何資源都將是有用的。

是的,非常舊的 jQuery 版本容易受到來自動態選擇器字符串的 XSS 攻擊。 請參閱 jQuery 的錯誤跟蹤器上的錯誤 #11290 - 如果制定得恰到好處,選擇器字符串可能會意外地解釋為 HTML。 如果選擇器字符串可以由用戶提供,您可能會遇到麻煩。

對於一個最小的例子:

 $(`div[class='<img src="" onerror=alert("evil")>]`).text("The DOM is now loaded and can be manipulated.");
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

所以,原

$("div[id="+t+"]")

可以注入這樣的t導致任意代碼運行。

 const t = `'<img src="" onerror=alert("evil")>]`; $("div[id="+t+"]").text("The DOM is now loaded and can be manipulated.");
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

該錯誤已在 9 年前修復,因此除非您故意使用 jQuery 的舊版本並且從不更新您的依賴項,否則它可能不會影響您。

該錯誤最終是由不夠嚴格的正則表達式引起的。 .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM