pass 7(黑名单验证,空格绕过)
源码中无首尾去空的操作
Windows 系统下,对于文件名中空格会被作为空处理,程序中的检测代码却不能自动删除空格,从而绕 过黑名单。
上传一个.png文件,抓包
修改文件类型为.php加空格
pass 8(黑名单验证,点号绕过)
没有使用deldot()过滤文件名末尾的点
将文件后缀名.png改为.php.
pass 9(黑名单验证,特殊字符::$DATA绕过)
对上传的文件后缀名没有做去::$DATA处理,所以我们可以利用::$DATA后缀
Windows系统下,如果上传的文件名为1.php::$DATA会在服务器上生成一个1.php文件,其中内容和所上传文件内容相同,并被解析。
补充知识:php在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持"::$DATA"之前的文件名 他的目的就是不检查后缀名。
上传1.png,抓包,将文件后缀名.png改为.php::$DATA
但是无法在路径中找到
删除路径中的::$data,可以访问
pass 10
本关只允许上传.jpg .png .gif后缀的文件
只过滤一次点,方法:“点+空格+点”
pass 11
str_ireplace()将文件名中符合黑名单的字符串换成空白
方法:利用双写黑名单字符,对字符串的一次过滤后拼接出php,修改文件后缀为.pphphp
上传成功
pass 12 白名单校验(GET型0x00截断)
白名单:只允许上传以下几种类型文件
可以在文件的路径做手脚,利用00截断,提前把文件截断,把文件名放在目录径上
存储路径
添加phpinfo.php%00内容,设置上传路径为 upload/phpinfo.php%00
上传的文件的后缀名在白名单内即可,例如:1.png,保存后为upload/phpinfo.php%001.png,但是服务器读取到%00时会自动结束,将文件内容保存至phpinfo.php中(%00的截断作用)
上传成功
pass 13 (POST型0x00截断)
还是白名单校验
从POST方式获取