theHackerLabs_MobyDick_WriteUp 的文章封面
返回渗透 Wiki
靶机复盘 渗透 Wiki

theHackerLabs_MobyDick_WriteUp

TheHackerLabs MobyDick 靶机中,由 SSH 入口、Docker 网段发现、Grafana 文件读取与 KeePass 密码库串联起来的攻击链。

MobyDick

靶机初始页面

目标与线索

端口扫描

提示内容

目录扫描,注意选择大字典和后缀

SSH 入口

penguin.php

80 页面给出了一句西班牙语提示:

Hola pinguinito. La ballena Docker con Grafana 8.3.0 esconde un database_pass.txt en /tmp

意思是:Docker 中的 Grafana 8.3.0 在 /tmp 留下了 database_pass.txt。这一步直接给出了后续复盘的四个关键词:pinguinito、Docker、Grafana 8.3.0,以及目标文件路径。

SSH 入口与本机线索

hydra 爆破拿到 pinguinito 用户的访问权限。

登录后发现 Database.kdbx:这是 KeePass 的加密密码库,通常不能直接读取,必须有主密码或配置的密钥材料。

KeePass 数据库文件

继续检查运行中的进程,可以看到:

/usr/bin/containerd-shim-runc-v2 -namespace moby -id <container-id>

containerd-shim-runc-v2 是 Docker/containerd 正常的容器运行时组件;moby 命名空间说明系统中存在 Docker 容器。这与初始提示相互印证,也把枚举重点转向 Docker 默认网段。

Docker 运行时进程

Docker 网段发现与 SSH 隧道

枚举容器网络后,发现 Grafana 服务:

172.17.0.2:3000  Grafana 8.3.0

容器网段发现

容器地址只能由靶机访问,因此在自己的测试机上通过 SSH 建立本地端口转发:

ssh -N -L 127.0.0.1:3000:172.17.0.2:3000 pinguinito@192.168.43.23

其中 -N 表示不执行远程命令,只保持隧道;-L 则把本机的 127.0.0.1:3000 转发到由靶机可达的容器服务。隧道建立后,从本机浏览器访问 http://127.0.0.1:3000 即可进入 Grafana。

Grafana 登录页

Grafana 文件读取

该靶场中的 Grafana 仍保留初始默认凭据,admin:admin 可以登录并触发首次修改密码流程。随后依据已识别的 8.3.0 版本,在授权范围内验证文件读取问题,成功读取容器中的:

/tmp/database_pass.txt

验证过程

文件读取结果

文件中保存的字符串正好是打开 Database.kdbx 所需的主密码。

KeePass 数据库与结果

使用 KeePassXC 打开数据库:

keepassxc Database.kdbx

打开 KeePass 数据库

密码库中保存了另一位本地用户的凭据,至此攻击链闭合:

image-20260919145542045

初始提示 → SSH 用户 → Docker 网段 → Grafana → /tmp/database_pass.txt → Database.kdbx → 本地用户凭据

密码库中的凭据

修复建议

  • 部署 Grafana 后立即禁用默认凭据,限制管理接口来源,并持续升级到受支持版本。
  • 不要把密码或密钥材料写入容器的 /tmp;使用 Docker Secrets、受控环境变量或专用密钥管理服务。
  • 将密码库与其主密码、密钥文件分离保管,不让它们在同一主机上形成可串联的路径。
  • SSH 优先使用密钥认证、最小权限和登录审计,避免弱口令与横向凭据复用。