Upload-labs文件上传靶场通关教程🐶

Upload-labs文件上传靶场通关教程🐶

Pass-01

首先直接上传一个webshell,果然被禁止了,弹出不允许上传php类型的文件

image

然后我准备抓包改改文件类型的,发现压根抓不到,弹框在抓包之前,就说明这是做的一个前端限制,所以我们只需要找到前端js代码把它删掉然后上传就行了

image

把上面这个限制的js代码删掉,然后直接上传一个webshell即可,上传成功之后我们读取/etc/passwd看看

image

Pass-02

这一关查看网页源码发现还是有前端限制,但是应该没那么简单不然就跟第一关一样了,我们尝试删除前端js代码限制,然后抓包修改文件的MIME类型为 image/jpeg 然后上传,发现上传成功

image

image

Pass-03

这一关我们经过测试发现是检查文件上传的后缀不允许是本pass禁止上传.asp|.aspx|.php|.jsp后缀文件,然后查看源码发现会进行小写转换,所以大写绕过肯定是不行的,但是我们可以用 php3php5 这些后缀进行绕过,上传文件读取/etc/passwd文件

image

Pass-04

第四关我们查看提示发现禁止上传下面这些常用后缀

image

所以这个时候我们就可以上传 .htaccess 重写文件解析绕过
.htaccess文件的作用:.htaccess文件是Apache服务器的一个配置文件,负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

我们这里用到的就是.htaccess文件的改变文件扩展名的功能
.htaccess代码:

<FilesMatch "shell.jpg"
SetHandler application/x-httpd-php
</FilesMatch>

这个时候我们上传一个shell.jpg的文件,他的后缀会以php文件解析。上传成功读取/etc/passwd

image

Pass-05

这一关我们看提示发现.htaccess文件也被禁止上传了

image

但是我们看源码发现没有了转换小写函数,就是这个:strtolower(),所以这一关我们可以大小写混写绕过,上传成功读取/etc/passwd文件

image

Pass-06

这一关增加了转换小写的函数,所以说大小混写肯定不行了,但是删掉了去掉文件首尾去空的函数

 $file_ext = trim($file_ext); //首尾去空

所以说这关我们可以在文件名末尾加空格绕过,上传成功读取phpinfo()文件

image

Pass-07

这一关查看提示还是禁止了所有能上传的后缀,但是少了这一行代码

$file_name = deldot($file_name);//删除文件名末尾的点

这样我们就可以这样构造文件名绕过shell.php.多加一个点,因为这一行代码下面就是这一行代码

# 意思是截取最后一个.后面的字符串
$file_ext = strrchr($file_name, '.');

经过我们构造payload之后,他就会截取一个空的字符串去黑名单里面比较,发现都不在从而进行绕过了。上传成功执行phpinfo()命令

image

Pass-08

这一关跟上一关相比少了这样一行代码

 $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
  • ::$DATA的作用
    在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名。
    例如:"phpinfo.php::$DATA"Windows会自动去掉末尾的::$DATA变成"phpinfo.php"

所以说这是windows独有的特性,如果你的环境搭在linux系统就行不通了。
所以我们可以这样构造进行绕过:文件名+::$DATA
上传文件成功之后执行phpinfo();命令

image

Pass-09

我们查看源码发现基本就是前面的综合,都加了。然后我们再看看这一关跟第7关的区别是不是就加了这一行代码

$file_name = deldot($file_name);//删除文件名末尾的点

第7关没有这一行代码还记得我们是怎么绕过的吗?是不是这样shell.php.,在文件名后面多加一个点,但是这一关有了这一行代码会删除文件名末尾的点,那我们可以加两个点,删了一个不还有一个吗。所以我们可以这样构造payload:
shell.php. .,上传文件成功之后执行phpinfo()命令

image

Pass-10

这一关我们查看源码发现是将敏感后缀全部替换成空,关键代码如下:

$file_name = trim($_FILES['upload_file']['name']);
$file_name = str_ireplace($deny_ext,"", $file_name);

