upload-labs靶场(11—20)通关攻略

  • Post author:
  • Post category:其他




Pass-11-get 00

截断绕过

1、直接上传.php文件,提示:只允许上传.jpg|.png|.gif类型文件!

2、查看源码,发现是白名单判断,但$img_path是直接拼接,因此可以利用%00截断绕过。

 $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

这里使用的是php5.2.17+Apache环境

截断条件:php版本小于5.3.4,php的magic_quotes_gpc为Off状态

3、上传图片马抓包,使用%00截断

4、成功上传!



Pass-12-post 00

截断绕过

1、直接上传.php文件,提示:只允许上传.jpg|.png|.gif类型文件!

2、查看源码

save_path参数通过POST方式传递,还是利用00截断,因为POST不会像GET对%00进行自动解码,所以需要在二进制中进行修改。

3、上传图片马抓包,在hex中修改

4、成功上传!



Pass-13-

图片马+文件包含

1、要求上传图片马到服务器,并且要结合文件包含漏洞来执行图片马中的恶意代码,图片马要.jpg,.png,.gif三种后缀都上传成功才算过关!

2、查看源码

这一关会读取判断上传文件的前两个字节,判断上传文件类型,并且后端会根据判断得到的文件类型重命名上传文件

3、我们先准备三种图片马(这里我是利用了Notepad++将恶意代码直接写入图片)

4、将图片马挨个上传到服务器。

5、最后我们利用文件包含漏洞



Pass-14-getimagesize()


1、要求跟Pass-13一样

2、查看源码

分析源码后,与Pass-14差不多,也是对文件开头做检查,只不过是换了一个函数,通过使用getimagesize()检查是否为图片文件。

3、上传图片马结合文件包含执行恶意代码



Pass-15-exif_imagetype()


1、要求还是和前两关一样

2、查看源码,发现只是换了个函数,使用了exif_imagetype()来检查是否为图片文件,并且需要开启php_exif模块。

3、上传图片马,结合文件包含执行恶意代码



Pass-16-

二次渲染绕过

原理:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。

尝试了很多次都以失败告终,没办法,只能附上大佬链接


https://xz.aliyun.com/t/2657#toc-2



Pass-17-

条件竞争

1、直接上传.php文件

2、查看源码

这里是条件竞争,先将文件上传到服务器,然后判断文件后缀是否在白名单里,如果在则重命名,否则删除,因此我们可以上传1.php只需要在它删除之前访问即可,可以利用burp的intruder模块不断上传,然后我们不断的访问刷新该地址即可。



Pass-18-

条件竞争

1、查看源码发现也存在条件竞争的问题,不过这题对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,因此可以通过不断上传图片马,由于条件竞争可能来不及重命名,从而上传成功。

2、我们可以发现由于条件竞争可能来不及重命名的文件

3、利用文件包含执行恶意代码



Pass-19-00

截断

1、查看源代码

发现move_uploaded_file()函数中的img_path是由post参数save_name控制的,因此可以在save_name利用00截断绕过。
注意:POST接收的时候 %00 需要URL编码。

2、上传.php文件

2、在Hex中进行修改

3、成功上传!


Pass-20-数组绕过

1、查看源码

if (!is_array($file)) {
           $file = explode('.', strtolower($file));
       }
// 这组代码判断如果file不是数组的话,就会以点将文件名区分,这样我们的php文件名就没有用了,所以要构造数组结构的数据来绕过这个。

2、上传图片马,抓包,构造数组格式数据

3、成功上传!


总结:

花了差不多两天打完这个靶场,中间还是遇到了很多问题,但也是一步一步的解决掉了一些,希望这两篇文章能够帮到一些刚刚步入安全的师傅。


我们后会有期,我是小白,大佬勿喷!



版权声明:本文为chiza2596原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。