2025年最新upload-labs靶场(环境搭建以及通关全教程)

phpstudy的安装这里不再多说,想看的请翻到上一篇文章

这里咋们直接安装uoload-labs靶场

首先输入网址

https://github.com/c0ny1/upload-labs

点击下载 然后解压缩到phpstudy的安装根目录

然后打开phpstudy

http://127.0.0.1/upload-labs/

咋们点击第一关

先试一试上传本目录下的index.php文件

点击上传

有弹框 没大概率是javaScript

所以咋们尝试前端绕过

f12打开开发者工具

点击禁用

然后点击上传

发现上传成功

然后咋们来看源代码

发现跟咋们猜想的一样 是前端绕过

我们在查看提示

现在咋们看第二关

我们上传php文件

提示文件类型不正确

我们点击显示源码

意思就是只允许上传mine-type类型image/jpeg image/png image/gif

格式的

当然我们可以通过抓包的形式去改变

还是上传php文件

上传进行抓包

修改Content-Type: application/octet-stream为

Content-Type: image/jpeg

点击发送

出现那个小照片 就是上传成功了

我们放包 点击返回到主界面

发现也上传成功

我们点击提示查看

跟我们想的一样

我们接下来看第三关

上传php文件

查看源代码

嗯嗯 大概率是黑名单绕过

黑名单是规定不允许上传的文件,但是如果黑名单定义不完整的话是可以实现绕过的,用.phtml .phps .php5 .pht进行绕过。这里我们直接上传一个.php5文件

我们新建一个1.php

输入

<?php phpinfo(); ?>

我们找到咋们自己的apache服务httpd.conf解析服务

找到你们开启的版本

这句话还要我们自己添加

AddType application/x-httpd-php .php .phtml .php5 .php3

添加之后重启服务

打开

然后我们上传我们新建的1.php

上传并且抓包

修改名字为1.phtml

上传成功

上传路径也有

http://127.0.0.1/upload-labs/upload/202501211902438067.phtml

发现还是显示不了phpinfo

一顿搜索之后发现是因为版本不匹配导致(要使用ts版本呢)

因为phpstudyv8.1版本 里边都是nts版本(好像是更符合php 具体不清楚)

所i以我们换掉v8.1版本

我们使用2016或者2018版本phpstudy

这里不带着安装 因为我前边的文章又教你们咋安装

咋们直接开始

AddType application/x-httpd-php .php .phtml .php5 .php3

这句话的作用就是把其他后缀的都已.php来解析

打开httpd.conf配置文件

我们搜索

我们只要去掉注释即可

然后保存

还是一样的抓包上传

修改文件名字1.phtml

http://127.0.0.1/upload-labs/upload/202501211133234555.phtml

访问成功

查看提示

然后我们查看第四关

发现使用上面上传的php5或者其他类型的文件,都以失败告终。
但是发下有一个文件是没有过滤,也是我们上传过程中经常用到的.htaccess

文件上传之 .htaccess文件getshell_上传.htaccess后再上传jpg文件-CSDN博客

咋们这个版本的的已经修改过了

没改过的 可以修改

新建文件.htaccess

<FilesMatch "\.jpg">

SetHandler application/x-httpd-php

</FilesMatch>

新建1.jpg

<?php phpinfo(); ?>

然后我们先上传.htaccess

然后再上传 抓包

http://127.0.0.1/upload-labs/upload/1.jpg

访问成功

查看提示

然后我们来看第五关

没头绪 查看提示

源码里把所有可以解析的后缀名都给写死了,包括大小写,转换,空格,还有点号,正常的php类文件上传不了了,并且拒绝上传 .htaccess 文件。

反复观察发现没有被限制的后缀名有 .php7 以及 .ini

我们呢来看

换成有nts的

先创建.user.ini文件

.user.ini 配置项中有两个配置可以起到一些作用

方法一:

auto_prepend_file = <filename> //包含在文件头

方法二:

auto_append_file = <filename> //包含在文件尾

我们输入

auto_prepend_file = 1.jpg

.user.ini文件里的意思是:所有的php文件都自动包含1.jpg文件。.user.ini相当于一个用户自定义的php.ini

然后创建

<?php phpinfo(); ?>

然后上传两个文件

输入

http://127.0.0.1/upload-labs/upload/readme.php

咋们修改为10

也可以输入

1.php. .

这一关的思路是它没有循环验证,也就是说这些收尾去空,删除末尾的点,去除字符串::$DATA,转换为小写这些东西只是验证了一次。所以我们的绕过思路就很简单,在数据包中把后缀名改为.php. .说一下他的验证过程,首先他发现有一个点,这时会把他去掉,又发现有一个空格,也会把它去掉,我们这时还有一个点,也就是.php. 由于他只是验证一次,所以不会在去掉我们的点,这时就可以上传成功,也可以解析成功。

http://127.0.0.1/upload-labs/upload/1.php

咋们看第六关

点击查看提示

发现大小写不严谨

我们可以上传.Php .phP .PHP

上传php文件并且抓包 修改

http://127.0.0.1/upload-labs/upload/202501211259277222.Php

然后咋们看第七关

查看提示

发现没有对上传的文件名做去空格的操作->trim()

然后拍咋们上传加空格

http://127.0.0.1/upload-labs/upload/202501211303075567.php