但是没有循环过滤,说明它只是删除了一次,所以我们可以进行双写绕过,payload:shell.pphphp
上传文件成功之后读取/etc/passwd文件

image

Pass-11

这一关的关键代码如下:

# 一个白名单
$ext_arr = array('jpg','png','gif');
# 这个是获取上传文件的后缀
$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
if(in_array($file_ext,$ext_arr)){
    $temp_file = $_FILES['upload_file']['tmp_name'];
	# 这个save_path是保存路径,后面拼接上一个随机的文件名跟后缀
    $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

这一关的save_path我们是可控的,所以我们可以用%00截断,但是这个东西的利用需要两个条件:

  1. php版本小于5.3.4
  2. php的magic_quotes_gpc为OFF状态

所以说如果你没有上传成功的话,最好去检查一下满不满足这两个条件!👻

我们尝试上传:

image

上传成功之后执行phpinfo()命令

image

Pass-12

好家伙,这一关我刚开始还以为和第11关一样呢,仔细一看就是把GET改成了POST去传输save_path了,但是有一点要注意的就是%00在GET中会自动解码,但是在POST中不会,所以需要我们手动在16进制里面进行修改00,这里用的就是16进制00截断漏洞。
我们直接上传payload:

image

上传成功之后执行phpinfo();命令

image

Pass-13

这一关是让我们上传图片码,然后利用文件包含漏洞进行利用,而且让我们上传3种格式的图片码。
我们查看源码发现如下代码:

# 只是检查文件的开头两个字节是不是正确的
$bin = fread($file, 2); //只读2字节
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);

所以我们可以伪造文件开头的两个字节就可以,下面展示三种图片码的开头文件字节:

图片类型 开头两个字节 编码后的字符
jpg ff d8 ÿ Ø
png 89 50 ‰ P
gif 47 49 G I

GIF图片码

  1. 上传GIF图片

image

  1. 通过文件包含漏洞读取/etc/passwd文件

image

PNG图片码

  1. 上传PNG图片

image

  1. 通过文件包含漏洞读取/etc/passwd文件

image

JPG图片码

  1. 上传JPG图片

image

  1. 通过文件包含漏洞读取/etc/passwd文件

image

Pass-14

本关利用的是getimagesize这个函数对上传的图片做限制。

getimagesize的作用:getimagesize 这个函数是检查图片的前面16进制来检查是否为图片。如果说在在16进制后面加入恶意代码,就可以神不知鬼不觉的上传图片和本地文件包含漏洞(改URL的)结合 达到入侵的目的!即制作包含恶意代码的图片!
制作方法:window+R cmd 输入 copy /b ai.png + phpinfo.php ccc.png

  1. GIF图片码
copy /b 1.gif + shell.php 2.gif
  1. JPG图片码
copy /b 1.jpg + shell.php 2.jpg
  1. PNG图片码
copy /b 1.png + shell.php 2.png

上传图片码之后,通过文件包含漏洞访问图片读取/etc/passwd文件:

http://192.168.33.222:24007/include.php?file=./upload/3420220117013703.jpeg

image

Pass-15

这一关用第14关的图片码即可解决

Pass-16

这一关会对图片进行重新渲染,所以有可能我们上传的图片码里面写入的一句话木马被重新渲染了,导致执行不了。所以我们对比渲染之后的图片码和之前的进行对比,看哪些地方进行了渲染,在没有被渲染的地方重新插入一句话木马,用winhex直接改就行。

上传图片成功之后读取/etc/passwd文件

image

Pass-17

这一关网上说是用条件竞争的方式上传文件,但是我上传一个图片码之后通过文件包含直接访问到了,读取/etc/passwd文件

image

Pass-18

------------恢复内容开始------------

# Upload-labs文件上传靶场通关教程🐶

Pass-01

首先直接上传一个webshell,果然被禁止了,弹出不允许上传php类型的文件

image

