靶机链接: https://app.hackthebox.com/machines/Dog
靶机 IP: 10.10.11.58
本次渗透测试的目标是获取 Hack The Box 上的 “Dog” 靶机的 user 和 root 权限。我们将从信息收集开始,逐步深入,最终获得最高权限。
一、信息收集
1. Nmap 端口扫描
先通过 PING 连接性测试之后,首先,照旧 Nmap 对目标 IP 10.10.11.58 进行端口扫描,以了解开放的服务。

图 1: Nmap 扫描显示开放了 22 (SSH - OpenSSH 8.2p1) 和 80 (HTTP - Apache 2.4.41) 端口,Web 服务器运行着 Backdrop CMS 1.x。
分析:
- 目标 IP:
10.10.11.58 - 操作系统: Ubuntu Linux
- 开放端口: 22 (SSH), 80 (HTTP)
- Web 应用: Backdrop CMS 1.x
关键信息点:
- Web 服务 (端口 80) 是主要入口。
- Backdrop CMS 1.x 可能存在已知漏洞。
- Nmap 脚本扫描还提示了
/.git/目录的存在,这是一个重要的潜在信息泄露点。
2. Web 服务
访问 http://10.10.11.58/,可以看到一个关于狗狗护理和健康的网站。

图 2: Dog 靶机 Web 服务首页。
查看 robots.txt 文件 (http://10.10.11.58/robots.txt),发现其中列出了许多不允许爬虫访问的路径,这有助于我们了解网站结构。

图 3: Nmap 探测到的 robots.txt 路径。

图 4: robots.txt 文件内容,包含 /core, /admin, /modules 等路径。
3. 目录扫描与 .git 发现
使用 dirsearch 等工具进行目录扫描,确认了 .git 目录的存在。
1 | dirsearch -u http://10.10.11.58 |

图 5: Dirsearch 确认了 http://10.10.11.58/.git/ 目录的存在。
公开的 .git 目录意味着网站的源代码和版本历史可能被泄露,这是获取敏感信息(如配置文件、凭据)的关键突破口。
二、初步立足 (Initial Foothold)
1. 利用 .git 泄露获取源码
使用 git-dumper (或类似工具如 GitHack) 来下载 .git 仓库的内容。
1 | git-dumper.py http://10.10.11.58/.git/ .dog_repo |

图 6: 使用 git-dumper 下载 .git 仓库。

图 7: git-dumper 成功下载并提示检出文件。
2. 分析源码,发现凭据
在下载的源码中搜索敏感信息。settings.php 通常是 CMS 的核心配置文件。

图 8: 在下载的源码中发现 settings.php 文件。
查看 settings.php 内容:
1 | cat settings.php |

图 9: 在 settings.php 中找到 MySQL 数据库的密码 BackDropJ2024DS2024。
3. 登录 Backdrop CMS 后台
尝试使用找到的凭据 tiffany:BackDropJ2024DS2024 登录 Backdrop CMS 的后台

图 10: 确认用户名 tiffany。

图 11: 使用凭据成功登录 Backdrop CMS 后台。
4. 确定 CMS 版本并寻找漏洞
在下载的源码中搜索版本信息,确定 Backdrop CMS 的具体版本。
1 | grep -rin "version" . | grep "'1." |

图 12: 通过搜索源码中的 ‘version’ 关键字,确定版本为 1.27.1。
搜索 “Backdrop 1.27.1 exploit”,找到了 Exploit-DB 上的一个已认证远程命令执行 (RCE) 漏洞:https://www.exploit-db.com/exploits/52021。
该漏洞利用管理员权限,通过上传包含恶意 PHP 代码的模块来实现 RCE。
5. 准备并上传恶意模块 (反弹 Shell)
- 生成基础模块结构: 运行 Exploit-DB 提供的 Python 脚本 (
52021.py) 来生成一个基础的模块压缩包和目录结构。

图 13: 生成 shell 目录和 shell.zip。 - 替换为反弹 Shell: 将
shell/shell.php的内容替换为 PHP 反弹 Shell 代码 (例如来自 pentestmonkey 的脚本,php-reverse-shell.php)。修改脚本中的$ip为你的攻击机 IP,$port为你打算监听的端口 (例如 1234)。 - 打包为
.tar.gz: 查看后台模块上传页面 (/?q=admin/installer/manual),发现它只接受.tar,.tgz,.gz,.bz2格式。因此,需要将修改后的shell目录打包成.tar.gz格式。


图 14: 手动安装模块的界面。

图 15: 上传界面提示支持的压缩格式。
1 | # 将修改好的 shell.php 放入 shell 目录 |

图 16: 使用 tar 命令创建 shell.tar.gz。
-
设置监听: 在攻击机上使用
nc监听指定端口。1
nc -nlvp 1234
(注意:确保你的防火墙允许该端口的入站连接。)
-
上传并触发: 在 Backdrop CMS 后台上传
shell.tar.gz文件。

图 17: 在后台上传准备好的恶意模块压缩包。
上传成功后,访问模块中的 PHP 文件以触发反弹 Shell:1
curl http://10.10.11.58/modules/shell/shell.php
(如果直接访问无反应,可能是因为 PHP 脚本尝试后台运行,或者防火墙阻止了出站连接。使用 curl 或浏览器访问通常能成功触发。)
6. 获取反弹 Shell
成功触发后,nc 监听器应收到来自目标服务器的连接,获得一个 www-data 用户的 Shell。

图 18: nc 监听器成功接收到来自靶机的反弹 Shell,用户为 www-data。
为了更好的交互体验,可以使用 Python 升级 Shell:
1 | which python3 |
三、用户权限提升 (User Privilege Escalation)
在 www-data Shell 中,查看 /home 目录,发现存在用户 johncusack。
尝试读取 /home/johncusack/user.txt,发现权限不足。
回忆之前在 settings.php 中找到的数据库密码 BackDropJ2024DS2024,尝试用它切换到 johncusack 用户。
1 | su johncusack |

图 19: 成功使用之前找到的密码切换到 johncusack 用户。
切换成功后,即可读取 user.txt 文件。
1 | cat /home/johncusack/user.txt |
四、Root 权限提升 (Root Privilege Escalation)
1. Sudo 权限检查
在 johncusack 用户下,检查其 sudo 权限。
1 | sudo -l |

图 20: sudo -l 显示 johncusack 可以以任意用户 (ALL:ALL) 身份,无需密码执行 /usr/local/bin/bee 命令。
结果显示 johncusack 用户可以无需密码以 root 权限执行 /usr/local/bin/bee 命令。
2. 分析 bee 命令
bee 是 Backdrop CMS 的命令行工具。查看其帮助信息或相关文档,寻找可利用的功能。
1 | /usr/local/bin/bee --help |

图 21: bee 命令帮助信息显示存在 eval (ev) 子命令,可以执行任意 PHP 代码。
关键在于 eval (或 ev) 子命令,它允许执行任意 PHP 代码。
3. 利用 bee eval 获取 Root Shell
由于我们可以通过 sudo 以 root 权限运行 bee,并且 bee 可以执行 PHP 代码,我们可以结合这两点来获取 root Shell。
首先,bee 命令通常需要在 Backdrop CMS 的网站根目录下执行才能正常工作。
1 | cd /var/www/html |
这个命令做了以下事情:
sudo /usr/local/bin/bee: 以 root 权限启动bee工具。ev: 使用bee的eval功能。'system("/bin/bash");': 要执行的 PHP 代码。system()函数用于执行系统命令,这里我们让它启动一个 Bash Shell。

图 22: 执行 sudo bee ev ‘system(“/bin/bash”);’ 后,成功获得 root 权限的 Shell。
4. 读取 Root Flag
现在可以读取位于 /root 目录下的 root.txt 文件。
五、总结
本次 Dog 靶机的渗透测试过程关键点如下:
- 信息收集: 通过 Nmap 扫描发现 Web 服务 (Backdrop CMS) 和
.git目录暴露。 - 初步立足: 利用
git-dumper下载.git仓库源码,在settings.php中找到数据库凭据 (tiffany:BackDropJ2024DS2024)。使用该凭据登录 Backdrop CMS 后台。 - 漏洞利用: 确定 CMS 版本为 1.27.1,找到对应的已认证 RCE 漏洞 (Exploit-DB 52021)。制作包含反弹 Shell 的恶意模块 (
.tar.gz格式),通过后台上传并触发,获得www-dataShell。 - 用户提权: 使用之前获取的密码
BackDropJ2024DS2024通过su命令切换到johncusack用户,获得 user flag。 - Root 提权: 检查
sudo -l发现johncusack可以免密以 root 权限运行bee命令。利用bee的eval功能执行 PHPsystem('/bin/bash'),最终获得 root Shell 并读取 root flag。
六、防御
- 定期审计与加固:
- 必须定期审计 Web 服务器配置,确保禁止目录列表,并严格限制对敏感目录(如
.git,.svn等版本控制目录,以及配置文件目录)的访问。 - 严格审查
sudoers配置,遵循最小权限原则,避免使用ALL和NOPASSWD,精确授权必要的命令。
- 必须定期审计 Web 服务器配置,确保禁止目录列表,并严格限制对敏感目录(如
- 补丁与更新管理:
- 及时更新 CMS 核心、主题和插件至最新安全版本,是防御已知漏洞利用的基础。订阅相关的安全公告。
- Secrets Management:
- 绝不将密码、API 密钥等敏感信息硬编码在代码或配置文件中,并提交到版本控制系统。应使用环境变量、安全的 Secrets Management 工具或安全的配置文件注入方式。
- 强制安全策略:
- 实施强密码策略,并禁止密码重用。考虑为关键系统(如 SSH、管理后台)启用多因素认证 (MFA)。


