文件上传靶场upload-labs通关

文章目录


前言

upload-labs是一个专门用来练习文件上传的靶场
在这里插入图片描述
一共20关,现在,我们开始通关吧。


Pass-01(JavaScript绕过)

Step1、分析源码

在这里插入图片描述
这里使用了前端JavaScript来进行过滤,并且只允许上传jpg、png、gif类型的文件。

Step2、修改webshell文件后缀名

把生成的webshell文件1.php改名成2.jpg,上传,然后查看burp数据包
在这里插入图片描述

把数据包发送到Repeater模块
在这里插入图片描述
在这里插入图片描述

Step3、修改报文重新发送

在这里插入图片描述

文件存放的路径
在这里插入图片描述

Step4、使用webshell程序测试是否能连接

在这里插入图片描述
第一关通关。


Pass-02(MIME-Type绕过)

Step1、分析源码

在这里插入图片描述
这里是对发送的数据请求包进行了检测,只有符合要求的Content Type字段才能上传成功,也就对MIME-Type类型进行检测。

Step2、burp抓包,修改数据包

直接上传webshell文件,然后抓包
在这里插入图片描述

修改数据包Content Type字段类型
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
连接成功,第二关通关


Pass-03(黑名单绕过)

Step1、分析源码

在这里插入图片描述
看源码,这里使用了黑名单绕过,禁止了’.asp’,‘.aspx’,‘.php’,'.jsp’等后缀名命名的文件上传,这就使用不在这个黑名单上面的后缀名吧。

Step2、burp抓包,修改数据包

这里就上传一句话木马
在这里插入图片描述
好了,文件上传成功了,第三关通关


Pass-04(黑名单之.htaccess绕过)

注意:这里对PHP版本有要求,只有不带nts的PHP版本才有效。

Step1、分析源码

在这里插入图片描述
这一关几乎把所有我们能想到的文件类型都禁止掉了,这时后就只能上传一些乱七八糟的格式的文件。

Step2、抓包,重发送请求

上传 .htaccess 文件,内容为:SetHandler application/x-httpd-php
在这里插入图片描述

把webshell文件随便修改成任意后缀名的文件
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
好了,连接成功,第四关通关


Pass-05(黑名单之大小写绕过)

注意:这里对PHP版本有要求,只有不带nts的PHP版本才有效。

Step1、分析源码

在这里插入图片描述
这里黑名单加入了 .htaccess ,也就是说不允许上传.htaccess文件了,但源码发现,少了一个转换为小写的函数,也即是说可以使用大小写绕过功能。

Step2、抓包,重发送请求

在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
这里第5关通关


Pass-06(黑名单之空格绕过)

Step1、分析源码

在这里插入图片描述
这里没有去除文件中的空格,这个可以利用
这时候就需要普及一个知识:Windows下‘xx.jpg ’和‘xx.jpg.’两种文件是不被允许存在的,要是这样命名文件,Windows系统会默认删除空格或者‘.

Step2、抓包,重发送请求

在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第6关通关


Pass-07(黑名单之.绕过)

Step1、分析源码

在这里插入图片描述
这里没有去除文件末尾的‘.’,这个可以利用。
这时候就需要普及一个知识:Windows下‘xx.jpg ’和‘xx.jpg.’两种文件是不被允许存在的,要是这样命名文件,Windows系统会默认删除空格或者‘.

Step2、抓包,重发送请求

在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第7关通关


Pass-08(黑名单之::$DATA绕过)

Step1、分析源码

在这里插入图片描述
这里没有去除::$DATA样式的字符串。
NTFS文件系统包括对备用数据流的支持。这不是众所周知的功能,主要包括提供与Macintosh文件系统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:$ DATA

Step2、抓包,重发送请求

在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第8关通关


Pass-09(黑名单之点-空格-点绕过)

注意:该方法只对7.1以下的PHP版本有用。

Step1、分析源码

在这里插入图片描述
这里先过滤了一次末尾的‘.’后过滤了一次空格。这就能生成一种思路,使用:‘点-空格-点’的方式来进行绕过。

Step2、抓包,重发送请求

在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第9关通关


Pass-10(黑名单之双写后缀绕过)