然后我准备抓包改改文件类型的,发现压根抓不到,弹框在抓包之前,就说明这是做的一个前端限制,所以我们只需要找到前端js代码把它删掉然后上传就行了

image

把上面这个限制的js代码删掉,然后直接上传一个webshell即可,上传成功之后我们读取/etc/passwd看看

image

Pass-02

这一关查看网页源码发现还是有前端限制,但是应该没那么简单不然就跟第一关一样了,我们尝试删除前端js代码限制,然后抓包修改文件的MIME类型为 image/jpeg 然后上传,发现上传成功

image

image

Pass-03

这一关我们经过测试发现是检查文件上传的后缀不允许是本pass禁止上传.asp|.aspx|.php|.jsp后缀文件,然后查看源码发现会进行小写转换,所以大写绕过肯定是不行的,但是我们可以用 php3php5 这些后缀进行绕过,上传文件读取/etc/passwd文件

image

Pass-04

第四关我们查看提示发现禁止上传下面这些常用后缀

image

所以这个时候我们就可以上传 .htaccess 重写文件解析绕过
.htaccess文件的作用:.htaccess文件是Apache服务器的一个配置文件,负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

我们这里用到的就是.htaccess文件的改变文件扩展名的功能
.htaccess代码:

<FilesMatch "shell.jpg"
SetHandler application/x-httpd-php
</FilesMatch>

这个时候我们上传一个shell.jpg的文件,他的后缀会以php文件解析。上传成功读取/etc/passwd

image

Pass-05

这一关我们看提示发现.htaccess文件也被禁止上传了

image

但是我们看源码发现没有了转换小写函数,就是这个:strtolower(),所以这一关我们可以大小写混写绕过,上传成功读取/etc/passwd文件

image

Pass-06

这一关增加了转换小写的函数,所以说大小混写肯定不行了,但是删掉了去掉文件首尾去空的函数

 $file_ext = trim($file_ext); //首尾去空

所以说这关我们可以在文件名末尾加空格绕过,上传成功读取phpinfo()文件

image

Pass-07

这一关查看提示还是禁止了所有能上传的后缀,但是少了这一行代码

$file_name = deldot($file_name);//删除文件名末尾的点

这样我们就可以这样构造文件名绕过shell.php.多加一个点,因为这一行代码下面就是这一行代码

# 意思是截取最后一个.后面的字符串
$file_ext = strrchr($file_name, '.');

经过我们构造payload之后,他就会截取一个空的字符串去黑名单里面比较,发现都不在从而进行绕过了。上传成功执行phpinfo()命令

image

Pass-08

这一关跟上一关相比少了这样一行代码

 $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
  • ::$DATA的作用
    在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名。
    例如:"phpinfo.php::$DATA"Windows会自动去掉末尾的::$DATA变成"phpinfo.php"

所以说这是windows独有的特性,如果你的环境搭在linux系统就行不通了。
所以我们可以这样构造进行绕过:文件名+::$DATA
上传文件成功之后执行phpinfo();命令

image

Pass-09

我们查看源码发现基本就是前面的综合,都加了。然后我们再看看这一关跟第7关的区别是不是就加了这一行代码

$file_name = deldot($file_name);//删除文件名末尾的点

第7关没有这一行代码还记得我们是怎么绕过的吗?是不是这样shell.php.,在文件名后面多加一个点,但是这一关有了这一行代码会删除文件名末尾的点,那我们可以加两个点,删了一个不还有一个吗。所以我们可以这样构造payload:
shell.php. .,上传文件成功之后执行phpinfo()命令

image

Pass-10

这一关我们查看源码发现是将敏感后缀全部替换成空,关键代码如下:

$file_name = trim($_FILES['upload_file']['name']);
$file_name = str_ireplace($deny_ext,"", $file_name);

但是没有循环过滤,说明它只是删除了一次,所以我们可以进行双写绕过,payload:shell.pphphp
上传文件成功之后读取/etc/passwd文件

image

