Upload-labs靶场通关

发布于:2025-04-05 ⋅ 阅读:(17) ⋅ 点赞:(0)

之前搭好了靶场,Upload-labs 靶场搭建 及一句话木马的原理与运用-CSDN博客

今天开始通关并写详细流程

Pass-1

来到靶场的第一关

先随便上传php 代码

点击上传

发现文件类型被限制了

方法1:

改文件后缀为合法文件(.jpg .png .gif),再抓包修改回php文件

例如我将它改为.jpg

改完后打开bp抓包,然后点击上传

抓到包后修改文件后缀 .jpg为.php

改为

 然后发送,回到上传页面,因为木马已经经过前端验证又改为php文件,所以木马被执行

右键上传成功的图片,新标签页打开

其实这里刚开始我上传的一句话木马是<?php @eval($_POST['a']);?>

但上传打开图片链接就出现服务器错误,无法显示上传的文件

这里说一下为什么要先改后缀再上传抓包改后缀

因为文件上传以后数据包是从客户端发往服务端,而bp抓包是相当于在服务端抓,js前端验证是在客户端进行的,这样一来因为这题是js前端验证,木马文件要先进行js前端验证才能进行抓包,而.php文件后缀是被js禁止上传的,也就是说该木马文件连第一步前端验证都没通过,抓包是抓不了的。(所以要先改为jpg后缀绕过js前端验证,再进行抓包改为php就能上传木马成功)

后来在别处得知运用到<?php phpinfo();?>

<?php phpinfo();?> 是一段简单的 PHP 代码,用于显示当前服务器的 PHP 配置信息

<?php ... ?>PHP 的起始和结束标签,包裹其中的 PHP 代码。

phpinfo();PHP 内置函数调用后会生成一个完整的 HTML 页面,包含服务器的 PHP 环境信息

显示 PHP 配置
包括:

PHP 版本、运行模式(如 CLI 或 Apache 模块)。

编译选项(如支持的扩展、安全设置)。

服务器环境变量(如 $_SERVER 内容)。

已加载的扩展(如 MySQL、GD 库等)。

php.ini 的配置参数(如内存限制、上传文件大小等)

调试用途
开发时常用它检查服务器是否正常加载了特定扩展(如 curlpdo_mysql),或确认配置(如 error_reporting)是否生效

如果想限制显示的信息,可以用参数:

<?php phpinfo(INFO_MODULES); // 仅显示已加载的扩展 ?>

与一句话木马的区别

核心区别对比表

特性 phpinfo() 一句话木马
主要功能 显示服务器配置信息 提供远程代码执行能力
危险性 低(信息泄露) 极高(系统控制)
典型用途 调试/信息收集 权限维持/渗透
代码复杂度 单函数调用 常含加密/混淆逻辑
检测难度 通常被允许 安全软件会重点监控

方法2:

可以F12键打开查看器可以看到前端验证的代码

这里其实禁用前端就可以了 (既然Javascript过滤了文件,那把Javascript禁用了就没办法过滤,也就可以上传了 )

打开设置里的调试程序,勾选禁用Javascript

这个是把前端所有的js函数都禁用了(为了浏览器以后能正常使用,要记得过关以后把Javascript开启)

Pass-2

这题同样先上传文件看看

发现提示文件类型不正确,那就是改Content-type就可以

同样选择文件后抓包上传

然后改文件类型,把改为image/jpeg试试

上传成功打开图片

Pass-3

这题上传了php文件后发现是黑名单验证,禁止上传四种后缀的名单

现在想办法绕过,在网上查了一下后了解到在某些特定的环境中某些特殊后缀会被当做php文件解析php、php2、php3 4 5 6 7以及pht、phtm、phtml,然后用php5试了一下,先将之前的<?php phpinfo();?>文件名改一下

上传后同样复制图片地址,然后另建访问,但发现是空白页

弄了好一会不知道怎么回事,后来在一个博主那里了解到使用phpstudy搭建的upload-labs可能无法加载出这个界面,我的就是,而他给出的方法是修改#AddType application/x-httpd-php .php .phtml为AddType application/x-httpd-php .php .phtml .php5 .php3,然后别忘了#要删除,然后就可以正常访问图片地址

我按他说的试了一下,先打开phpstudy的配置文件下的httpd-conf配置文件

然后修改

保存过后就可以访问图片路径

Pass-4

这题着实不会,因为过滤了太多文件

乍一看还好,往后一看更多

这里参照了别人的博客,利用.htaccess,可以重写文件解析绕过,大概做法如下

先写一个文件命名为.htaccess,这个文件内容的意思是告诉apache遇到jpg文件时按照php去解析

再创建一个php测试文件

最后分别将.htaccess 和xxx.jpg文件上传,然后用浏览器访问xxx.jpg即可