Step1、分析源码

在这里插入图片描述
这个代码的意思就是把带有黑名单中的后缀替换为空。
这时我们考虑双写绕过。

Step2、抓包,重发送请求

.php改成 .pphphp,它就会删掉中间的php,最后保留 .php
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第10关通关


Pass-11(白名单之%00截断 GET方法绕过)

注意:这个东西已经是旧时代的产物的,所以有使用条件:
1. php版本小于5.3.4
2. php的magic_quotes_gpc为OFF状态

Step1、分析源码

在这里插入图片描述
这里设置了白名单。
save_path是一个可控的变量,后面还有一个后缀名需要绕过,这个时候需要使用%00截断。

Step2、抓包,重发送请求

修改save_path部分,使用%00截断,然后下面文件名修改成其他类型的后缀名。
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第11关通关


Pass-12(白名单之%00截断 POST方法绕过)

注意:这个东西已经是旧时代的产物的,所以有使用条件:
1. php版本小于5.3.4
2. php的magic_quotes_gpc为OFF状态

Step1、分析源码

在这里插入图片描述
在POST请求中,%00不会被自动解码,需要在16进制中进行修改00

Step2、抓包,重发送请求

在这里插入图片描述

进入16进制编码页面,把上面输入的空格16进制编码20修改成00
在这里插入图片描述

上传成功
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第12关通关


Pass-13(白名单之文件包含漏洞图片马绕过)

Step1、分析源码

在这里插入图片描述
这里只查看图片编码前2个字节

在这里插入图片描述
可以使用文件包含漏洞。

Step2、制作图片马

使用DOS命令:
copy hua.jpg /b + 2.php /a 123.jpg
这里hua.jpg是正常图片,2.php是包含webshell的文件,123.jpg是生成的图片马。
在这里插入图片描述

使用记事本打卡查看
在这里插入图片描述

Step3、上传图片马

在这里插入图片描述

右键在新标签打开图片可以查看图片的路径,可以看到图片是改名字了。
在这里插入图片描述

Step4、使用webshell程序测试是否能连接

测试路径是:http://192.168.1.107/upload-labs-master/include.php?file=upload/3520230628175732.jpg
在这里插入图片描述
第13关通关


Pass-14(白名单之文件包含漏洞getimagesize()检测绕过)

Step1、分析源码

在这里插入图片描述
getimagesize()函数将测定任何GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM或WBMP图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通HTML文件中标记中的 height/width 文本字符串。

Step2、制作图片马

这里就直接使用Pass-13的图片马了。

Step3、上传图片马

在这里插入图片描述
这里直接把图片的后缀名由JPG改成JPEG了。

Step4、使用webshell程序测试是否能连接

在这里插入图片描述
第14关通关。


Pass-15(白名单之文件包含漏洞exif_imagetype()检测绕过)

Step1、分析源码

在这里插入图片描述
exif_imagetype是判断一个图像的类型的进程。它会读取一个图像的第一个字节并检查其签名。

在这里插入图片描述
注意该实验需要开启php_exif模块

Step2、其他步骤跟Pass-14、Pass-15差不多


Pass-16(白名单之文件包含漏洞突破二次渲染)

注意:这里推荐使用gif文件,经测试jpg和png文件会经常被由头渲到尾,不太好用。

Step1、分析源码

在这里插入图片描述
这关会对上传的图片进行二次渲染

Step2、制作图片马

在这里插入图片描述

Step3、上传图片马

在这里插入图片描述
上传的路径是这里。

下载上传后的图片
在这里插入图片描述
在这里插入图片描述
对比两张图片很明显,里面的一句话webshell在二次渲染时被覆盖了,只有这一部分没有被二次渲染

Step4、找到没有被修改的地方,修改被二次渲染的图片

在这里插入图片描述
这里没有被二次渲染

把代码复制下来对比一下:
在这里插入图片描述
在这里插入图片描述
覆盖并修改这里

生成新的gif图片,图片略有失真了,不过不要紧
在这里插入图片描述

Step5、再次上传修改后的图片马

在这里插入图片描述

把图片下载下来,看看新图片木马里面的木马有没有被二次渲染
在这里插入图片描述
很好,这次没有被二次渲染

