任意文件删除漏洞
思路①:因为post传进来值之后还会和后面的$file['savename']进行拼接,所以需要把
尝试:通过seay审计系统查找出了漏洞,构造post请求抓包尝试,最终失败,原因是 post 请求的数据最终是不会被带入执行的,
下面是源代码:
//删除原图 //unlink('./Upload/'.session('gongsiid').'/'.$_POST['fybh'].'/'.$file['savename'] ); //echo $_POST['fybn']; unlink('./Upload/'.session('gongsiid').'/'.'../../../../../../../../../../../../../../../../../2/3.txt'); rename($newpathbig,'./Upload/'.session('gongsiid').'/'.$_POST['fybh'].'/'.$file['savename']); //返回给AJAX
思路②:直接全局查找unlink和 @unlink 函数 必须查找到没有过滤的,并且在句尾拼接的才可以
比如说这种就可以
@unlink('$filename'.$_GET['a']);
下面这种它就不可以,因为你无论传什么值,你也没法把后面的 $filename 过滤掉,即使你传
?a = ../../../../../../../C/windows/windows.ini ); # 这种也不行,具体传进来为什么不能执行我也没弄懂,可能是传进来的是字符串,如果都能执行的话,仔细想想,可能就乱套了
@unlink($_GET['a'].'$filename');