文件上传绕过的小点总结(10)
18.数组漏洞绕过
给出源码:
$file_name = reset($file) . '.' . $file[count($file) - 1];
//这个是对文件名的重命名处理,里面的reset函数是读取数组的第一个元素,count函数是读取数组元素的个数
$ext = end($file);
$allow_suffix = array('jpg','png','gif');
//这个是对后缀的限制,其中end函数是读取数组的最后一个元素
这里是存在漏洞的,正常情况下,服务器对上传文件名进行重命名处理,
save_name[0]=upload save_name[1]=jpg 该数组经过上述文件函数处理会变成upload.jpg
但如果是:
save_name[0]=upload.php save_name[2]=jpg 该数组绕过后缀名函数检测,经过上述文件函数处理会变成upload.php
两者的差异来源就是count($file)-1,两种情况的值都为1,但第二种情况,save_name[1]为空,save_name[2]设为jpg,但形同虚设。
于是我们利用这种数组上的漏洞,修改save_name数组值,就可以绕过限制。
简单思路:开启BP拦截,上传loudong.jpg文件,BP拦截数据,将save_name改为save_name[0],并将upload-20.jpg改为upload-20.php,再增加一个元素save_name[2],设值为jpg,关闭拦截。
复制图像链接,直接访问。