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

菜鸟必看:2026年最新Upload-labs(1-21)通关手册 + 解题思路

实验目的

  • 漏洞探测:识别目标系统中存在的安全漏洞
  • 漏洞利用:针对已发现的漏洞进行有效利用
  • 权限获取与维持:获取系统访问权限并保持持久控制

实验环境

攻击机: Windows 10 虚拟机
浏览器: firefox火狐
代理工具: BurpSuite,蚁剑,010 editor
目标靶场: upload-labs-master

本机搭建环境

PHPStudy2018下载地址:https://old.xp.cn/download.html
版本状态:PHP5.2.17 + Apache

上传文件漏洞简述

程序员编写的文件上传功能校验机制不完善,服务器中间件配置不当,从而导致攻击者绕过限制,上传恶意脚本文件,被Web服务器解析并执行的高危漏洞。

渗透完整流程

第一关

探测漏洞

  1. 直接上传脚本文件(.php/.asp/.aspx/.jsp)

  1. 可见前端直接弹框报错,说明这是做了JS前端过滤

漏洞利用

  1. 一共有三种方法针对JS前端过滤:
    1)浏览器禁用JS
    2)更改后缀名
    3)查看源代码,直接删除JS过滤函数 这里是引用
  1. 浏览器F12开发者工具直接禁用

权限获取与维持

  1. 右键图片查看 → 复制URL → 连接蚁剑

第二关

探测漏洞

  1. 直接上传脚本文件(.php/.asp/.aspx/.jsp);

  1. 可见这里做了服务端过滤,说明需要进行BurpSuite抓包探测

漏洞利用

  1. 服务端过滤一般情况下用到的绕过方法:
  • MIME
  • 黑名单
    • 变异后缀名
  • 白名单
    • 后缀大小写
    • 后缀空格/%00截断
    • 解析漏洞 (Apache,IIS,Nginx)
  1. 修改Content-type的值:image/png

权限获取与维持

  1. 右键图片→ 新页面打开图片,复制图片URL,连接蚁剑

第三关

探测漏洞

  1. 直接上传脚本文件(.php/.asp/.aspx/.jsp)

  1. 这里是服务端黑名单过滤,BurpSuite抓包走起!

漏洞利用

  1. 服务端黑名单常用的绕过方法:
  • 黑名单
    • 变异后缀名(php5,php3,phtml…)
  1. 将文件修改为变异后缀名后,查看图片发现直接跳转下载

  1. 思路:
  • 说明该文件已经成功绕过黑名单过滤,但是php并没有对该文件解析执行。
  • 由此可推断出,Apache没有把该变异后缀文件当成php文件执行。
  • 因此,需要修改Apache的主配置文件httpd.conf(路径:\Apache\conf\httpd.conf)
  • 修改配置文件中的AddType aplication/x-httpd-php 模块,在后面添加需要php解析的后缀名php5,php3…

  1. 修改完配置文件后保存,并重启Apache
  2. 重新抓包修改后缀上传

权限获取与维持

  1. 查看图片 → 复制URL → 连接蚁剑

第四关

探测漏洞
1. 直接上传脚本文件(.php/.asp/.aspx/.jsp)
2. 上传.php文件,上传失败
3. 上传.jpg文件,上传成功



4. 很明显,这是服务端白名单过滤,进行BurpSuite抓包

漏洞利用

  1. 服务端白名单绕过的方法:
    - 后缀大小写
    - 后缀空格/%00截断
    - 解析漏洞(Apache,IIS,Nginx)
  1. 思路:
    既然它只允许图片后缀名,那我可以使用Apache解析漏洞,只要后缀名是图片后缀,并且Apache不认识就能绕过白名单过滤。

Apache解析漏洞:
Apache读取文件时会从后往前识别文件名,遇到不认识的后缀就跳过,遇到认识的就直接按照认识的后缀名解析文件,如果整个文件名识别完都不认识,那就直接输出源代码

权限获取与维持

  1. 查看原图 → 复制URL → 连接蚁剑

第五关

探测漏洞

  1. 直接上传脚本文件(.php/.asp/.aspx/.jsp)
  2. 上传.php文件,上传失败
  3. 上传.jpg文件,上传成功



