针对 HackSudo Thor 的黑盒渗透测试:通过 Apache mod_cgi 利用 CVE-2014-6271 Shellshock RCE,并结合 sudo 错误配置和 bash eval 注入实现完全权限提升。包括自定义的 CSRF 感知暴力破解工具和 Metasploit RPC 自动化。
目标: HackSudo Thor(来自 VulnHub)
目的: 获取 root 访问权限并读取/root/proof.txt
环境: 由 pfSense 防火墙隔离的 VirtualBox 独立实验室
本仓库记录了对 HackSudo Thor 进行的部分黑盒渗透测试,该虚拟机由 Vishal Waghmare 发布在 VulnHub 上,故意设置成易受攻击。目标是模拟真实世界攻击场景,外部攻击者试图攻破一个隔离的内部系统,主要目的是获取 root 访问权限并读取 /root/proof.txt 的内容。
本次评估遵循完整的渗透测试生命周期:被动侦察、网络发现、枚举、漏洞评估、漏洞利用、权限提升、后渗透利用以及痕迹清理。
主要使用的工具包括用于网络扫描的 Nmap、用于漏洞评估的 Nessus,以及作为主要漏洞利用和后渗透利用平台的 Metasploit Framework。在密码破解阶段使用了 John the Ripper、Hashcat 和在线彩虹表,但由于所使用哈希算法的强度,所有尝试最终均未成功。
虚拟实验室完全在 VirtualBox 中构建,旨在模拟一个包含三个不同安全区域的真实企业网络,所有区域均由 pfSense 2.7.2 防火墙管理。三个 NAT 网络配置如下:WAN 区域模拟公共互联网,Kali 攻击机位于该区域;DMZ 区域托管目标机器;内部 LAN 区域包含范围外的主机。``` Internet Zone — NatNetwork (10.0.2.0/24) │ │ Kali Linux 2025.4 [attacker] — 10.0.2.9 │ pfSense WAN interface — 10.0.2.8 │ ├── pfSense Firewall (boundary device) │ ├── DMZ Zone — DMZnat (10.0.4.0/24) │ ├── HackSudo Thor [TARGET] — 10.0.4.3 │ └── DVWA — 10.0.4.4 (out of scope) │ └── LAN Zone — LANnat (10.0.3.0/24) ├── Metasploitable 2 — 10.0.3.5 (out of scope) └── Windows XP Cyberlab — 10.0.3.4 (out of scope)

*由 pfSense 管理的逻辑网络安全区域*
WAN 接口通过 DHCP 分配了 `10.0.2.8/24`,LAN 接口设置为 `10.0.3.1/24`,OPT1(DMZ)接口设置为 `10.0.4.1/24`。为了在实验环境中引入一处故意配置错误,pfSense 的 WAN 接口上特意暴露了端口 80,模拟一种常见的真实世界管理员面板暴露场景,该入口成为进入内部网络的主要途径。
---
## 攻击链总结```
[Kali Linux — 10.0.2.9]
│
│ CSRF-aware Python brute force → admin / pfsense
▼
[pfSense webConfigurator — 10.0.2.8:80]
│
│ Firewall rules disabled → DMZ and LAN now reachable
▼
[HackSudo Thor — 10.0.4.3]
│
│ Shellshock RCE (CVE-2014-6271)
│ Apache mod_cgi → /cgi-bin/shell.sh
▼
[Meterpreter shell — www-data]
│
│ sudo -u thor /home/thor/hammer.sh
│ Command injection via eval → bash -i payload
▼
[Interactive shell — thor]
│
│ GTFOBins: sudo service ../../bin/bash
▼
[Root shell]
│
├── /root/proof.txt captured ✅
├── /etc/shadow + /etc/passwd exfiltrated
└── SSH RSA backdoor planted
在与目标环境进行任何接触之前,仅通过公开来源收集信息。两个主要来源是官方 VulnHub 上 HackSudo Thor 的入口页面和作者的公开 GitHub 个人资料。
VulnHub 页面确认目标是基于 Linux 的系统,难度为简单到中等,目标是找到 proof.txt 标志。查看作者的 GitHub 个人资料获得了更多见解。Vishal Waghmare 始终如一地设计 Linux 启动到根目录的机器,并将权限提升作为整个 HackSudo 系列的核心挑战。这塑造了进入主动阶段时的威胁模型:HTTP 和 SSH 服务是最可能的攻击面,预计提权路径涉及 sudo 错误配置、SUID 二进制滥用或利用自定义服务。
在实际参与中,这种作者模式分析也很重要。理解系统可能如何设计以及其管理员可能重复哪些类别的弱点,可以在发送第一个数据包之前提供方向。
| 字段 | 详情 |
|---|---|
| 目标 | HackSudo Thor |
| 作者 | Vishal Waghmare (@hacksudo) |
| 发布 | 2021年8月3日 |
| 难度 | 简单到中等 |
| 操作系统 | Linux (Debian) |
| 格式 | VirtualBox OVA |
| DHCP | 启用 |
| 预测攻击面 | HTTP、SSH、可能的 sudo 错误配置 |
此阶段涉及与环境直接主动接触。目标是识别所有活跃主机,了解网络边界,并在将焦点缩小到主要目标之前构建完整的攻击面图景。
首先对 WAN 子网(10.0.2.0/24)进行轻量级 Nmap ping 扫描(-sn),以最小的噪音发现活跃主机。识别到三台主机:10.0.2.1 和 10.0.2.2 是标准的 VirtualBox 基础设施地址,剩下 10.0.2.8 是唯一的非基础设施主机。该机器就成为直接焦点。
对 10.0.2.8 进行完整 SYN 隐蔽扫描完全没有返回结果。这是预期行为,而非错误。企业防火墙被设计为对端口扫描无响应,静默丢弃数据包而不回复。结果的缺失本身就是确认这是一个主动过滤流量的网络边界设备。
为了确认实际运行的服务而不依赖数据包扫描,使用 curl 发出直接 HTTP 请求。采用这种方法是因为标准的 web 请求比扫描工具更不容易被过滤。响应返回为 HTTP/1.1 200 OK,带有 Server: nginx 和页面标题 pfSense,确认了 webConfigurator 可直接从 WAN 接口通过端口 80 访问。
确认登录页面后,下一步是尝试恢复凭据。最初选择了 Hydra 作为暴力破解工具,但这次尝试由于两个原因失败了。第一个是实际的 rockyou.txt 包含超过 1400 万条目,在本评估的时间范围内无法实现。第二个是技术性的,且更为重要:pfSense 2.7.2 实现了 CSRF 令牌保护,每次页面加载都会生成一个唯一的加密令牌,必须与凭据一起提交。Hydra 的 HTTP POST 模块提交静态请求体,没有机制动态获取每个尝试的新令牌,因此每次提交在密码被检查之前就被拒绝了。
为了解决这个问题,编写了一个自定义 Python 脚本,复制完整的浏览器登录过程。对于每个密码尝试,脚本打开一个新会话,加载登录页面,从 HTML 表单中提取当前 CSRF 令牌,然后像浏览器一样将凭据与令牌一起提交。使用 CeWL 构建自定义单词列表,爬取 pfSense 登录页面并提取相关术语,然后用 fasttrack.txt 补充以覆盖已知默认凭据。
脚本恢复了凭据:admin / pfsense,未更改的默认值。
自定义 Python 脚本恢复 pfSense 凭据
在建立了仪表板访问权限后,审查了 pfSense 接口配置以了解完整的内部拓扑。这揭示了两个从 WAN 不可见的子网:LAN 在 10.0.3.0/24,DMZ 在 10.0.4.0/24。然后通过 web 界面禁用了 WAN 防火墙规则,并添加了两条直通规则以允许从攻击者 IP 到两个子网的流量。
对两个子网进行 Nmap ping 扫描,识别出六台活跃主机。其中四台进行了进一步枚举,排除了属于 pfSense 网关接口的 10.0.4.1 和 10.0.3.1。对所有四台主机同时进行组合服务枚举扫描,包括版本检测、默认 NSE 脚本和操作系统指纹识别。将结果与被动侦察交叉引用,识别出拓扑中的每台机器:
| IP 地址 | 关键服务 | 操作系统 | 识别为 |
|---|---|---|---|
| 10.0.4.3 | SSH 7.9p1, Apache 2.4.38, FTP | Linux (Debian) | HackSudo Thor |
| 10.0.4.4 | Apache 2.4.29, DVWA v1.10 | Linux (Ubuntu) | DVWA |
| 10.0.3.4 | Microsoft IIS 5.1 | Windows XP/2003 | WinXP Cyberlab |
| 10.0.3.5 | vsftpd 2.3.4, SSH, Apache 2.2.8 | Linux (Ubuntu) | Metasploitable 2 |
目标被确认为 10.0.4.3。所有进一步活动都专门集中在这台机器上。
在确定目标后,对其服务进行了更深入的分析,以映射攻击面并确定可行的利用路径。Metasploit 框架被用作此阶段的主要平台,特别是因为其 PostgreSQL 后端将所有扫描结果(主机、服务和漏洞)持久化存储,可在后期阶段引用而无需重新扫描。
在开始之前,使用 msfdb init 初始化了 Metasploit,用 db_status 验证了数据库连接,所有后续工作都在 msfconsole 内进行。
使用 db_nmap 命令对 10.0.4.3 进行完整扫描:SYN 隐蔽扫描、服务版本检测、默认 NSE 脚本、操作系统指纹识别以及所有 65,535 个 TCP 端口。结果自动存储在数据库中,并使用 hosts 和 services 检索。确认开放了三个服务:端口 21 上的 FTP(运行 Pure-FTPd)、端口 22 上的 SSH(运行 OpenSSH 7.9p1)以及端口 80 上的 HTTP(运行 Apache 2.4.38)。
然后使用针对性的 Metasploit 辅助模块对每个服务进行进一步枚举。HTTP 服务受到最多关注。使用 dir_scanner 和 http_crawler 模块映射 web 服务器上所有可访问的路径和端点。最重要的发现是 /cgi-bin/ 目录和一个名为 shell.sh 的脚本。另外,手动检查 news.php 的 HTML 源代码发现了一个作者隐藏的评论,指向 /cgi-bin/ 目录,这是一个故意提示,指向基于 CGI 的漏洞。检查了 FTP 服务的匿名访问(已禁用),并记下了版本字符串以便与 CVE 交叉引用。也检索了 SSH 横幅用于相同目的。
在攻击面完全映射后,使用两种方法进行了结构化漏洞评估:自动化的 Nessus 扫描和应用于每个服务的手动攻击者推理。
创建了一个自定义 Nessus 策略,显式启用了 CGI 扫描和 web 应用程序测试,目标端口为 21、22 和 80。这些设置默认未启用,在此处至关重要;否则 CGI 端点将不会被测试。扫描运行了大约 11 分钟,返回了 41 个发现。可操作的发现如下:
| 严重性 | 发现 | CVE | CVSS v3 |
|---|---|---|---|
| 严重 | Shellshock RCE | CVE-2014-6271 | 9.8 |
| 严重 | Shellshock 不完全修复 | CVE-2014-6278 | 8.8 |
| 中等 | SSH Terrapin 弱点 | CVE-2023-48795 | 5.9 |
| 中等 | 可浏览的 Web 目录 | — | 5.3 |
| 中等 | 点击劫持 / 无 X-Frame-Options | CWE-693 | 4.3 |
| 低 | ICMP 时间戳泄露 | CVE-1999-0524 | 2.1 |
在 /cgi-bin/shell.sh 上的两个 Shellshock 发现立即成为优先项。CVE-2014-6271 的 CVSS 评分为 9.8,可实现未经身份验证的远程代码执行,是扫描中影响最大的发现。CVE-2014-6278 表示同一漏洞的不完全修补,意味着即使部分修补的系统仍然可被利用。SSH Terrapin 弱点被评估为在没有中间人位置的情况下不可利用。其余发现在此次参与中没有有意义的利用价值。
在进入利用阶段之前,使用 Nmap 的 http-shellshock NSE 脚本直接针对 /cgi-bin/shell.sh 独立验证了 Shellshock 发现。利用前进行独立验证是方法论中的重要步骤,因为它确认漏洞是真实的而非扫描器的误报,并避免浪费时间尝试不会成功的利用。NSE 脚本确认了该端点存在漏洞,并选择 CVE-2014-6271 作为主要攻击向量。
在确认 Shellshock 后,利用阶段开始。此漏洞存在的原因是当调用 CGI 脚本时,Apache mod_cgi 将 HTTP 请求头作为环境变量传递给 Bash。在未修补的 Bash 版本中,环境变量中特制的函数定义会导致定义后附加的任何命令立即执行。通过将此有效载荷注入到对 /cgi-bin/shell.sh 请求的 User-Agent 头中,无需任何身份验证即可在服务器上执行任意命令。
Metasploit 模块 exploit/multi/http/apache_mod_cgi_bash_env_exec 完全自动化了此过程。该模块配置了 RHOSTS 设置为 10.0.4.3,TARGETURI 设置为 /cgi-bin/shell.sh,有效载荷设置为 linux/x86/meterpreter/reverse_tcp,监听器指向 Kali 机器的 4444 端口。运行该模块发送了恶意请求,服务器执行了有效载荷,Metasploit 接收了传入连接,建立了以 www-data 身份运行的 Meterpreter 会话。