Pass-11

这一关的关键代码如下:

# 一个白名单
$ext_arr = array('jpg','png','gif');
# 这个是获取上传文件的后缀
$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
if(in_array($file_ext,$ext_arr)){
    $temp_file = $_FILES['upload_file']['tmp_name'];
	# 这个save_path是保存路径,后面拼接上一个随机的文件名跟后缀
    $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

这一关的save_path我们是可控的,所以我们可以用%00截断,但是这个东西的利用需要两个条件:

  1. php版本小于5.3.4
  2. php的magic_quotes_gpc为OFF状态

所以说如果你没有上传成功的话,最好去检查一下满不满足这两个条件!👻

我们尝试上传:

image

上传成功之后执行phpinfo()命令

image

Pass-12

好家伙,这一关我刚开始还以为和第11关一样呢,仔细一看就是把GET改成了POST去传输save_path了,但是有一点要注意的就是%00在GET中会自动解码,但是在POST中不会,所以需要我们手动在16进制里面进行修改00,这里用的就是16进制00截断漏洞。
我们直接上传payload:

image

上传成功之后执行phpinfo();命令

image

Pass-13

这一关是让我们上传图片码,然后利用文件包含漏洞进行利用,而且让我们上传3种格式的图片码。
我们查看源码发现如下代码:

# 只是检查文件的开头两个字节是不是正确的
$bin = fread($file, 2); //只读2字节
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);

所以我们可以伪造文件开头的两个字节就可以,下面展示三种图片码的开头文件字节:

图片类型 开头两个字节 编码后的字符
jpg ff d8 ÿ Ø
png 89 50 ‰ P
gif 47 49 G I

GIF图片码

  1. 上传GIF图片

image

  1. 通过文件包含漏洞读取/etc/passwd文件

image

PNG图片码

  1. 上传PNG图片

image

  1. 通过文件包含漏洞读取/etc/passwd文件

image

JPG图片码

  1. 上传JPG图片

image

  1. 通过文件包含漏洞读取/etc/passwd文件

image

Pass-14

本关利用的是getimagesize这个函数对上传的图片做限制。

getimagesize的作用:getimagesize 这个函数是检查图片的前面16进制来检查是否为图片。如果说在在16进制后面加入恶意代码,就可以神不知鬼不觉的上传图片和本地文件包含漏洞(改URL的)结合 达到入侵的目的!即制作包含恶意代码的图片!
制作方法:window+R cmd 输入 copy /b ai.png + phpinfo.php ccc.png

  1. GIF图片码
copy /b 1.gif + shell.php 2.gif
  1. JPG图片码
copy /b 1.jpg + shell.php 2.jpg
  1. PNG图片码
copy /b 1.png + shell.php 2.png

上传图片码之后,通过文件包含漏洞访问图片读取/etc/passwd文件:

http://192.168.33.222:24007/include.php?file=./upload/3420220117013703.jpeg

image

Pass-15

这一关用第14关的图片码即可解决

Pass-16

这一关会对图片进行重新渲染,所以有可能我们上传的图片码里面写入的一句话木马被重新渲染了,导致执行不了。所以我们对比渲染之后的图片码和之前的进行对比,看哪些地方进行了渲染,在没有被渲染的地方重新插入一句话木马,用winhex直接改就行。

上传图片成功之后读取/etc/passwd文件

image

Pass-17

这一关网上说是用条件竞争的方式上传文件,但是我上传一个图片码之后通过文件包含直接访问到了,读取/etc/passwd文件

image

Pass-18

这一关网上说是要用条件竞争的方式上传,但是我就上传了一个图片码发现也成功了,但是上传目录不是uplaod,变成了根目录下面。

读取/etc/passwd文件:

image

Pass-19

后面两关我还没有复现出来,看了网上教程,但是我没有成功😭,等后面再回来试试吧。

posted @ 2022-01-17 14:10  胖三斤1  阅读(679)  评论(0编辑  收藏  举报
Live2D