4. 这里依旧是服务端白名单过滤,BurpSuite抓包修改

漏洞利用

  1. 服务端白名单绕过的方法:
    - 后缀大小写
    - 后缀空格/%00截断
    - 解析漏洞(Apache,IIS,Nginx)
  1. 通过尝试,这一关依旧可以使用 “解析漏洞” 进行绕过!

  1. 这里除了解析漏洞,还可以使用 “后缀空格” 进行绕过

**补充:这里为什么可以用shell.php. .?
答:通过源代码审计(下图)了解到,服务端对上传的文件名进行了:
【后端清洗逻辑 + 后缀提取规则 + Windows文件名裁剪】

  • 后端清洗逻辑:
    从右向左,trim()清除前后的空格deldot()删除末尾的点=> shell.php.空格
  • 后缀提取规则:
    后缀提取发现是:空格 => 不在白名单拦截范围中,放行
  • Windows文件名裁剪:
    删除后面的空格 => shell.php.

权限获取与维持

  1. 查看图片 → 复制URL → 连接蚁剑

第六关

探测漏洞

  1. 直接上传脚本文件(.php/.asp/.aspx/.jsp)
  2. 上传.php文件,上传失败
  3. 上传.png文件,上传成功



4. 此处依旧是服务端白名单过滤,BurpSuite抓包

漏洞利用

  1. 服务端白名单绕过的方法:
    - 后缀大小写
    - 后缀空格/%00截断
    - 解析漏洞(Apache,IIS,Nginx)
  1. 重新使用前两个的方法,发现都不能用了,只读取不解析
    1)Apache解析漏洞
    2)后缀空格



7. 这次使用 “后缀大小写” 方法,绕过白名单

权限获取与维持

  1. 查看图片 → 复制URL → 连接蚁剑

第七关

探测漏洞

  1. 直接上传脚本文件(.php/.asp/.aspx/.jsp)
  2. 上传.php文件,上传失败
  3. 上传.png文件,上传成功



4.服务端白名单过滤,BurpSuite抓包

漏洞利用

  1. 服务端白名单绕过的方法:
    - 后缀大小写
    - 后缀空格/%00截断
    - 解析漏洞(Apache,IIS,Nginx)
  1. 尝试了之前的方法,发现都不能用,查看源代码发现,可以使用 “后缀空格的变体”

**补充:为什么这里可以使用shell.php .?
答:通过源代码审计(下图)可知,服务端对上传的文件进行了:
【后端清洗逻辑 + 后缀提取规则 + Windows文件名裁剪】

  • 后端清洗逻辑:
    从右向左,deldot()删除末尾的点=> shell.php空格
  • 后缀提取规则:
    后缀提取发现是:空格 => 不在白名单拦截范围中,放行
  • Windows文件名裁剪:
    删除后面的空格 => shell.php

权限获取与维持

  1. 查看图片 → 复制URL → 连接蚁剑

第八关

探测漏洞

  1. 直接上传脚本文件(.php/.asp/.aspx/.jsp)
  2. 上传.php文件,上传失败
  3. 上传.jpg文件,上传成功



4. 依旧是服务端白名单过滤,使用BurpSuite抓包

漏洞利用

  1. 服务端白名单绕过的方法:
    - 后缀大小写
    - 后缀空格/%00截断
    - 解析漏洞(Apache,IIS,Nginx)
  1. 使用前几个方法进行绕过
    1)后缀空格
    2)后缀空格变体
    3)Apache解析漏洞

权限获取与维持

shell.php .

shell.php. .

shell.php. . . . . . . . . . . . . .


Apache解析漏洞

第九关(::$DATA文件流)

探测漏洞

  1. 直接上传脚本文件(.php/.asp/.aspx/.jsp)
  2. 上传.php文件,上传失败
  3. 上传.jpg文件,上传成功



4.服务端白名单过滤,BurpSuite抓包

漏洞利用

  1. 服务端白名单绕过的方法:
    - 后缀大小写
    - 后缀空格/%00截断
    - 解析漏洞(Apache,IIS,Nginx)
  1. 白名单绕过方法全都试了一遍,都没有效果,那就需要另辟蹊径
  2. 使用特殊字符 “::$DATA文件流” 绕过

