当前位置:   article > 正文

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

jquery datagrid xss

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

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

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

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

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

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

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

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

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

$(可被用户输入)

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

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

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

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

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

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

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

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

你就会发现,不是所有的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. 共找到 1 处匹配:
  2. #<img src=1 onerror=alert(1) />

1.7以上

(没有匹配)

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

onerror="JavaScript代码"

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

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

3、总结

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

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

 

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

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

4、交流

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

QQ:425343603

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/695889
推荐阅读
相关标签
  

闽ICP备14008679号