一、XXE简述
XXE(XML External Entity Injection)全称是XML外部实体注入,当服务端允许引用外部实体时,通过构造恶意payload就可能造成任意文件读取、内网端口探测甚至命令执行等危害。
知识储备,自己之前也是学的迷迷糊糊的,这次重新理一下思路。
DTD(文档定义类型),DTD可在XML内部进行声明,也可以外部引用。
代码语言:javascript复制内部声明格式如下:
<?xml version="1.0"?>
<!DOCTYPE note [ #定义文档类型
<!ELEMENT note (to,from,heading,body)> #定义note四个元素“to,from,heading,body”
<!ELEMENT to (#PCDATA)> #定义元素类型为PCDATA(会被解析的文本)
<!ELEMENT from (#PCDATA)> #CDATA类型(不会被解析)
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
xml要按下面的格式进行编写
代码语言:javascript复制<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
外部声明格式:
代码语言:javascript复制<?xml version="1.0"?>
<!DOCTYPE note SYSTEM"note.dtd"> #调用note.dtd
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget themeeting!</body>
</note>
note.dtd内容
<!ELEMENT note(to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
DTD实体,实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
内部引用:
代码语言:javascript复制XML:
<author>&writer;©right;</author> #内部引用DTD实体writer和copyright
DTD:
<!ENTITY writer "BillGates"> #实体名称“writer” 值“Bill Gates”
<!ENTITY copyright "Copyright W3School.com.cn">
外部引用:
代码语言:javascript复制XML:
<author>&writer;©right;</author>
DTD: #实体内容为外部实体
<!ENTITY writer SYSTEM"http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
二、测试过程
Office从2007版本引入了新的开放的XML文件格式,更改为.zip文件进行解压后即可发现相关sheet信息和[Content_Types].xml文件。
1、在某次测试中发现了模板下载和导入两个功能点
2、点击模板下载,成功下载到本地模板.xls文件,对文件进行另存为.xlsx格式,并对文件修改后缀名为.zip,解压如下:
3、向[Content_Types].xml文件中插入dnslog payload进行测试。
4、文件保存,重新压缩并重命名为.xlsx文件,上传文件,查看dnslog记录
导入完毕
Dnslog出现记录,服务端对XML进行了解析
5、由于是java的站,这里使用ftp对数据进行外带(php的站可以使用base64编码进行数据外带)
使用xxeserv工具进行测试,这个工具集成了ftp和http
链接:https://github.com/staaldraad/xxeserv
xxeserv为go编写,go build编译一下
外部实体sp2.dtd:
启动http和ftp,http默认端口2122,ftp默认端口2121
更改payload,引入外部实体(此处payload要与外部dtd相对应)
6、再次导入文件
此时ftp接收到相关信息
三、总结
文中简述了XXE漏洞基本原理和DTD类型格式,在某些文件导入的功能处也可能存在相关漏洞。
参考链接:https://www.w3school.com.cn/dtd/dtd_intro.asp