jquery漏洞如何测试

老版本jQuery的漏洞漏洞测试,说白了就是何测拿已知的CVE编号去比对版本号。但光看版本号不够,漏洞你得真刀真枪地验证。何测我见过太多人拿着扫描器报的漏洞“jQuery 1.4.2存在XSS漏洞”就直接交差了,可实际上那个漏洞触发条件苛刻,何测页面里压根没用到相关API。漏洞

最直接的何测测试方法,打开浏览器控制台,漏洞输入jQuery.fn.jquery。何测看到1.x或者2.x,漏洞心里就该拉警报。何测但别急着下结论,漏洞先看具体版本号对应哪些公开漏洞。何测比如1.9.0之前的漏洞版本,.attr()方法存在原型污染风险,测试时往DOM元素上设置onerror属性,如果弹窗了说明漏洞存在。

有个实战案例特别典型。某后台管理系统用的jQuery 1.7.2,前端有个搜索框,内容直接拼进$(selector)。测试时输入,结果没反应。为什么?因为系统做了输入过滤,把尖括号转义了。但绕过方法很简单,用jQuery.globalEval()配合window.name传递payload,照样能执行。这种组合攻击才是测试的重点。

再说说CVE-2012-6708,这是jQuery 1.6.3到1.8.3都存在的XSS漏洞,问题出在jQuery.htmlPrefilter()上。测试方法:在页面里执行$.parseHTML("x"),如果返回的DOM对象里href属性是完整的javascript协议,那就说明过滤失效了。我测过不少老系统,十有八九都中招。

还有个容易被忽略的点,jQuery的$.getJSON()方法在2.x版本之前,如果请求的接口返回了)]}', 前缀,会自动剥离。攻击者可以构造恶意JSONP回调,利用这个特性绕过同源策略。测试时直接请求一个可控的跨域接口,看响应体里是否带上了)]}', ,如果带了且jQuery版本低于2.0,那基本可以判定可利用。

实际操作中,工具只能帮你定位版本。真正判断漏洞能不能打,还得看代码上下文。比如有的系统虽然用了jQuery 1.4.4,但所有用户输入都经过escapeHtml()处理,那CVE-2015-9251的XSS就触发不了。这时候你得找那些直接操作DOM的地方,比如.html()、.append()方法是否接收了未经过滤的参数。

我习惯用Burp Suite抓包改参数来测。拦截前端请求,把参数值替换成"}]这种特殊字符,看返回的JSON里有没有被反射到HTML源码中。如果后端把错误信息原样返回,前端又用jQuery的.html()渲染,那就是一条完整的攻击链。

测试完记得清理现场。有些漏洞利用会往DOM里注入持久化对象,比如$.data()存储的恶意数据。刷新页面不代表清除干净,得用$.cleanData()手动移除,不然误判成漏洞依然存在,那就尴尬了。

最后说句实在话,jQuery漏洞测试本质上是在跟时间赛跑。很多老系统不敢升级,因为业务代码绑定了太多旧API。但安全这东西,该补的补丁还是得打。如果实在升不了级,至少把jQuery Migrate插件跑起来,它能帮你提前暴露那些即将失效的API调用,也算一种变相的漏洞扫描。