目录
本文只是对XXE漏洞学习,参考多篇文章
一、XML基础
XML 用于编辑电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据,是一种允许用户的对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义、文档元素。
George Reminder 11111
因为只为学习漏洞,不对xml进行详细学习。
可以在此查看详细内容
而XXE漏洞相关的则为DTD
DTD
DTD 文档类型定义,可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD可以成行地声明XML文档中,也可以作为一个外部引用。1. 内部声明DTD假如DTD 被包含在XML源文件中,应当通过下面的语法包装在一个DOCTYPE声明中
]>George John Reminder 1111
2. 引用外部
假如DTD 位于XML源文件外部,那么应该通过下面的语言被封装在一个DOCTYOE定义中 <!DOCTYPE> 根元素 SYSTEM “文件名”> 与上 面内部声明 xml文件差不多,但是拥有一个外部的DTDGeorge John Reminder Don't forget the meeting!
包含DTD的 note.dtd 文件
3. 其中还有一种应用的格式为
DTD -实体
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。实体引用是对(实体)的引用。(实体)可以在内部或者外部进行声明
1. 内部实体声明
如:
&writer;©right;
注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。
2. 一个外部实体声明
如:
&writer;©right;
XML实体分为 普通实体和参数实体 。上面介绍的为普通实体 使用场合则为XML文档中
二、XML外部实体注入(XML External Entity XEE)
当允许引用外部实体时候,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口等危害。
有回显读取本地敏感文件
普通实体引用外部实体
服务器 xml.php
loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); $creds = simplexml_import_dom($dom); echo $creds;?>
payload
]>&goodies;
参数实体引用外部实体
%a;]>&xxe;
无回显读取本地的敏感文件
可以看到在上面两个实验中,都是有显示,而另外一种情况无回显
服务端 xml.php
loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); ?>
1.dtd
">
Payload
%remote;%int;%send;]>
利用
在上面当中一直使用的为 file 协议 。在真实情况中应该清楚为什么平台,能够使用什么协议。
三、总结
可以看出 XXE 漏洞,知识点涉及较多内容。如 其它利用 危害 Dos拒绝服务、内网主机探测 、内网主机端口扫描。 由于内容较多 之后在一一更新补充。