XXE漏洞
XXE漏洞
XXE漏洞就是XML外部实体注入,就是当xml引用外部实体并解析的时候会产生的漏洞,xml解析器去获取其中的外部资源并存储到内部实体中,攻击者可引用外部实体对目标进行文件读取、命令执行、DDOS、内网探测等。
什么是xml
1.XML 指可扩展标记语言(EXtensible Markup Language)是被设计用来传输和存储数据,而HTML则是被设计用来显示数据。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。一个简单的xml文件包括声明、文档定义类型(DTD)、和元素。
<?xml version="1.0" encoding="UTF-8"?> 声明
<!DOCTYPE note [
<! ENTITY name "hello"> DTD定义类型
]>
<note>根元素
<to>&name;</to>子元素
<from>Jani</from>
<body>Don't forget me this weekend!</body>
</note>
什么是DTD
DTD(Document Type Definition,文档类型定义)
1)DTD是一套关于标记符的语法规则。它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML文件组成的一部分。
2)XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的DTD,
各公司都能够依照DTD建立XML文件,并且进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。
4)DTD中的所有约束都是针对 与某个标签的子标签进行约束的
(XML之DTD)[https://www.cnblogs.com/zhangyinhua/p/7586853.html#_label0]
1.DTD内部文档类型声明
引入内部的dtd
<!DOCTYPE 根元素 [
规则
]>
<xml version="1.0"? encoding="utf-8">
<!DOCTPY 班级 [
<!ELEMENT 班级(学生+)>
<!ELEMENT 学生(姓名,年龄,身高)>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT 身高 ANY>
]>
<班级>
<学生>
<姓名>张三</姓名>
<身高>180</身高>
<年龄>20</年龄>
</学生>
</班级>
1.ELEMENT 声明元素
2.PCDATA的意思是被解析的字符数据
3.就是通过DTD来定义xml的文档类型,必须要有一个或者多个班级标签,班级标签又要有姓名、年龄、身高等子标签,然后就是姓名和年龄标签里只可以又 PCDATA的元素,身高的标签可以是任何元素。
2.DTD外部部文档类型声明
引入外部的DTD
<!DOCTYPE 根元素 SYSTEM "dtd路径">
<xml version="1.0"? encoding="utf-8">
<!DOCTPY 班级 SYSTEM "1.dtd">
<班级>
<学生>
<姓名>张三</姓名>
<身高>180</身高>
<年龄>20</年龄>
</学生>
</班级>
//1.dtd
<!ELEMENT 班级(学生+)>
<!ELEMENT 学生(姓名,年龄,身高)>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 身高 ANY>
3.DTD实体
实体是用于定义引用普通文本或特殊字符的快捷方式的变量,相当于变量,但它不仅能用来存储指定的数值,它还能从本地文件或者远程网络调用相关数据。
3.1DTD内部实体的声明方式是
<! ENTITY 实体是名称 "内容">
使用&+实体名称+;来调用对应的实体如下
<xml version="1.0"? encoding="utf-8">
<!ENTITY shiti1 "hello">
<!ENTITY shiti2 "word">
<author>&shiti1;&shiti2;</author>
3.2外部实体的调用
<! ENITIY 实体名称 SYSTEM "有效的url或文件名、http、ftp或其他协议形式的内容">
SYSTEM 是让xml解析器知道这是一个外部实体,需要xml解析器去获取其中的外部资源并存储到内部实体中。(xxe漏洞的成因)
4.xxe-lab靶场
先来看看php的xxe靶场
一个登入界面
开启抓包登入一下,可以看到这很明显的xml格式
构造payload
<>
5.总结:
xxe漏洞主要运用xml外部实体可以解析外部文件的特性 才使得攻击成为可能.
<! ENTITY %shiti1 " ">