upload-lab WP

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。
1