然后咋们看第八关

查看提示

发现对上传的文件后缀名未做去点.的操作—>strrchr($file_name, '.')

然后我们抓包上传 修改

http://127.0.0.1/upload-labs/upload/1.php.

然后咋们来看第九关

查看提示

这一关黑名单,没有对::D A T A 进 行 处 理 , 可 以 使 用 : : DATA进行处理,可以使用::DATA进行处理,可以使用::DATA绕过黑名单

补充知识:php在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持"::$DATA"之前的文件名 他的目的就是不检查后缀名。

抓包修改

/upload/202501211311139897.php::$data

输入

http://127.0.0.1/upload-labs/upload/202501211311139897.php

咋们看第十关

查看提示

deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来

输入.php. .

/upload/1.php.

输入

http://127.0.0.1/upload-labs/upload/1.php.

我们来看第十一关

查看提示

str_ireplace(find,replace,string,count) 函数替换字符串中的一些字符(不区分大小写)

PHP str_ireplace() 函数

我们输入.pphphp

/upload/1.php

http://127.0.0.1/upload-labs/upload/1.php

我们看十二关

查看提示

需要php的版本号低于5.3.29,且magic_quotes_gpc为关闭状态(需要自己关闭)

咋们是用这个

原理:php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。

我们上传1.jpg

内容为 <?php phpinfo(); ?>

/upload/1.php�/8720250121213554.jpg

http://127.0.0.1/upload-labs/upload/1.php

但服务端读取到%00时会自动结束,将文件内容保存至1.php中

咋们看十三关

查看提示

这个是post

upload/1.php

http://127.0.0.1/upload-labs/upload/1.php

我们看十四关

查看提示

咋们找一张正常的图片

加入phpinfo

然后上传

/upload/4120250121222251.jpg

退出看到已经上传了

点击那个链接 文件包含漏洞

http://127.0.0.1/upload-labs/include.php?file=/upload/4120250121222251.jpg

然后我们查看十五关

查看提示

getimagesize()

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

还是使用上一关的图片马

所以不说了

咋们来看十六关

查看提示

exif_imagetype()

PHP: exif_imagetype - Manual

exif_imagetype()读取一个图像的第一个字节并检查其后缀名。

返回值与getimage()函数返回的索引2相同,但是速度比getimage快得多。需要开启php_exif模块。

打勾开启

然后操作跟上一个一样

然后咋们看17关

点击提示

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

进行通关

按照原来的方法进行上传,我们可以发现还是可以上传的,但是配合包含漏洞却无法解析,这时我们把上传的图片复制下来用Notepad打开,发现我们原来写的php代码没有了,这就是二次渲染把我们里面的php代码删掉了。

我们

把原图和他修改过的图片进行比较,看看哪个部分没有被修改。将php代码放到没有被更改的部分,配合包含漏洞,就可以了。

第一次上传

/upload/19741.jpg

发现只有i乱码没有phpinfo

我们找到010editor

插入<?php phpinfo(); ?>

具体的不再多说 看看别人的方法

绕过二次渲染上传图片马-CSDN博客

咋们来看十八关

查看提示

/upload/3420250121152039.jpg

我们看十九关

查看提示

上传php文件

点击抓包

设置线程

设置载荷

点后点击

并发的同时

我们同时

http://127.0.0.1/upload-labs/upload/1.php

看看是他删除快 还是你访问快

在网址输入这个 一直刷新 当看到phpinfo界面时就成功了

然后我们来看十九关

查看提示

这么看来的话,php是不能上传了,只能上传图片马了,而且需要在图片马没有被重命名之前访问它。要让图片马能够执行还要配合其他漏洞,比如文件包含,apache解析漏洞等。

还是一样的操作

唯一的区别就要访问文件包含 上传图片马 上传th.jpg

这里有一个细节,由于可能是这个靶场的作者的某种原因可能有误,上传的图片路径不是放在upload文件夹下,所以我们要进去修改一下第19关的代码文件

然后i重启靶场

http://127.0.0.1/upload-labs/include.php?file=upload/th.jpg

后边还是一样的

还是你访问的快 还是他删除的快

所以我们来看二十关

查看提示

分析代码可知:没有对上传的文件做判断,只对用户输入的文件名做判断,后缀名黑名单
上传的文件名用户可控,黑名单用于用户输入的文件后缀名进行判断

move_uploaded_file()还有这么一个特性,会忽略掉文件末尾的 /.

/upload/1.php/.

http://127.0.0.1/upload-labs/upload/1.php

我们来看二十一关

查看提示

抓包

<?php phpinfo(); ?>
------WebKitFormBoundaryyl6QoyYCwLybiBBE
Content-Disposition: form-data; name="save_name[0]"

upload-20.php
------WebKitFormBoundaryyl6QoyYCwLybiBBE
Content-Disposition: form-data; name="save_name[2]"

png
------WebKitFormBoundaryyl6QoyYCwLybiBBE
Content-Disposition: form-data; name="submit"

上传
------WebKitFormBoundaryyl6QoyYCwLybiBBE--

/upload/upload-20.php.

http://127.0.0.1/upload-labs/upload/upload-20.php.

不要小数点也是对的

http://127.0.0.1/upload-labs/upload/upload-20.php

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值