购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.8 XML外部实体注入

XXE(XML External Entity Injection, XML外部实体注入)是一个注入漏洞,并且注入的是XML外部实体。如果能注入外部实体并且成功解析,就会大大拓宽XML注入的攻击面。

1.8.1 XML的基本语法

在了解XXE漏洞之前我们先了解一下XML文档的基本语法。

1.XML

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

图1-193 XML文档结构

2.DTD

DTD(Document Type Definition,文档类型定义)的作用是定义XML文档的合法构建模块。DTD可以在XML文档内声明,如图1-194所示。也可以外部声明,如图1-195所示。

图1-194 内部声明

图1-195 外部声明

实体又分为一般实体和参数实体,如图1-196所示。

图1-196 DTD实体

● 一般实体的声明语法:<!ENTITY实体名"实体内容">。

● 引用实体的方式:&实体名。

● 参数实体的声明格式:<!ENTITY%实体名"实体内容">,只能在DTD中使用。

● 引用实体的方式:%实体名。

1.8.2 利用方式

1.读取任意文件

读取任意文件的示例代码如下。

由于这里使用的是php://input接收的参数,因此我们直接POST即可,Payload如下,利用结果如图1-197所示。

图1-197 读取Windows系统配置文件

2.执行系统命令

执行系统命令的示例代码同上,Payload如下。

需要在安装expect扩展的PHP环境里执行系统命令,其他协议也有可能执行系统命令。

3.扫描与攻击内网服务

扫描与攻击内网服务的示例代码同读取任意文件,我们直接给出Payload如下。

1.8.3 Bypass技巧

XXE也有没有回显的时候,这时候我们要用到Blind XXE,示例代码如下。

我们需要一台安装了Apache等服务的服务器,在Web根目录下放置test.dtd文件,代码如下。

给出利用Payload,利用结果如图1-198、图1-199所示。

图1-198 引入外部dtd

图1-199 返回文件Base64编码后的内容 j7LSre7GS0AxY+Qou2ey6SHiHO9BBqR8OAHQqmWPnk0ARANx77OL44viL8LWarkf

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开