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

一、代码审计
删除文件的代码在del()方法,首先通过GET方式接收参数fname传递过来的的值,然后执行in()函数
PHP代码审计——任意文件删除漏洞(YXcms1.4.6)_第1张图片
跟踪in()函数,发现in函数接收过来的值分为两种情况:字符串、数组。对删除文件没有任何防止,可以不用管
htmlspecialchars():— 将特殊字符转换为 HTML 实体
trim():— 去除字符串首尾处的空白字符(或者其他字符)
PHP代码审计——任意文件删除漏洞(YXcms1.4.6)_第2张图片
返回查看del()函数,其中第二行
d i r s = s t r r e p l a c e ( ′ , ′ , ′ / ′ , dirs=str_replace(',','/', dirs=strreplace(,,/,dirs); 将逗号替换成/
然后继续执行,到 if(is_dir(KaTeX parse error: Expected '}', got 'EOF' at end of input: dirs)){del_dir(dirs); echo 1;} ,接下来判断后,进入del_dir()函数,跟踪del_dir()函数,首先是删除文件,然后是删除目录
PHP代码审计——任意文件删除漏洞(YXcms1.4.6)_第3张图片
返回查看del()函数,继续往后分析,发现代码的意思是先看是不是目录,如果是目录就删除目录,如果不是目录继续执行,查看是不是文件,如果是文件就执行unlink()函数,删除文件

PHP代码审计——任意文件删除漏洞(YXcms1.4.6)_第4张图片
其中in()方法是对挂马进行过滤,并不会对 …/ 有任何修改

二、漏洞复现

首先进入控制器,发现什么也不能利用
PHP代码审计——任意文件删除漏洞(YXcms1.4.6)_第5张图片
进入控制器首页查看下
PHP代码审计——任意文件删除漏洞(YXcms1.4.6)_第6张图片
使用burpsuite抓包修改
PHP代码审计——任意文件删除漏洞(YXcms1.4.6)_第7张图片
因为del()方法中是拼接到upload目录中,删除,所以得使用…/…/跳转目录
PHP代码审计——任意文件删除漏洞(YXcms1.4.6)_第8张图片
在网站根目录放一个ceshi.txt文件
PHP代码审计——任意文件删除漏洞(YXcms1.4.6)_第9张图片
删除ceshi.txt,若返回1,说明删除成功
PHP代码审计——任意文件删除漏洞(YXcms1.4.6)_第10张图片
PHP代码审计——任意文件删除漏洞(YXcms1.4.6)_第11张图片

你可能感兴趣的:(PHP代码审计)