常见web漏洞------XXE

目录

什么是XXE漏洞

Xxe漏洞形成原因:

防御:

危害:

下什么是XML  

XML文档格式:

第一部分:声明    

第二部分:DTD(文档类型定义)  

第三部分:文档的元素  

DTD部分

Xxe漏洞发生地点


什么是XXE漏洞

XXE漏洞全称外部实体注入漏洞  (外部实体的一个注入攻击)

产生地点:XXE漏洞发生在应用程序解析XML输入时

危害:造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害

Xxe漏洞形成原因:

1.支持接收XML数据

2.且没有对xml数据提供任何安全措施  

3.后端开启了外部实体解析  且没有对传进来的数据做任何的过滤

利用:

1.构造这么一个XML文档

2.然后在这个文档里面,通过外部实体,去通过这些协议,去指定读取一些文件

(后台在收到这个数据之后就会对这个外部实体里面的内容去进行执行,然后导致一些意外的数据泄露)

防御:

通过黑名单过滤用户提交的XML数据

配置XML处理器使用禁用DTD、禁止外部实体解析

方案一、使用开发语言提供的禁用外部实体的方法

方案二、过滤用户提交的XML数据

危害:

读取任意文件

执行系统命令

探测内网端口

攻击内网网站

下什么是XML  

XML用于标记电子文件使其具有结构性的标记语言。

可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素

XML文档格式:

第一部分:声明    

主要会定义一些版本   编码之类的东西

第二部分:DTD(文档类型定义)  

也就是他的文档类型定义     形成漏洞部分

       可以定义很多的实体内容,实体内容会对后面整个XML的文档去做一个对应的约束

第三部分:文档的元素  

也就是他的正文,在这个里面会通过一下标签去定义一些key和value属性跟值,这样的一些东西

DTD部分

DTD(文档类型定义):为XML文档定义语法约束

(XML里面的标签都是用户可以自定义的)

我们可以通过在DTD里面去编写一个文档约束(规范)来约束XML文档里面标签的规范(就是的按照DTD里面的格式来写)

DTD格式:

在DTD里面又分为集中不同的实体类型

第一个是内部声明

第二个是外部实体(我们这次漏洞用的)

第三个是public类型的

常见web漏洞------XXE_第1张图片

Hacker指定内部实体

System指定外部实体

外部实体里面的函数:

除了支持file以外,还支持   http  ftp等协议

不同程序支持的协议如下图:

常见web漏洞------XXE_第2张图片

 

以php为例  具体的说一下这个问题

Simplexml_load_string()函数

Simpexml_load_string()函数会把一个格式正确XML解析成为php里面的对象(object)

(可以把XML文档通过参数传给这个函数)

解析成一个对象之后,就可以在后面代码中,对这个对象里面的内容进行读取

然后来获取XML里面定义的一些配置的数据,他是这么样一个目的

Xxe漏洞发生地点

它发生在Simpexml_load_string()函数处理一个XML文档的输入的时候,输入时后台没有做相关的安全措施  没有禁止外部实体的加载  

如果说攻击者传过来的是一个恶意的XML(XML里面去定义了一个DTD)

那在这个DTD里面呢  它可以通过这个外部实体去加载一个对应的数据然后传给这个函数

这个函数就会  把这个数据进行读取   有可能就会把这个数据给泄露出去

那再php里面这个函数解析XML的时候  他实际上用的是libxml这个库

如果这个libxml库版本大于2.9.0的话  默认是禁止解析xml外部实体内容的

也就是说再php里面   libxml库的版本大于2.9.0的话是不会发生xxe漏洞的

Libxml_noent参数控制  外部实体的开关

 

你可能感兴趣的