VulnHub靶机学习——XXE
字数 1451 2025-08-18 11:38:48
XXE漏洞靶机实战教学文档
靶机概述
- 靶机名称: XXE
- 难度等级: 中级
- 目标: 获取flag
- 下载地址: XXE靶机下载
- 运行环境:
- 攻击机: Kali Linux & Windows 7
- 靶机: XXE
- 虚拟化平台: VMware
- 网络设置: NAT模式
初始信息收集
1. 端口扫描
使用nmap进行扫描:
nmap -sV -p- 192.168.50.148
扫描结果:
- 开放端口:
- 80/tcp (HTTP服务)
- 5355/tcp
2. Web目录爆破
使用目录爆破工具发现以下重要路径:
/robots.txt- 包含目录:
/XXE和/admin.php
- 包含目录:
漏洞发现与利用
1. XXE漏洞发现
靶机名称为"XXE"提示可能存在XML外部实体注入漏洞。
测试点: /XXE页面的登录功能
2. XXE漏洞利用步骤
-
抓取登录请求:
- 使用Burp Suite拦截
/XXE页面的登录请求
- 使用Burp Suite拦截
-
构造恶意XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY admin SYSTEM "file:///etc/passwd">
]>
<root>
<name>&admin;</name>
<password>1</password>
</root>
-
文件读取结果:
- 成功读取
/etc/passwd文件内容
- 成功读取
-
读取admin.php源码:
- 修改XML中的文件路径为
file:///var/www/html/admin.php - 获取到Base64编码的PHP文件内容
- 修改XML中的文件路径为
3. 解密获取凭证
-
Base64解码:
- 对获取的admin.php内容进行Base64解码
- 发现经过MD5加密的密码
-
MD5解密:
- 解密得到密码:
admin@123
- 解密得到密码:
4. 登录admin.php
使用凭证:
- 用户名: 从上下文推断可能是
admin - 密码:
admin@123
登录后:
- 页面显示一个红色flag链接
- 点击后查看页面源代码获取flag提示信息
5. Flag获取过程
-
解码flag信息:
- 先进行Base32解码
- 再进行Base64解码
-
获取最终flag:
- 通过XXE读取解码后指示的文件
- 获取到另一段Base64编码内容
- 解码后发现PHP代码
- 将代码保存为1.php并在XAMPP环境中运行
- 最终获取flag
技术要点总结
XXE漏洞利用关键点
-
检测方法:
- 观察应用是否处理XML输入
- 尝试插入XML特殊字符看是否报错
- 靶机名称可能提供线索
-
利用方式:
- 文件读取:
file:///path/to/file - 可能支持的其他协议: http://, ftp://, php://filter等
- 文件读取:
-
绕过技巧:
- 当直接回显被过滤时,可通过外部DTD引入
- 使用CDATA包裹敏感内容
- 利用PHP过滤器获取源码:
php://filter/convert.base64-encode/resource=file.php
防御措施
-
禁用外部实体:
libxml_disable_entity_loader(true); -
输入过滤:
- 过滤XML中的
<!DOCTYPE>和<!ENTITY>声明
- 过滤XML中的
-
使用JSON替代XML:
- 现代Web应用优先考虑使用JSON
-
最小化XML解析器功能:
- 配置XML解析器禁用外部实体和DTD
扩展学习
-
XXE漏洞类型:
- 经典XXE
- Blind XXE
- 基于错误的XXE
- SSRF via XXE
-
相关工具:
- Burp Suite (用于拦截和修改请求)
- OWASP ZAP
- XXEinjector (自动化XXE工具)
-
实战技巧:
- 尝试读取
/proc/self/environ获取环境变量 - 读取
~/.bash_history查看历史命令 - 通过
expect://执行系统命令(需特定环境支持)
- 尝试读取