::DATA=>会把::DATA => 会把::DATA=>会把::DATA之后的所有数据当做文件流处理,不会检测后缀名

权限获取与维持

  1. 查看图片 → 复制URL → 连接蚁剑

第十关

探测漏洞

  1. 直接上传脚本文件(.php/.asp/.aspx/.jsp)
  2. 上传.php文件,上传失败
  3. 上传.jpg文件,上传成功



4.服务端白名单过滤,抓包

漏洞利用

  1. 服务端白名单绕过的方法:
    - 后缀大小写
    - 后缀空格/%00截断
    - 解析漏洞(Apache,IIS,Nginx)
  1. 使用前几个方法进行绕过
    1)Apache解析漏洞
    2)多后缀空格

权限获取与维持

Apache解析漏洞

shell.php. .

shell.php. . . . . . . . . . . . .

第十一关

探测漏洞

  1. 直接上传脚本文件(.php/.asp/.aspx/.jsp),并查看图片
  2. 发现图片URL地址把后缀名给吃了

  1. 改成shell.asp.jpg,发现它把asp给吃了


4. 可见上传的文件都可以变成图片访问,说明服务端把asp、php,asa直接给过滤掉

漏洞利用

  1. 思路:
    既然它可以把asp,php,asa后缀名整个吃掉,那如果在php中穿插php,等服务器把php整个吃掉以后,最后就只剩完整的p h p,浏览器会自动清除空格,这就直接绕过服务器过滤

权限获取与维持

  1. 查看图片 → 复制URL → 连接蚁剑

第十二关

注意:如果要按照我的通关,记得别清空上传文件。

  • 这一关看别的帖子都用%00截断进行过关,我由于浏览器版本问题导致%00直接编码转义,无法实现效果。
  • 现在的浏览器以及php随着版本升级,都已经修补了%00截断漏洞,在工作中,一般不会再出现这个漏洞,除非你用的是老版本的php( < 5.3.29)和浏览器(firefox <= 2.0.0.5),如果要复现,记得magic_quotes_gpc = Off。
  • 虽然不会再出现但是还是得说一下它的原理:

%00:是字符串中的【结束标识符】,一般在末尾加上%00,那么后面的内容直接就是废弃,不用去看它了

  • 如果用%00解题,大概的流程:
    1) 提交上传的依旧是xxx.jpg文件,然后BP抓包进行修改
    2) 新页面查看图片,这时候URL就变成了这样:(后面的图片直接废弃掉,直接执行shell.php)



探测漏洞

  1. 直接上传脚本文件(.php/.asp/.aspx/.jsp)


2. 很明显,服务端白名单过滤,指定了上传后缀名

漏洞利用

  1. 通过上传.jpg文件,发现该页面中存在 “文件包含漏洞”

  1. 直接查看图片URL地址,并进行修改成下图:

权限获取与维持

  1. 修改完成后回车 → 直接复制URL → 连接蚁剑

第十三关

  • 这一关和上一关差不多,但是这里把文件包含入口放到了服务器端,需要抓包。
  • 依旧是浏览器版本问题无法正常getshell,这边也是讲一下思路:
    1) 依旧上传的是.jpg的文件,然后抓包
    2) 直接在后面写上%00,会提示上传失败


3)这时候就只能在Hex中修改,记得在shell.php后面留一个空格,方便将20改为00

此处改为00是因为在16进制数中的%00截断的表示法是:0x00

  1. 然后查看图片,复制URL,蚁剑getshell

第十四关

制作图片马

1) 创建一个一句话木马文件,后缀改为.jpg/.png/.gif均可,记得前面留两个空格
2) 打开 010 Editor 软件中的Hex选项,修改该文件的文件头
3) 保存


探测漏洞

  1. 任务显示,直接上传图片马,并右键查看图片

漏洞利用

  1. 复制URL中的图片路径

  1. 点击靶场页面的“文件包含漏洞”,来到文件包含页面

  1. 构造文件包含利用语句

权限获取与维持

  1. 复制URL路径 → 连接蚁剑

第十五关(getimagesize绕过)

制作图片马
1) 下载一张真实图片 1.gif
2) 新建一个一句话木马文件 shell.php
3) win+R 快捷键 → cmd进入终端 → 到文件所在目录下 → 输入以下命令:

