Upload-labs
Upload-labs
1、前端验证后缀名
直接bp修改后缀,蚁剑连接。
2、经过源码审计,后端只检查MIME类型
上传个xm.php,bp改MIME为image/jpeg
3、服务器端黑名单,仅过滤了::$DATA、.asp、.php、.jsp、.aspx
php3、phtml等均可绕过限制。
4、服务端丰富的黑名单,但是名字未随机生成,且黑名单中无.htaccess,可上传配置文件攻击。
1 | AddType application/x-httpd-php .jpg |
5、服务端丰富的黑名单,但是没有过滤大小写的绕过
xm.PHP可上传
6、服务器没有使用trim()对文件名进行左右两边的去空处理
xm.php空格 可上传
7、经过代码审计,发现没有对文件末尾的.处理,在Windows下,创建文件会默认清除.,这样绕过检测,成功注入木马。
xm.php.
8、::$DATA绕过
9、点+空格+点
1 | xm.php. . |
这个有点技术含量,源代码先清理末尾的点,然后截取最后一个点之后的字符串,判断是否在黑名单中,如果没有则将去了末尾点的原文件名保存到upload文件夹中。
10、双写绕过
1 | xm.pphphp |
11、%00截断——白名单
这里测试了一下,其实00截断的主要是,当POST方法上传文件时,filename名中加入了0x00,则存储到$_FILE的name变量中会读取字符串直到这个0x00。另外在一些函数里也会被00截断。
这道题主要是在URL参数中暴露了存储路径的位置,可以在存储目录上面加一个xm.php%00来组成一个payload,这样在组合存储路径时就会被这个00截断,而保存为xm.php
12、0x00截断——白名单
同理上一题,上一题文件路径暴露在GET参数中,此题文件保存路径暴露在POST中,截断即可。
13、上传图片马,源码采用case语句,判断文件头的二进制值是否正确,属于人工case判断。
14、getimagesize函数检测图片类型
15、