Pass-5

查看源码,发现过滤了更多后缀,这次连.htaccess文件也被过滤了

但看到源码中过滤数组有小写和大小写混合,但没有纯大写,而下面也没有转小写

因为php文件名是不区分大小写的,所以直接上传

Pass-6

这题先上传上一题的文件,发现果然被过滤

然后查看源码,发现过滤这块有点不一样,这题相比上一题没有trim()函数对文件名进行去空格处理

而关于文件上传的题之前在deepseek上了解到 在windows环境下,系统会自动去除文件名后面的点和空格,而在linux环境下,会保留文件名的特殊字符,我的环境在windows搭建成的,所以就好解决了  方法就是抓包添加空格,进而消耗掉过滤数,然后windows就会帮我删掉空格,那么完成

先上传刚刚的文件,然后抓包添加空格放行即可

Pass-7

查看关卡源码,对比第四关,发现少了删除文件末尾的点

第六关一样,windows文件后缀名不能加’.',一样使用burp抓包然后后缀加一个点

Pass-8

查看源码,发现相比之前的代码少了删除文件末尾的点

所以同样上传之前的php文件,windows文件后缀名不能加. 所以进行bp抓包 ,然后在后缀加.

最后放行即可

Pass-9

首先查看源码发现这题少了去除字符串::$DATA

所以直接使用bp抓包在文件名后缀加::$DATA,最后放行

Pass-10

这一题之前的所有方法都用不了了,但需要注意的是,没有循环验证,代码只执行一次

既然这样先双写试试看,然后抓包发现的确是将一个php去掉以后拼接了一个新的php

最后放行复制链接访问解析即可

Pass-11

这题注意到save_path这个可控变量,后面还有一个后缀名需要绕过

这里需要知道%00截断但要注意使用这个有两个条件

php版本小于5.3.4

php的magic_quotes_gpc为OFF状态

然后解释一下00截断:php在处理文件名或路径时,如果遇到URL编码的%00,它会被解释为一个空字节(即ASCLL值为0),在php5.3以前,php会将这个空字节转换为\000的新式,然后就会导致文件名被截断,只保留%00之前的部分,然后可能会导致文件被保存到另一个意外的位置从而产生安全风险(php语言的底层为c语言,\0在C语言中是字符串的结束符,所以导致00截断的发生)

接下来注意到img_path是通过get传参传递的,所以不妨将这个路径改为upload/Untitled.php%00,则不管后面是什么东西都会被截掉,然后经过move_upload_file函数将临时文件重新复制给截断之前的文件路径,但还是要上传jpg文件以保证后续程序的运行

接下来就是上传 抓包 修改 放行

Pass-12

这一题发现和上一题不一样,上一题是get传参,这一题是post传参

上一关%00经过url编码,而post不会自行编码,所以应该要对%00进行urldecode编码,可直接利用bp中的快捷键convert selection进行快速url编码

然后我上传的文件类型不正确,Content-type也需要改一下,改为image/jpeg或image/png

改完后send即上传成功

Pass-13

这题的图片马其实就是在一张图片中写入一句话改为php文件然后与另一张图片合成新图片,上传该图片利用php的文件包含特性将图片以php进行解析

先将一张图片写入一句话

使用终端合成新图片再上传,最后利用文件包含漏洞读取即可

copy liu.jpg /b + liu.php /a new.jpg

 当然我也使用了bp发现直接抓包加入一句话要方便得多

Pass-14

检查源码发现pass检查图标内容开头2个字节

也不清楚能干嘛,就像之前一样先找一张正常的图片然后加入phpinfo

然后发现上传成功

pass-15

这题看了源码后看提示

然后注意到getimagesize()函数,具体解析在这里

php getimagesize 函数 – 获取图像信息 | 菜鸟教程

然后同样上传上一题的图片马即可

Pass-16

查看提示有重新渲染,先看看源码

imagecreatefromjpeg()函数,二次渲染是由Gif文件或URL创建一个新图像。成功则返回一图像标识符/图像资源,失败则返回false,导致图片马的数据丢失,上传图片失败。

按照前几关的方式上传,可以上传,但是包含漏洞无法解析。原因就是二次渲染将图片马里面的php代码删除了。接下来把原图和修改后的图片进行比较,看那里没有被渲染,在这里插入php代码。这里使用beyond compare。

把上传的图片右键保存本地,看有没有被渲染的地方,加入php代码

再重新上传

Pass-17

提示需要进行代码审计,先看看源码

发现如果上传的符合它的白名单,那就进行重命名,如果不符合,直接删除!解析的机会都没有,这让我想到了条件竞争,如果我在它删除之前就访问这个文件,他就不会删除了。接下来直接实验
上传一个php文件,然后burp抓包发到爆破模块