源码分析
首先我们还是先来分析源码, 以文件名为123.php. .为例 可以更好帮助理解绕过方式
第一行是对不同类别的文件后缀进行的黑名单限制,限制的非常全面,前几关用到的绕过方式都限制了
第二行是获取文件名 记为$file_name 123.php. .
第三行是删除文件名末尾的点 123.php.
第四行是以 ‘ . ’ 为分界获得文件后缀 记为$file_ext .
第五到七行是分别对文件后缀进行转换为小写,去除字符串::$DATA,去除首位的空格 .
→最终得到的$file_name为123.php. 且该源码无循环代码语句,所有操作只执行一次
第八行if判断语句 如果文件后缀不在黑名单里面,则进行下面的语句
标三角的一行为拼接语句,UPLOAD_PATH(上传路径)与$file_name(文件名)拼接并保存经上操作之后,最后的文件名不在黑名单之中所以可以实现绕过
实验过程
上传php文件,同时使用burp进行抓包
修改文件后缀为php. . 然后forward上传成功
获得上传文件的url,使用蚁剑连接(详见第一关教程)