xml注入类漏洞产生原因是xml解析没有正确配置,没有禁止解析外部实体,所以这个漏洞以及代码部分都比较简单,也很好分析。
只做代码分析,和简单的poc验证,仅供学习,一切均来自互联网。
还是某oa网上流传的漏洞。
漏洞位置: ReceiveCCRequestByXml。代码如下
首先直接看service函数。定义一个参数v3获取互联网传来的http请求然后把请求内容通过ServletUtil.getServletInputStreamContent转换成string类型。
ServletUtil.getServletInputStreamContent这个函数就是读取请求内容进行转换成String并且每一行加上换行符。然后返回转换后的String
如果转换以后的String不为空,就获取请求来源的Ip.然后去使用receiveCCRequestByXml函数解析之前传来的请求并且对请求做处理。
分析一下 receiveCCRequestByXml函数
它第一步调用了xmlToMap函数。
分析xmlToMap函数,xmlToMap函数首先通过SecurityMethodUtil.clearEntity对传入的xml做了简单过滤比如如果出现"entity"就使用* 替换如果没有出现entity字符串就直接返回之前输入内容。如下,但是这个过滤只有70%的用吧,哈哈哈哈哈哈哈,
然后它使用 Document var3 = DocumentHelper.parseText(var1)进行xml解析。
其实到这里就可以不继续分析了。
因为DocumentHelper.parseText就是在进行XML解析了。使用这一行代码就可以造成xml注入了。
下面是poc验证 可以以dnslog或者资源访问为例。
关于如何修复,可正确设置参数禁止外部实体注入。详情看参考文章
参考:
https://blog.spoock.com/2018/10/23/java-xxe/
https://zhuanlan.zhihu.com/p/265402618
https://cloud.tencent.com/developer/article/1674208
关于这个漏洞,我算是第一次自己去代码审计复现xxe方面的漏洞,我对这方面代码了解的很多,一步一步分析实践是很少的。还需要继续多看代码。
你们可以自己写一个非常非常简单的demo关于xml解析注入。自己导入一下dom4j包到Pom.xml里
然后写一个main如
原文始发于微信公众号(天才少女Alpha):xml注入
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论