一处XXE漏洞分析

2020-12-17 14:36:1710002人阅读

1. 前言

之前在实战中遇到过该办公软件,最近刚好搭建了它的测试环境,于是便对其一处历史XXE漏洞进行了分析,攻击者可利用该漏洞读取服务器上的目录和文件,漏洞危害较大,建议采用百度漏洞扫描平台、智能威胁狩猎平台进行检测和防御。

2. 漏洞分析

本地搭建好该办公软件的环境后,先看portal应用的web.xml,位置在hotwebs/portal/WEB-INF/web.xml,通过搜索发现入口为LfwDispatcherServlet。

图片1.png打开LfwDispatcherServlet查看源码,POST请求会进入doPost方法,并且POC中没有clearcompressjs、setdebugmode参数,因此我们直接进入else语句。67-68行创建LfwCoreController对象后调用了它的handleRequest方法。

图片2.png

跟进到LfwCoreController,在handleRequest方法中创建ControlPlugin的对象plugin,而ControlPlugin为接口因此需要找到该接口的实现类,寻找实现类可以跟进到PresentPluginFactory的getControlPlugin方法。

图片3.png

此处是根据请求路径中的path来返回具体哪个类对象,根据POC可知,此处path为空因此返回了AjaxControlPlugin类对象。

图片4.png

跟进到AjaxControlPlugin的handle方法,方法创建了xml对象rootNode,并利用该对象构造后续的xml响应。69行加载了IRequestProcessor对象并随后调用了doProcess方法。

图片5.png

RequestProcessorBase是IRequestProcessor接口的实现类,跟进到该类doProcess方法,如果开启了debug模式,则会有对应的日志记录,29行调用了processModel方法,而该方法在同一接口的实现类AbstractRequestProcessor有定义。

图片6.png查看该方法,发现获取了xml参数,并且不为空的时候调用了IXml2ObjectSerializer接口的serialize方法处理xml,实现类为Xml2AppContextSerializer。

图片7.png跟进到Xml2AppContextSerializer,发现有两个serialize方法,根据参数类型最初调用了第一个serialize方法,并在85行再次调用其重载serialize方法。

图片8.png在117行很明显LfwXmlUtil是该软件处理xml的类库,调用了getDocumentBuilder方法返回对象的parse方法。

图片9.png跟进到getDocumentBuilder方法发现其返回了getFromThreadLocal方法的builder对象,这里加载了java原生的javax.xml.parsers.DocumentBuilderFactory类解析器对象bf,但这里没有调用setXIncludeAware、setExpandEntityReferences、setFeature等方法禁用外部实体,和2018年爆出的微信支付SDK XXE漏洞类似。

图片10.png3. 漏洞利用

虽然是blind xxe,但java中file://协议是可以起到列目录作用的,可以通过ftp协议将读取的数据传输出来实现回显,从而实现任意目录查看和任意文件读取,在vps执行xxeftp.py监听web和ftp端口。列目录:

图片11.png

 

图片12.png 

读取文件:

图片13.png4. 安全产品解决方案

百度度御关WAF、高级威胁感知系统,以及智能威胁狩猎平台已支持该漏洞的检测和拦截,有需要的用户可以访问anquan.baidu.com联系我们。


本篇文章由百度安全原创,转载请注明出处!

0
现金券
0
兑换券
立即领取
领取成功