文章目录
- 前言
- 一、XXE简述及XML基础
- XXE简述
- XML基础
- xml简介
- 文档格式
- xml树结构
- xml其它
- xml语法
- 1、格式良好的xml
- 2、编写第一段XML代码
- DTD介绍
- 内部文档声明(即DTD在XML源文件中)
- 外部文档声明(DTD位于XML源文件的外部)
- XML文档构建模块
- Elements(元素)
- 数量词的用法
- Attributes(属性)
- PCDATA(被解析的字符数据)
- CDATA(字符数据)
- 任务
- Entities(实体)
- 总结
- 二、XXE漏洞原理
- XXE的危害
- XXE如何寻找
- XXE限制条件
- 三、XXE漏洞分类与利用
- XML利用
- 1.读取任意文件
- 2.命令执行
- 3.内网探测/SSRF
- DTD不同类型的攻击列表
- 1、拒绝服务攻击(DDoS)
- 2、基本的XXE攻击
- 3、高级的 XXE 攻击 — 外带数据(OOB)通道
- 4、高级的XXE攻击(二)(了解)
- 5、XML包含机制(XInclude)
- 6、扩展样式表转换语言(XSLT)
- 四、XXE漏洞练习
- XXE的利用场景一:pikachu
- XXE的利用场景二:CTF
- XXE的利用
- 扩展:XXE工具-XXE injector
- 五、XXE漏洞防御
- 总结
前言
本次文章主要介绍XXE漏洞的原理,利用以及防御的过程,另外还有介绍一点XML的基础知识,详情请见下文。
一、XXE简述及XML基础
XXE简述
XXE全称(XML External Entity),XML外部实体注入攻击
1、危害
XXE漏洞可能带来的危害:外界攻击者可读取商户服务器上的任意文件;执行系统命令;探测内网端口;攻击内网网站。商户可能出现资金损失的情况。
2、案例(0元也能买买买,微信支付的SDK曝出重大漏洞(XXE漏洞))
XML基础
xml简介
a) xml,eXtensible Markup Language,可扩展标记语言,是一种标记语言,使用简单标记描述数据
b) xml是一种非常灵活的语言,没有固定的标签,所有标签都可以自定义
c) 通常,xml被用于信息的传递和记录,因此,xml经常被用于充当配置文件
如果把HTML和XML进行对比的话,HTML进行对比的话,HTML旨在显示数据信息,而XML旨在用来进行数据的传输和存储。
文档格式
a) XML文档结构包括
1、XML声明
2、DTD-文档类型定义(可选)
3、文档元素。
xml的作用——程序之间的数据传输通讯
xml树结构
a)XML文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”
b)父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞。
c)所有的元素都可以由文本内容和属性(类似HTML中)。
xml其它
a)XML文件后缀名 *.xml
b)XML编辑器:记事本、eclipse、notepad、…
c)判断XML文件是否写入正确。
d)IE5以上的浏览器内置了XML解析工具:Microsoft.XMLDOM
XML文件样例
xml语法
1、格式良好的xml
a)声明信息,用于描述xml的版本和编码方式
<?xml version="1.0" encoding="UTF-8"?>
b)xml有且只有一个根元素
c)成对标签(即标签必须关闭,html可以不关闭也能运行)
d)区分大小写
e)不可交叉编写
f)xml注释(和html一样)
<!--这是一个注释符-->
g)XML空格
1、HTML会把多个连续的空格字符裁剪(合并)为一个。
2、在XML中,文档中的空格不会被删减。
h)特殊字符使用实体
特殊字符在标签里面会被xml解析器解析。使用xml预定义的实体代替、引用。xml预定义实体有5个。
实体必须以符号“&”开头,以“;”结尾。
< | < | less than |
---|---|---|
> | > | greater than |
& | & | ampersand |
' | ’ | apostrophe |
" | " | quotation mark |
注释:在XML中,只有字符“<”和“&”缺少是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
i)xml元素命名规则
- 名称可以包含字母、数字以及其它的字符
- 名称不能以数字或者表单符号开始
- 名称不能以字母xml(或者XML、Xml等等)开始
- 名称不能包括空格
- 可使用任何名称,没有保留的字词。
j)xml属性规则
- 属性不能包含多个值(元素可以)
- 属性不能包含树结构(元素可以)
- 属性不容易扩展(为未来的变化)
- 属性难以阅读和维护。请尽量使用元素来描述数据。而仅仅使用属性来提高与数据无关的信息。
<!--错误示范-->
<note day="10" mouth="01" year="2008" to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>
k)属性要用引号
- xml元素属性类似于html标签的属性,如img标签的src属性。
- xml属性必须要引号包裹
- 如果是单引号包裹,也会被解析为双引号。
2、编写第一段XML代码
使用XML描述下表中学生成绩信息,XML文件为scores.xml
<?xml version="1.0" encoding="UTF-8"?>
<scores>