最近发现无聊的时候发现这个cms有个上传洞,于是心血来潮的审计了一下,整体技术含量不是特别大,代码审计初学者也可以学习一下
最近发现这个cms有个上传洞,于是心血来潮的审计了一下,整体技术含量不是特别大,代码审计初学者也可以学习一下。
RITEcms
访问admin.php,然后输入默认账密admin admin,再次访问admin.php进入后台
File Manager
Upload file
选择文件
OK-Upload file
下面进入代码审计
Admin.php中,进入到filemanage.inc.php文件
进入之后看到fileupload函数,这里new一个类,把对象赋值到upload,然后全局搜索FileUpload,发现是在cms/includes/classes/FileUpload.class.php文件当中
这里赋值了upload和uploaddir参数,因为这里是一个构造方法,它的构造方法,就是在这个实例化对象的时候才会调用,然后construct后面两个参数是在实例化的时候加进去的
继续往下走
在73行有move_uploaded_file函数进行上传,前面的$this->upload[‘tmp_name’]是之前上传的文件临时文件夹的后缀名,后面的$this->uploadDir.$tempFileName是BASE_PATH.$directory.’/’
然后回到刚刚的filemanager.inc.php文件
看到base_path,我们再去全局搜索一下,在文件/data/settings.php中
在settings.php文件中可以到,返回了绝对路径的上一级目录
然后跟踪directory参数
这里的目录是不固定的,如果判断为true,则是/files,如果为false,则 是/media
然后继续往下走
如果为false进入else语句,调用savefile函数
这里把file_name传进去,对应public function saveFile($filename=’’)的filename,这里的filename和file_name的变量名不一样但是传的内容是一样的
该函数直接用copy函数将临时文件复制到后面的文件中
这是copy函数中的参数来源
任意文件删除
在filemanager.inc.php文件中,如果传过来delete,并且存在cofirmed,就会进入unlink语句判断,因为没有做任何的过滤,这里就可以造成任意文件删除,BASE_PATH参数跟上面的文件上传是一个参数,这里就不在赘述了
心血来潮审计一下,目前最新版依旧存在该漏洞,有兴趣的师傅可以自行下载审计一下,还是比较简单的,源代码: https://ritecms.com/download
微信公众号 ZAC安全
因为这篇文章写的较快,所以难免会有错误和遗漏的地方,如有师傅对文章有疑问或者发现错误等,辛苦师傅联系我一下,本人微信 zacaq999
- 本文作者: ZAC安全
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/1108
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!