文件上传漏洞之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()有这么一个特性,会忽略掉文件末尾的 /.
第二十关:数组绕过