You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

domxss.com挑战赛中jQuery代码可被HTML注入的原理咨询

漏洞原理

这个漏洞的核心触发点是低于1.8版本的jQuery的选择器解析特性,你给出的代码中使用的是jQuery 1.7.1,正好属于存在缺陷的版本范围:

  • 当调用$("div[id="+t+"]")时,如果t(也就是URL hash截取的内容)中包含<字符,旧版jQuery不会将这段内容当作选择器字符串处理,而是会直接识别为HTML代码,自动创建对应的DOM元素,这就是你要找的注入入口。
  • 很多入门学习者会误以为只有.html()、.append()这类直接操作DOM内容的方法才会引入注入风险,实际上旧版jQuery的选择器本身就存在HTML解析缺陷,是非常容易被忽略的风险点。
可用Payload

你可以直接将以下内容放在URL的hash部分触发漏洞:

#<img src=x onerror=alert(1)>

触发逻辑:
当你把hash设为上述内容后,t的取值就是<img src=x onerror=alert(1)>,拼接后的选择器字符串变为div[id=<img src=x onerror=alert(1)>],jQuery 1.7.1检测到字符串中的<标签,直接将这段内容当作HTML插入到DOM中,img标签加载失败时就会触发onerror事件执行你写入的JS代码。如果需要实现更复杂的利用,替换onerror中的JS逻辑即可。

jQuery相关HTML注入学习建议
  • 首先要明确你使用的jQuery版本的已知安全缺陷,1.x分支的低版本(<1.9)存在大量选择器、DOM操作相关的注入风险,2.x和3.x分支也陆续爆出过不同场景的注入问题,做代码审计前先排查版本对应的公开CVE列表即可。
  • 重点关注所有用户可控输入流入jQuery方法的场景:除了常见的DOM操作方法外,选择器、$()直接传入用户可控字符串、.attr()传入用户可控属性名/值、.on()绑定事件的参数可控等场景都可能存在注入风险,不要默认认为jQuery封装的方法是绝对安全的。
  • 多做不同版本jQuery的注入对比测试,同一个Payload在不同jQuery版本下的执行效果差异很大,实测能帮你快速掌握不同场景的利用方式。

内容的提问来源于stack exchange,提问作者Black Wind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:30:00