Upload-labs:部署靶场及Pass-01实战解析

本文包含如何配置upload-labs以及Pass-01的解题步骤与详细原理,建议收藏观看!

后续将会更新剩下2-21题的解题步骤和原理

安装配置upload-labs

upload-labs 是一个基于 PHP 的文件上传漏洞演练靶场,已下载文件后需将其部署到 PHP 服务环境中才能访问 。核心步骤是:将文件放入 PHP 环境的网站根目录 → 启动服务 → 通过浏览器访问 http://localhost/upload-labs/。以下是具体操作指南:


一、环境部署-- 选择并配置环境

(1)推荐使用 PHPStudy(Windows 用户最简单)

  • 下载安装 PHPStudy
    从官网(https://www.xp.cn/)下载最新版,安装时路径避免中文或空格 (如 D:\phpstudy_pro)。
  • 启动服务
    打开 PHPStudy,点击 ApacheMySQL 的"启动"按钮(状态灯变绿即成功)。

环境配置问题:

集成开发环境phpStudy安装与配置指南(包含DVWA)_小皮面板安装dvwa修改配置-CSDN博客

(2)将文件放入网站根目录

  • 找到 PHPStudy 的网站根目录(默认路径:D:\phpstudy_pro\WWW)。
  • 将下载的 upload-labs 文件夹整体复制到该目录下无需解压到子目录,直接保留原文件夹名)。
  • 手动创建 upload 目录 (关键步骤):
    upload-labs 文件夹内新建一个名为 upload 的空文件夹(用于存储上传的文件)。

(3)访问靶场

  • 浏览器输入 http://localhost/upload-labs/ (若修改过端口需补充端口号,如 :8080)。
  • 我是bp用的8080,dvwa用的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 快速启动(需已安装 Docker)

复制代码
docker 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())。

漏洞分析

  1. 代码逻辑
    • 代码定义了一个允许上传的扩展名列表:var allow_ext = ".jpg|.png|.gif";
    • 当点击上传时,JS 会获取文件名的后缀。
    • 如果后缀不在允许列表中(例如 .php),JS 就会弹窗报错 alert 并阻止提交(return false)。
  2. 核心弱点
    • 验证只发生在浏览器端(前端)。服务器端并没有进行严格的检查(或者这一关故意没写服务端验证)。
    • 只要我们能绕过浏览器的这个 JS 检查,把数据包发送出去,服务器就会接收。

推荐使用 Burp Suite 抓包修改法 ,因为这更符合真实渗透场景。先上传一个 1.jpg 的 Webshell,利用 Burp 拦截数据包,将文件名改回 1.php 后放行,即可绕过前端检查并成功写入 PHP 文件。

通关步骤(三种方法)

你可以任选一种方法,推荐方法一最简单。

方法一:修改文件扩展名(最简单)

既然 JS 只检查后缀名是不是 jpg/png/gif,那我们就先骗过它。

  1. 准备 Webshell
    • 新建一个文本文件,写入 PHP 代码:

      复制代码
      <?php @eval($_POST['cmd']);?>

      原本记事本写的,改了后缀:

    • 将其保存为 shell.php

  2. 欺骗前端
    • shell.php 重命名为 shell.jpg(或者是 png、gif 都可以)。
  3. 上传文件
    • 点击"浏览",选择修改后的 shell.jpg
    • 点击"上传"。
    • 结果:如果没有js检查的话,此时会通过,文件上传成功,页面会提示"文件上传成功,保存路径为:...",
    • 但有js检查的,需要禁用js或者抓包改数据才行
  4. 截断/修改后缀(关键)
    • 此时文件在服务器上确实是 .jpg 结尾的,无法作为 PHP 执行。
    • 注意 :第一关其实有一个隐藏的技巧,或者你需要结合"方法二"来抓包修改。但在第一关的默认配置下,通常只需要禁用JS 或者抓包修改才能真正拿到 shell。
    • 修正 :仅仅改成jpg上传是不够的,因为服务器虽然接收了jpg,但它不会解析jpg为php。所以方法一必须配合方法二或者方法三才能完成"上传"的任务。

之后的方法一(配合禁用JS):

方法二:禁用 JavaScript(最直观)

既然验证是靠 JS 完成的,那我们不让 JS 运行就行了。

  1. 浏览器设置
    • 如果你用的是 Chrome,可以安装一个插件叫 "Quick JavaScript Switcher",点击图标选择 "Disable"。
    • 或者在浏览器设置里直接禁止当前网站运行 JavaScript。
  2. 上传文件
    • 刷新页面(此时 JS 已失效)。
    • 直接选择你的 shell.php 文件。
    • 点击"上传"。
  3. 结果
    • 因为没有 JS 阻拦,浏览器直接把 .php 文件发给了服务器。
    • 页面提示上传成功,并给出路径。
    • 访问该路径,即可连接 Webshell。
方法三:Burp Suite 抓包修改(最专业,推荐掌握)

这是渗透测试中最常用的手法,不需要关闭浏览器功能。

  1. 准备工作
    • 打开 Burp Suite,确保 Proxy -> Intercept 是开启状态(Intercept is on)。
    • 浏览器代理设置好(如果之前搭环境配过就不用动了)。
  2. 构造请求
    • shell.php 重命名为 shell.jpg(为了骗过前端JS)。
    • 在页面选择 shell.jpg,点击"上传"。
  3. 拦截与修改
    • 此时 Burp Suite 会拦截到数据包。
    • 在 Burp 中,你会看到类似 filename="shell.jpg" 的字段。
    • 将其修改回 filename="shell.php"
  4. 放行
    • 点击 "Forward" 发送数据包。
  5. 结果
    • 浏览器收到响应,提示上传成功。
    • 虽然你本地选的是 jpg,但服务器收到并保存的是 php。