copy 1.gif /b + shell.php /a test.gif
/a :ASCII文件
/b :表示二进制文件
+ :多文件合成

4)合成图片马test.gif成功

  • 注意:如果出现以下错误提示,那就要切换PHP版本:php5.4/5.5/5.6(不是-nts版本)

探测漏洞

  1. 上传图片马,显示上传失败

  1. 服务端过滤使用了getimagesize()函数

getimagesize()函数:用来获取图像的大小以及相关信息的函数

  1. 所以本关卡服务端需要获取真实图片的大小以及信息,要上传一张真实的图片。

漏洞利用

  1. 上传图片马

  1. 查看图片,复制图片URL

  1. 打开文件包含页面,构造文件包含语句

权限获取与维持

  1. 复制URL → 连接蚁剑

第十六关(exif_imagetype绕过)

探测漏洞

  1. 上传图片马,页面显示为空页面


2. 查看源码,得知需要开启php_exif模块

exif_imagetype()函数:是PHP中的一个内置函数,用于判断图像的真实类型。通过读取文件开头的几个字节(文件头签名)来识别格式类型,而不是依赖扩展名。

漏洞利用

  1. 开启php_exif模块

  1. 上传图片马

  1. 复制图片马URL,进文件包含界面构造URL路径


权限获取与维持

  1. 连接蚁剑

第十七关(二次渲染)

探测漏洞

  1. 上传图片马,发现gif图没有动
  2. 依旧右键查看图片,进入文件包含页面
  3. 连接蚁剑发现显示数据为空,说明php没有解析或者说图片马没用了。

  1. 查看源代码

  1. 代码分析
    代码显示,服务器将上传的图片保存到目标目录下时,对该图片进行了二次渲染,将图片重新生成了新图片并取了新文件名,把这个新生成的图片保存到了目标目录下,导致于上传的图片马直接失效。
  1. 思路:
  • 将图片马和新生成的图片进行Hex内容对比查看,看看能否在图片中插入一句话木马
  • 使上传的图片不管如何渲染,都无法渲染到插入一句话木马的区域,从而上传图片马使服务器生成新的图片马,进行实验绕过。

漏洞利用

  1. 上传原先的图片马test.gif,将服务器修改过后的新图片10743.gif 进行保存。

图片马:test.gif
生成的新图片:10743.gif

  1. 右键图片,打开010 Editor软件进行设置,让两张图进行上下对比查看
    (Tools→compare files)

  1. 通过Match过滤,找到重合度高的地方

  1. 在test.gif中添加一句话木马(建议:复制粘贴),保存

11.将修改过的test.gif上传

  1. 通过文件包含界面,进行构造URL

权限获取与维持

13.连接蚁剑

第十八关

探测漏洞

  1. 上传一个.php脚本文件,指定显示后缀名格式,服务端白名单过滤,抓包

  1. 抓包后进行基础绕过修改,发现都不行,查看源码。

  1. 代码分析
    从代码中可知,它需要先将临时文件移动到目标目录中,才能判断后缀名的合法性,这中间有时间差,可以通过这个时间差进行绕过。
  1. 思路:
  • 创建一个.php脚本,该脚本的目的:生成一个脚本,并将一句话木马写入该脚本中;但凡上传的脚本文件被白名单视为不合法文件删除之前,可以绕过白名单并生成脚本文件执行。
  • 由于一个一个的上传该脚本文件,很难在规定的时间差中完成任务,这时候就可以使用BurpSuite软件的爆破功能。
  • 再编写一个python脚本,可以实时监控爆破进程,好让我们知道生成的脚本文件什么时候能成功绕过白名单。
  • 所以需要准备三样东西:
    1. 可以生成脚本的脚本文件.php
    2. BurpSuite
    3. python文件

漏洞利用

  1. 创建一个mshell.php脚本,脚本内容:

  1. 创建python文件cmd.py,内容如下:

