利用文件读取加条件竞争Getshell
字数 1437 2025-08-10 23:41:50
利用文件读取加条件竞争实现Getshell技术分析
1. 漏洞背景与前提条件
本技术文档详细分析了一种结合文件读取漏洞与条件竞争实现Getshell的攻击方法。该攻击方法适用于以下场景:
- 目标系统存在任意文件读取漏洞
- 系统上传功能采用"本地暂存→上传OSS→删除本地"的处理流程
- 本地暂存文件位于web可访问目录
- 文件名可预测或非随机生成
2. 攻击流程详解
2.1 信息收集阶段
-
基础扫描:
- 使用nmap等工具扫描目标IP,识别开放端口和服务
- 重点关注SSH、HTTP/HTTPS等常见服务端口
-
Web应用探测:
- 识别所有可用域名和子域名
- 枚举后台管理系统和其他功能接口
2.2 认证绕过
-
登录接口分析:
- 识别使用手机号作为账号的登录系统
- 确认是否缺少验证码等防护机制
-
手机号收集:
- 通过公司官网、爱企查等公开渠道收集关联手机号
- 构建针对性手机号字典
-
密码爆破:
- 针对收集到的手机号进行弱密码尝试
- 使用常见弱密码组合(如123456、admin123等)
2.3 漏洞发现与利用
-
上传功能分析:
- 识别所有文件上传点
- 确认文件最终存储位置(本地或OSS)
- 分析上传处理逻辑
-
任意文件读取漏洞:
- 在下载功能处发现可读取任意文件的漏洞
- 利用该漏洞下载上传处理相关源代码
- 分析上传逻辑:
本地暂存→上传OSS→删除本地
-
条件竞争漏洞确认:
- 确认满足条件竞争三要素:
- 文件先保存在web可访问的本地目录
- 文件名可预测或非随机
- 有删除本地文件的操作
- 确认满足条件竞争三要素:
2.4 条件竞争攻击实施
-
恶意文件构造:
<?php fputs(fopen("shell.php", "w"), '<?php eval($_POST[cmd]); ?>'); ?> -
攻击脚本开发:
- 编写自动化脚本实现以下流程:
- 持续上传恶意文件
- 同时快速访问预测的文件路径
- 在文件被删除前触发恶意代码执行
- 编写自动化脚本实现以下流程:
-
攻击执行:
- 运行攻击脚本,观察返回结果
- 确认shell.php是否成功创建
2.5 后渗透阶段
-
Webshell验证:
- 访问生成的shell.php
- 使用POST传递命令执行验证
-
权限提升:
- 根据系统环境进行提权操作
- 收集系统信息,寻找提权路径
3. 技术要点解析
3.1 条件竞争三要素
-
临时文件存储:
- 文件必须先保存在web可访问目录
- 保存时间窗口足够进行利用
-
文件名可预测性:
- 文件名生成算法可预测
- 或使用固定命名规则
-
删除操作延迟:
- 从保存到删除存在时间差
- 网络延迟或处理耗时增加可利用窗口
3.2 攻击成功关键
-
时间窗口把握:
- 精确计算从上传到删除的时间差
- 优化脚本提高访问速度
-
路径预测准确性:
- 通过文件读取获取上传路径规则
- 确保访问的临时文件路径准确
-
请求并发量:
- 足够高的并发请求增加命中率
- 平衡性能与触发概率
4. 防御措施
4.1 针对任意文件读取
- 严格校验文件路径参数
- 实现白名单机制限制可访问目录
- 对下载功能进行权限控制
4.2 针对条件竞争
-
上传流程优化:
- 直接在内存处理文件不上传本地
- 如必须本地存储,使用非web目录
-
文件名安全:
- 使用强随机数生成文件名
- 避免可预测的命名规则
-
原子操作:
- 确保上传和删除操作的原子性
- 使用文件锁等机制防止竞争
-
监控与检测:
- 监控短时间内大量上传请求
- 检测异常文件访问模式
5. 总结
本技术文档详细分析了一种结合文件读取和条件竞争漏洞实现Getshell的攻击方法。攻击者通过信息收集、认证绕过、漏洞发现和条件竞争利用四个阶段,最终实现在目标系统上获取Webshell。防御方面需要从文件读取限制、上传流程优化和系统监控等多方面入手,才能有效防范此类攻击。