一、代码审计
删除文件的代码在del()方法,首先通过GET方式接收参数fname传递过来的的值,然后执行in()函数
跟踪in()函数,发现in函数接收过来的值分为两种情况:字符串、数组。对删除文件没有任何防止,可以不用管
htmlspecialchars():— 将特殊字符转换为 HTML 实体
trim():— 去除字符串首尾处的空白字符(或者其他字符)
返回查看del()函数,其中第二行
dirs); 将逗号替换成/
然后继续执行,到 if(is_dir(KaTeX parse error: Expected '}', got 'EOF' at end of input: dirs)){del_dir(dirs); echo 1;} ,接下来判断后,进入del_dir()函数,跟踪del_dir()函数,首先是删除文件,然后是删除目录
返回查看del()函数,继续往后分析,发现代码的意思是先看是不是目录,如果是目录就删除目录,如果不是目录继续执行,查看是不是文件,如果是文件就执行unlink()函数,删除文件
其中in()方法是对挂马进行过滤,并不会对 …/ 有任何修改
二、漏洞复现
首先进入控制器,发现什么也不能利用
进入控制器首页查看下
使用burpsuite抓包修改
因为del()方法中是拼接到upload目录中,删除,所以得使用…/…/跳转目录
在网站根目录放一个ceshi.txt文件
删除ceshi.txt,若返回1,说明删除成功