Step6、使用webshell程序测试是否能连接

在这里插入图片描述
第16关通关


Pass-17(条件竞争)

Step1、分析源码

在这里插入图片描述
这种情况,明显符合使用条件竞争的方式绕过

Step2、编写适合条件竞争的PHP文件

命名为777.php,内容为:
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["a"]); ?>'); ?>
现在要上传该PHP文件,并且执行它,让它生成一个名为shell.php的一句话webshell。

Step3、抓包,配置上传的爆破

上传一个777.php文件,抓包,发送到攻击模块
在这里插入图片描述

Clear所有的标记,然后设置payload
在这里插入图片描述
在这里插入图片描述
下方的Continue indefinitely也就是无限重放的意思。

Step4、抓包,配置访问文件的爆破

上传一个正常的图片,抓包
在这里插入图片描述
找到上传的路径,然后去访问

访问刚才上传的gif图片,抓包,发送到攻击模块
在这里插入图片描述

修改访问目标。配置payload
在这里插入图片描述
在这里插入图片描述

Step5、开始攻击

在这里插入图片描述
在这里插入图片描述
上面两个操作尽量达到同时攻击

在这里插入图片描述
好了,看到这个说明访问成功了!

Step6、使用webshell程序测试是否能连接

在这里插入图片描述
第17关通关


Pass-18(条件竞争+文件包含漏洞)

Step1、分析源码

在这里插入图片描述
在这里插入图片描述
从源码来看的话,服务器先是将文件后缀跟白名单做了对比,然后检查了文件大小以及文件是否已经存在。文件上传之后又对其进行了重命名。

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

Step2、制作图片马

这里的图片马使用Pass-18的,把他嵌入到gif文件中,并命名为777.gif
在这里插入图片描述

Step3、上传图片马,抓包查看

在这里插入图片描述
这里注意,上传的图片马被改名字后就直接保存到根目录,也就说假如执行了图片马,生成的webshell文件也是在根目录。

Step4、配置图片马上传的爆破

这里跟17关一样操作
在这里插入图片描述
在这里插入图片描述

Step5、使用文件包含漏洞来访问图片,然后抓包

先尝试是否能使用文件包含漏洞
在这里插入图片描述
发现能使用文件包含漏洞,就抓这个包

修改访问的文件
在这里插入图片描述
在这里插入图片描述

Step6、上传和访问同时攻击

跟第17关一样,同时攻击。

Step7、使用webshell程序测试是否能连接

这里得注意了,生成得webshell文件不是在upload目录,而是在跟目录的。
在这里插入图片描述
在这里插入图片描述
上面这两种访问方式都可以。第18关通关


Pass-19(move_uploaded_file函数绕过)

在这里插入图片描述
这关有点不一样。

Step1、分析源码

在这里插入图片描述
move_uploaded_file()这样一个函数,它有一个特性,会忽略到文件末尾的/. 及后面的内容
并且 move_uploaded_file() 函数中的 img_path 是由post参数 save_name 控制的,这就可以在 save_name 的参数上面改动。

Step2、抓包,重新发送请求

随机上传一个有webshell的php文件
在这里插入图片描述
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第19关通关


Pass-20(文件名数组绕过)

Step1、分析源码

在这里插入图片描述
这里先使用三元运算符判断 save_name 的值是否为空,如果为空,$file的值就是 upload_file 数组下的 name 的值,不为空就是 save_name 的值。

然后就判断$file是不是数组,如果$file不是数组的话,就会将$file以"." 分割,打散成数组。

同时,这里也存在 move_uploaded_file 函数,也就是说也有忽略到文件末尾的/. 后面内容的性质。

Step2、抓包,修改数据包重发送

构造数组:
save_name[0]=“2.php/”
save_name[1]为空
save_name[2]=“jpg”

可以简单分析得到,这样构造的数据包也最终会拼接成的路径是:2.php/. .jpg
由于有 move_uploaded_file() 这样一个函数,它有一个特性,会忽略到文件末尾的/. 及后面的内容,所以最终上传的会是2.php
在这里插入图片描述

Step3、使用webshell程序测试是否能连接

在这里插入图片描述
第20关通关。


  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值