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题的解题步骤和原理

相关推荐
菱玖1 小时前
等保2.0及其测评
网络·安全·web安全
xlq223221 小时前
53.tcp socket
linux·服务器·开发语言·网络·网络协议·tcp/ip
数字护盾(和中)1 小时前
终端安全破局:银狐木马防御的 EDR 核心能力详解
网络·人工智能·安全
wanhengidc1 小时前
云手机的兼容性与稳定性
大数据·运维·服务器·网络·人工智能·智能手机
Shingmc31 小时前
【Linux】传输层协议UDP
linux·网络·udp
团象科技2 小时前
合规收紧,出海云账号如何稳、准、安全落地?
安全
Web极客码2 小时前
2026年自建网站实战指南:从服务器到上线的完整方案
运维·服务器·php
ytdbc2 小时前
MGRE实验
网络
caijing3652 小时前
全方位解析建筑设备系统解决方案:提升建筑效率与安全的关键
大数据·人工智能·安全