XXE——理论与实例

XXE(xml外部实体注入漏洞)

1、原理:

​ XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。(XXE漏洞触发的点一般是可以上传xml文件的位置)

​ 现在很多语言里面对应的解析xml的函数默认是禁止解析外部实体内容的,从而也就直接避免了这个漏洞。以PHP为例,在PHP里面解析xml用的是libxml,其在≥2.9.0的版本中,默认是禁止解析xml外部实体内容的。

​ (基于 Json 的 web 服务也有可能存在着 XXE 注入)

2、知识点

​ <1> XML:XML用于标记电子文件使其具有结构性的标记语句,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

​ 文档格式:

​ <2> XML文档声明:可以把xml文档声明看成是xml文档说明,最简单的<?xml version="1.0"?>。

​ 文档声明结构: version属性:说明当前xml文档的版本(必须的);

​ encoding属性:说明当前xml文档使用的字符编码集,xml解析器会使用这个编码来解析xml文档。默认是utf-8;

​ standalone属性:说明当前xml是否为独立文档,独立即不依赖外部的约束条件,默认是yes。

​ <3> DTD文档类型定义:DTD用来定义XML文档的结构,它包含一系列规则说明,以确保XML文档的一致性和有效性。如XML文档可用的词汇和结构,元素名称(包括根元素),元素的属性及属性的数据类型和取值方式,子元素的名称、顺序、出现次数,元素是否拥有子元素,是否能拥有文本内容,等等。

​ DTD的引用:DTD可以是被XML引用的独立的外部文档,也可以嵌入到XML文档中。DTD文档是特殊格式的XML文档。例如,DTD文档:student.dtd的内容如下

	<!ELEMENT 班级 (学生+)>
	<!ELEMENT 学生 (ID,姓名,年龄?,住址?,电话*)>
	<!ELEMENT ID (#PCDATA)>
	<!EL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值