一、安装靶场
1.将下载下来的XXE靶场压缩包解压后使用VM打开xxe.ovf即可创建XXE虚拟机(中途填写名称时不要只写XXE会与文件夹中文件冲突 以防万一) ,下图为搭建好后的场景。
二、查找主机和开放端口,进行访问
1.虚拟机创建默认为NET模式,本机查看IP网卡8为NET网卡不清楚的可以根据下图指示查看
2.查看XXE靶机的网卡类型,虚拟机左上方-->编辑(右击)-->虚拟网络编辑器-->NET模式查看下方网段
3.使用御剑端口扫描工具检测开放端口,192.168.79.1:80端口是主机的IP所以另一个就是我们的XXE靶机IP及端口192.168.79.132:80访问后是Ubuntu的默认网页
三、进行目录扫描
1.使用工具7kbscan-WebPathBrute扫描目录,发现robots文件查看是否为源码泄露,疑似/xxe目录和/admin.php目录,进行访问。
四、访问文件路径并确定攻击方式
访问http://192.168.79.132/xxe/尝试admin登录并抓包查看发现请求体中的数据为XML格式发送到重放器查看回显点并构造XML格式poc,更改name值时回显的代码也会跟着改变所以我们可以通过name来带出我们文件中的源代码查看是否有我们所需要的信息。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ENTITY file SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php">]>
<root><name>&file;</name><password>admin</password></root>
将xxe.php文件的回显结果进行base64解码得无用结果,再查看admin.php文件的源代码并解码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ENTITY file SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">]>
<root><name>&file;</name><password>admin</password></root>
对admin.php结果解码得到下列有用信息,从中我们可以知道username和password,将password进行解码后尝试登录,在xxe的界面登录显示始终错误,所以我们应该知道我们查看的admin.php文件,故而应该从admin界面登录查看信息
登录网址应该为xxe/admin.php,账号和密码都已经在解码得到的php文件中给出。点击flag查看网页错误但是出现了新的文件名,利用刚刚的poc再次查看php文件
通过发送的XXE请求得到文件源代码,再次对得到的数据解码得到下列数据,格式为base32位编码,解码后得到的数据还是经过base64编码的,再次解码,得到的依旧是一个php文件,查看文件内容
JQZFMMCZPE4HKWTNPBUFU6JVO5QUQQJ5
L2V0Yy8uZmxhZy5waHA=
/etc/.flag.php
base64解码后为以下结果,通过php编程工具执行查看内容
可以得到flag至此XXE靶机攻击结束。