构造python代码的主要功能:不断地并发访问mshell.php文件,要在判断mshell.php文件不在白名单中而被删除之前,成功创建shell.php脚本,并返回提示信息。

  1. 上传mshell.php文件,进行BP抓包。
    1)进入Intruder模块
    2)清空负载
    3)切换为sniper模式

  1. payloads模块设置
    1)选择空负载
    2)continue indefinitely 无限访问

  1. 开始攻击

  1. 同时,打开cmd运行python文件,当终端显示OK的时候,说明已经成功生成了shell.php,文件已存放入了upload文件夹下。
    【注意:运行时,可能会有弹窗显示危险文件,不要理会就行】

权限获取与维持

  1. 连接蚁剑

第十九关

【本关代码有个BUG需要先修复myupload.php文件】

【按照下图修改后,上传的文件都会保存到upload文件夹中】

探测漏洞

  1. 上传一个脚本文件
  2. .php文件,上传失败
  3. .gif文件,上传成功
  4. 这是服务器白名单过滤


  1. 查看源代码



  1. 代码分析
  • 从代码可看出,它是先进行存储到目标文件,后进行白名单校验。
  • 文件校验的操作分的太细致,都是独立操作,没有整体性,在这种情况下如果并发文件上传,可能会出现以下情况:
    • 文件移入(move)到服务器目标目录下,再对该文件进行重命名(renameFile),按照以上代码逻辑,需要分为两步走,在上一步完成,过渡到下一步的这中间就存在时间差。
  • 如果在该时间差中对文件进行文件包含,对上传成功的图片马执行脚本,存入目标目录中再利用,就破坏了文件上传的正常逻辑。
  • 攻击者同样也可以利用这个时间差,实现恶意文件上传或其他恶意的目的。
  1. 思路:
  • 由于文件上传是先将原文件存储在目标目录中,后再对该文件进行重命名,那我们可以利用原文件存储到目标目录中还没有被重命名的时候,利用这中间的时间差进行渗透。
    • 创建一个可以通过文件包含生成脚本文件的图片马进行上传
    • 在该图片马还没有被重命名之前生成脚本文件
    • 即使后面图片马重命名了,但是其生成的脚本依旧可以被利用,成功绕过了安全监测

漏洞利用

8.创建一句话木马文件,内容如下:

  1. 制作图片马(win+R → cmd进入终端 → 文件目录下 → 输入文件合成代码)

  1. 构造python代码,代码如下:
    【注意:此处地址应该换成 “文件包含构造的URL” ,这样才能执行图片马】

  1. 上传图片马mxshell.gif,并打开BP进行抓包,进入intruder模块设置

  1. Payloads模块设置

  1. Resource pool 模块设置(多线程数)

  1. 进行攻击!

  1. 同时终端启用python脚本,显示OK,表示已经将生成的脚本存入upload文件夹下

权限获取与维持

  1. 连接蚁剑

第二十关

探测漏洞

  1. 上传脚本文件,发现不管上传什么文件都可以,而且还指定了文件命名!

  1. 那就抓包进行查看,发现有两个文件名,不管改多少次,上传文件原名都会变成upload-19.jpg。
    猜测:如果要应用shell.php文件,那就两个文件名都要进行修改。

  1. 修改完上传后,发现服务端只对第二个文件名进行过滤,说明这里是服务端黑名单过滤,只要修改第二个文件名即可。

漏洞利用+权限获取与维持

  1. 可以尝试用之前绕过黑名单的方法进行绕过

1)后缀大小写

  • shell.phP

2 ) 后缀空格

  • shell.php. .

3 ) 后缀空格变体

  • shell.php .
  • shell.php. . . . . . . . . . . . . .
  • shell.php/.



第二十一关

探测漏洞

  1. 上传一个脚本文件,显示这里用到了服务器黑名单过滤,依旧是指定了文件名

  1. 修改文件后缀.jpg,表示上传成功

  1. 把下列的名称也修改为.php文件上传,显示禁止上传。说明两个文件名都进行了过滤

  1. 抓包,既然两个文件都要是.jpg后缀名才可以上传成功,那就进行修改

  1. 查看图片URL时发现,它把php删除后只剩.jpg文件后缀。说明会删除禁止的后缀。

  1. 查看源码

  1. 代码分析
    从代码可看出,文件名和后缀名都进行了过滤,最后拼接成了完整的文件名,也就是为什么shell.php.jpg上传后变成shell.jpg的原因。
  1. 思路:
  • 如果要绕过白名单,那就要遵循它的规则。
  • 白名单认可的文件名:$file数组的第一个元素 + . + 最后一个元素
    (举例:shell.php → shell + . + php)
  • 可以上传成功的要求:
    • 第一个元素 : 文件名字 【满足条件:MIME类型】
    • 最后一个元素 :文件后缀名 【满足条件:白名单过滤:jpg,png,gif】
  • 由于$file是数组,数组中的元素是save_name(指定文件名),如果要更改就必须按照数组更改的方式:
    • save_name[0]: shell.php
    • save_name[1]: .
    • save_name[2]: jpg
  • 最后形成的局势:shell.php.jpg