总结

第一关的核心知识点:

  • 前端验证(JavaScript)是非常脆弱的,可以被轻易绕过。
  • 防御建议 :永远不要只依赖前端验证,必须在服务器端对文件类型、后缀、内容进行全面检查。

可能会出现的问题

问题1:bp还没抓到包呢,就无法上传了

这个弹窗是Windows 系统自带的"Microsoft Defender 智能筛选" 拦截了你创建或选择这个文件,它认为你的 whell.jpg(里面其实写的是PHP代码)是个病毒。

这导致你在本地根本无法正常选中这个文件,或者文件刚建好就被删除/隔离了。

解决方法(三选一)
方法 A:添加排除项(推荐,最稳妥)

你需要告诉 Windows 的杀毒软件:"在这个文件夹里别乱动我的文件"。

  1. 打开 Windows 安全中心(通常在右下角盾牌图标,或者开始菜单搜"病毒和威胁防护")。
  2. 点击 "管理设置"
  3. 向下拉,找到 "排除项" -> "添加或删除排除项"
  4. 点击 "添加排除项" -> 选择 "文件夹"
  5. 把你存放 whell.jpg 的那个文件夹选进去。
  6. 重新创建 你的 whell.jpg 文件,这次就不会报错了。
方法 B:先写无害内容,上传时再改
  1. 先写一个普通的文本文件,里面写 "hello",保存为 test.jpg。这时候杀毒软件不会报警。
  2. upload-labs 页面点击上传,选中这个正常的 test.jpg
  3. 但在点击"上传"按钮之前 ,迅速用记事本打开 test.jpg,把内容改成 <?php phpinfo(); ?> 并保存。
  4. 立刻点击网页上的"上传"。
  • 原理:利用时间差,让杀毒软件来不及反应。
方法 C:直接禁用 Defender(不推荐,除非你很有把握)

直接在安全中心把"实时保护"的开关关掉。做完实验记得开回来。

搞定这个报错后,你会发现即使上传成功,还是会被网页弹窗拦截(因为第一关是JS验证)。那时候我们再用抓包工具(Burp Suite)或者禁用浏览器JS的方法来搞定它。


问题2:火狐渗透版怎么禁用js

方法一:使用开发者工具(最快,无需插件)

这是最推荐的方法,适合临时禁用。

  1. 按下 F12 打开 开发者工具
  2. 点击右上角的 齿轮图标(设置)。
  3. 在"高级设置"或"调试器"栏目下,勾选 "禁用 JavaScript"
  4. 保持开发者工具开启,此时刷新页面,JS 即失效,你可以直接上传 whell.jpg(内容为 PHP 代码)了。
方法二:使用 NoScript 插件(专业渗透推荐)

火狐渗透版通常预装了 NoScript 插件,这是安全研究人员的神器。

  1. 查看浏览器右上角工具栏,找到一个 "S" 形状的图标。
  2. 点击它,选择 "禁止所有页面" 或直接点击 "临时允许" 切换状态。
  3. 这能彻底切断脚本运行,比修改配置更灵活。
方法三:修改 about:config(全局永久禁用)

如果你想彻底关闭,可以修改底层配置:

  1. 在地址栏输入 about:config 并回车,接受风险提示。
  2. 在搜索栏输入 javascript.enabled
  3. 双击该选项,将其值从 true 改为 false
  4. 重启浏览器生效。
针对 Pass-01 的替代方案(无需禁用 JS)

其实你不需要禁用 JS 也能过这一关。Pass-01 只是前端检查,你可以:

  1. 选中文件后,不要点上传
  2. 打开 Burp Suite 开启抓包。
  3. 点击上传,Burp 会截获数据包。
  4. 在 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题的解题步骤和原理

相关推荐
Amir_zy8 分钟前
AI 测试实战:从功能到安全,三层质量验证体系详解
人工智能·安全
凤山老林21 分钟前
高可靠 API 网关架构:Spring Cloud Gateway 集成 Sentinel 实现智能限流、动态路由与安全管控
安全·spring cloud·架构·sentinel
FII工业富联科技服务22 分钟前
GW级AI数据中心怎么建?Omniverse、CFD、液冷与BMS技术路径拆解
服务器·人工智能·算法·能源·制造
李少兄30 分钟前
Linux 服务器从零部署 kkFileView 完全指南(Docker 方案)
linux·服务器·docker
小张同学a.31 分钟前
OpenStack 私有云实战 3—— Neutron 网络服务与 Dashboard 控制台部署
linux·运维·服务器·openstack
云飞云共享云桌面1 小时前
机械设计研发成本优化:怎样用一台高性能服务器替代 10 台 SolidWorks 工作站?
大数据·运维·服务器·汽车·制造
星云API技术支持1 小时前
企业微信二次开发:控制台回调预览与服务器Webhook如何配合
服务器·github·企业微信
吠品1 小时前
TortoiseSVN 状态图标不显示的排查与解决办法
java·服务器·数据库
Horn Still Sounds1 小时前
Linux系统编程进阶:进程回收、程序替换与多线程并发模型
linux·运维·服务器·c语言
CS_Zero1 小时前
无人机避障安全走廊与备份轨迹
安全·无人机·避障