【Web渗透】jQuery是怎么形成XSS的

最近有人问我怎么检测jQuery的XSS,之前因为有强大的扫描器,只管上报即可,没有认真的分析形成的原因。

这次真的给问倒了,于是自己搭了个环境来研究一下。

分了如下几个可能出现的问题来解决。

1、是否所有的jQuery都存在XSS漏洞?

首先答案是否认的,用如下的例子来解决这个问题。

之前被误导,在网上发现这个代码,说是用来检测jQuery的XSS代码。

var value = location.hash.split('#')[1]
$(value)

让我一度以为所有的jQuery都存在XSS。

其实这个代码,出现的原则是当你的代码以这样的形式出现的时候。

$(可被用户输入)

这个时候,你的代码就已经是存在隐患的了,而检测的代码正是如此。

并且这个代码还为攻击者做了帮手,它使用split('#')[1],这里的#被忽略掉了,如果你输入的是如下的地址。

/test.html#<img src=1 onerror=alert(1) />

那么在被这段代码处理了以后,结果就变成了。

<img src=1 onerror=alert(1) />

因为jQuery是可以识别这种字符串的,并且它会被当做一个正确的字符串去匹配,还被正确匹配了,因为jQuery本来就具有这样的功能。

但是,如果你去掉这样的处理以后,像下面的这段代码。

$(function () {
    try { $(location.hash) } catch (e) { }
})

你就会发现,不是所有的jQuery都存在XSS漏洞。

经过测试,1.6(包含1.6版本)以及以下版本,在这段代码中,都弹窗了,也就是存在XSS。

1.7(包含1.7版本)以上版本,均没有弹窗。

那么引出第二和问题了。

2、jQuery中XSS漏洞形成的真正原因是什么?

经过打断点调试,得出以下结论:

    1、选择器正则表达式漏洞

    2、onerror执行JavaScript

在1.6版本中,它选择器的正则表达式是这样的

quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/

而到了1.7及其以上版本,它的选择器的正则表达是这样的。

rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/

如果想自己检测这个表达式,只要去掉头尾的/就是它的正则表达式。

两个表达式有明显的差异,输入相同的匹配文字。

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

1.6以下

共找到 1 处匹配:
#<img src=1 onerror=alert(1) />

1.7以上

(没有匹配)

所以可以说这个问题是由于正则表达式匹配不严谨带来的,并且伴随着

onerror="JavaScript代码"

使得在图片没有被正确加载的时候,在VM中执行了如下代码。

(function(event){// 被输入在onerror中的JavaScript代码
})

3、总结

其实在所有jQuery中想要形成XSS,前提都是需要$(可被用户输入)这样的代码。

但是在1.6版本以及以下版本中,错误的正则表达式使得它可以更容易的被利用。

 

最后推荐一个在线匹配正则表达式的网站。

https://c.runoob.com/front-end/854

4、交流

如果你是网络安全爱好者,欢迎加群交流:

QQ:425343603

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要检测 jQuery 版本的 XSS 漏洞,可以按照以下步骤进行: 1. 了解 jQuery 的版本漏洞历史:根据 jQuery 的版本发布历史,了解已知的 XSS 漏洞和对应的修复版本。这些信息可以在 jQuery 官方网站的版本更新记录中找到。 2. 检查 jQuery 引用的文件:查看网页源代码,找到引用的 jQuery 文件。可以通过查看 script 标签的 src 属性或者通过浏览器开发者工具的网络选项卡查看。 3. 确认版本号:通过检查 jQuery 文件的 URL,可以找到包含版本号的部分。常见的命名格式是 "jquery-x.x.x.min.js",其中 "x.x.x" 表示版本号。 4. 查找已知漏洞:使用已知的 jQuery XSS 漏洞列表,对所获取的版本号进行比较。如果版本号存在于已知漏洞列表中,并且未修复,则可能存在 XSS 漏洞。 5. 扫描代码:针对特定版本的 jQuery,使用扫描工具或手动分析代码,查找潜在的 XSS 漏洞点。这些漏洞点可能包括未正确转义的输入、不安全的DOM操作或函数调用等。 6. 进行漏洞验证和测试:对潜在的漏洞点进行验证和测试,以确认是否存在实际的 XSS 漏洞。可以尝试使用各种有效的 XSS 攻击载荷来测试漏洞点。 7. 应用安全补丁或升级:如果发现存在 XSS 漏洞,应及时应用 jQuery 的安全补丁或升级到已修复的版本。确保将最新的安全版本应用到网站中。 8. 定期更新和审查:定期检查 jQuery 的版本历史记录和已知漏洞列表,以确保你的网站使用的是最新、安全的版本,并及时更新和修复潜在的漏洞。 总之,检测 jQuery 版本的 XSS 漏洞需要了解漏洞历史、检查引用的文件、确认版本号、查找已知漏洞、扫描代码、进行验证和测试以及应用安全补丁或升级。这样可以确保你的网站使用的是最新、安全的 jQuery 版本,减少 XSS 攻击的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值