漏洞利用

  1. 按照思路,修改参数

权限获取与维持

  1. 连接蚁剑

修复建议

后缀名校验

  • 采用白名单(jpg,png,gif),禁用黑名单(php,asp.jsp)
  • 剔除多余点,空格,特殊截断符

校验文件真实内容(不只校验文件名,MIME)

  • 丢弃请求头content-type校验(可改)
  • 读取文件头部二进制,校验图片文件头,拦截图片马

上传文件统一重命名

  • 上传后的文件随机改名(时间戳+随机字符串)
  • 剥离源文件名后缀,杜绝畸形文件名绕过

服务器权限与目录加固

  • 上传目录取消脚本执行权限(nginx/Apache禁止解析php)
  • 上传目录和网站代码目录分离,不放在web可访问根目录中
  • 限制上传文件的大小,防止超大恶意文件上传

修复建议总结

白名单 + 文件内容校验+ 随机重命名 + 上传目录禁执行权限

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

相关文章:

  • 如何用网盘直链下载助手轻松获取高速下载链接
  • 不止是Kármán涡街:用COMSOL复现流体力学经典实验,深入理解非定常流动的本质
  • 抖音批量下载终极指南:5分钟学会无水印高效下载
  • RISC-V入门实战:手把手用蜂鸟E203理解RV32I指令如何执行
  • Mythos动态推理图谱与跨文档验证技术解析
  • 从MATLAB到Python:如何将你的机器人仿真项目无缝迁移到Robotics Toolbox?
  • 本地双击即放的H5烟花动画包:带音效、全屏切换和手机自适应
  • Lineage 3.80登录器V3增强包:带LinHelperZ配置、封包加解密工具与可换肤界面
  • Three.js行人过街碰撞检测演示:实时车辆避让反馈效果
  • 北京西城区黄金回收“一秤一火”全记录:当面烧金、当场结账 - 奢侈品回收测评
  • 用AI征服2048:每秒千万次计算的智能游戏助手
  • 抖音素材高效获取:douyin-downloader让内容创作更简单
  • 遗传算法工业落地:编码与算子的强耦合设计指南
  • AI拉呱-2026年06月09日AI技术洞察简报
  • AI办公革命:从工具使用者到意图架构师的职场跃迁
  • PuzzleSolver深度解析:CTF MISC全能工具的逆向分析技巧与实战应用
  • MetaERP设计理念、触发机制、延迟量级、异常处理、运维成本、OTC 场景实例六个方面
  • RTL8156BG-CG、2.5G 以太网芯片兼具低功耗与远程唤醒
  • 智慧树自动刷课插件完整指南:三步告别手动操作,5分钟开启高效学习
  • 告别NI-MAX!Qt Creator 6.5 + VISA库独立配置指南,5分钟搞定普源DM3068万用表通信
  • 异步电机矢量控制仿真跑通了,但波形不对?从SVPWM到PI调参的5个常见问题排查
  • 基于规则与轻量模型的自我发展阶测评工程化实践
  • AI拉呱-2026年06月07日AI技术洞察简报
  • 终极OBS-VST插件指南:3步让直播声音秒变专业品质
  • 3大场景痛点破解:如何用Video-subtitle-extractor实现10倍效率的字幕提取革命
  • AI动态简报之商业洞察篇(2026.06.09)
  • 濮阳广告设施维保
  • 跨架构知识迁移技术在推荐系统中的应用与优化
  • BabelDOC终极指南:如何实现PDF文档智能翻译与格式完美保留
  • 12个优质版权视频素材平台,从源头避免版权纠纷