pikachu之xxe

pikachu之xxe

XML基础知识

参考文章

一、什么是xxe?

XXE即“xml external entity injection”即“xml外部实体注入漏洞”。

攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题。

也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入

现在很多语言里对应的解析xml的函数默认是禁止解析xml外部实体内容的

就如在php中,对于xml的解析用的是libxml,在libxml版本>=2.9.0时默认是禁止解析xml外部实体内容的。

在本次案例中,为了漏洞复现,手动指定LIBXML_NOENT选项开启了xml实体注入。

XML是可扩展标记语言,灵活性很强,跨平台,经常被用来做配置文件,用来进行数据的传输和存储。同HTML很像都是树形结构,但功能不同。

知识补充:

xml可以外部引用实体,外用可支持多种协议,但是不同语言支持的协议不同(也有一些通用协议):

image-20210219153524596

php支持的协议示例:

image-20210219153034049
php://filter 是一种元封装器,设计用于数据流打开时的筛选过滤应用
data://同样类似于php://input,可以让用户来控制输入流
php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行
phar://xxx.png/shell.php解压缩包的一个函数,不管后缀是什么,都会当作压缩包来解压

二、靶场测试

之前输入payload多次测试,但是没能成功,浪费了好长时间,之后看了大佬的文章才豁然开朗。

原因是php5.5以后,有一些php包没有安装,如php55-php-xmlphp55-php-fpm,安装了就好了。

为了复现漏洞,换了php5.4版本

测试payload1:

当时用file协议没有成功,用php协议成功了。

<?xml version = "1.0"?>
<!DOCTYPE ANY [
    <!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php">
]>
<x>&f;</x>
image-20210219164558579

测试payload2:

<?xml version = "1.0"?>
<!DOCTYPE note [
    <!ENTITY hacker "ESHLkangi">
]>
<name>&hacker;</name>

image-20210219164710378

猜你喜欢

转载自blog.csdn.net/qq_43665434/article/details/113867722
xxe