Pass-01
只有前端验证,用burp截包修改文件后缀名。
Pass-02
对MIME进行验证,更改MIME即可绕过。
Pass-03
对后缀名进行黑名单验证,只要上传不在黑名单中的脚本就行。
一般可被识别为php脚本的后缀名有php,php3,php4,php5,php7,phtml,pht,phps,php3p
Pass-04
思路一
利用apache解析“漏洞”,从右往左解析后缀名直到有能够识别的后缀,即上传木马名字为1.php.qwe,会被解析为php。这也就是利用黑名单的坏处。
思路二
上传.htaccess,改变apache配置,使其以php方式运行jpg文件。
Pass-05
上题的思路一失效,它对文件进行重命名,所以不存在解析漏洞了。但依旧是黑名单过滤,没有在验证时将后缀名小写后认证,所以后缀名为PHp绕过。
Pass-06
没有过滤掉文件名中的空,绕过方式为.php
Pass-07
同第六题,没有过滤末尾的.,绕过方式为.php.
Pass-08
我们可以采用Windows文件流特性绕过,文件后缀名后添加::$DATA
Pass-09
思路一
同第四题思路一
思路二
第五题第六题的变种,通过.php. .
绕过删除.操作,从而绕过后缀检测。
Pass-10
仅删除一次php,所以构造后缀名.pphphp绕过。
Pass-11
通过get传参,发给后端存储地址,我们可以构造get参数?save_path=../upload/1.php%00
从而利用00截断截断之后的内容
00截断条件:
1.php版本小于5.3.4
2.php的magic_quotes_gpc为OFF状态
Pass-12
同11题一样,只不过时post传参。
Pass-13
题目要求上传图片马,源码是根据文件的前2个字节来判断文件类型,于是构造个图片马
copy 1.jpg/b + 1.php/a webshell.jpg
Pass-14
这里用了getimagesize()函数来检查图片,但是getimagesize也是根据文件头判断,所以跟上关一样就可以绕过了
Pass-15
虽然换了exif_imagetype()检查,但是跟前两关一样就能绕过
Pass-16
作者原题是伪二次渲染,图片马依旧上传了。
如果真要用二次渲染来限制,有一篇博客讲的很详细,可以参考。
https://xz.aliyun.com/t/2657
Pass-17
查看源码发现存在条件竞争,在if判读不通过unlink文件之前已经用move_uploaded_file函数将文件上传到upload目录下,所以通过bp不断的上传weshell,然后在浏览器中不断的访问总能访问到未被unlink的webshell文件
如果还是删除太快,可以适当调整线程并发数。
Pass-18
利用上传条件竞争+Apache解析漏洞,成功绕过。
上传名字为1.php.7Z的文件,快速重复提交该数据包,会提示文件已经被上传,但没有被重命名。快速提交上面的数据包,可以让文件名字不被重命名上传成功,然后利用Apache的解析漏洞,即可获得shell。
这是网上的WP,我没在自己电脑上复现出来,可能是因为处理器太好了,orz。
Pass-19
emmm,直接解析漏洞就过了,upload-19.php.qwe。
Pass-20
可以发现$file_name经过reset($file) . ‘.’ . $file[count($file) - 1];处理。
如果上传的是数组的话,会跳过$file = explode(‘.’, strtolower($file));。
并且后缀有白名单过滤$ext = end($file);
$allow_suffix = array('jpg','png','gif');
而最终的文件名后缀取的是$file[count($file) - 1],因此我们可以让$file为数组。
$file[0]为smi1e.php/,也就是reset($file),然后再令$file[2]为白名单中的jpg。
此时end($file)等于jpg,$file[count($file) - 1]为空。
而 $file_name = reset($file) . ‘.’ . $file[count($file) - 1];,也就是smi1e.php/.,最终move_uploaded_file会忽略掉/.,最终上传smi1e.php。