PHP代码审计——任意文件删除漏洞(YXcms1.4.6)

一、代码审计
删除文件的代码在del()方法,首先通过GET方式接收参数fname传递过来的的值,然后执行in()函数
在这里插入图片描述
跟踪in()函数,发现in函数接收过来的值分为两种情况:字符串、数组。对删除文件没有任何防止,可以不用管
htmlspecialchars():— 将特殊字符转换为 HTML 实体
trim():— 去除字符串首尾处的空白字符(或者其他字符)
在这里插入图片描述
返回查看del()函数,其中第二行
d i r s = s t r r e p l a c e ( , , / , dirs=str_replace(',','/', 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,说明删除成功
在这里插入图片描述
在这里插入图片描述