一、漏洞描述
在CMS安装过程中,由于配置文件过滤不严,导致在安装过程中可以插入配置文件恶意代码,从而执行任意命令,甚至直接获取Webshell
在我的资源中下载::fengcms-含有系统重装漏洞源码包 下载 即可
二、代码审计
该CMS第一次安装系统的时候,是index.php页面,查看index.php内容
图中标记内容的意思是:查看一下是否存在/upload/INSTALL文件是否存在,如果存在(也就是已经成功安装了系统后),就弹窗提示“系统已安装,如需要重新安装,请手工删除upload目录下的INSTALL文件!”,但是仍旧会继续执行下面的内容,也就是switch($_GET[‘step’])。。。。。。。后面的代码
file_exists() 函数检查文件或目录是否存在。
如果指定的文件或目录存在则返回 true,否则返回 false。
接下来是第一步安装许可、第二步检查安装环境,并且指出了文件位置在/step/step1.php
安装过程一共是5个接口,查看这5个文件与Install.php文件
首先分析install.php文件,在文件最后有个一POST方式提交表单的代码
获取表单提交的内容在如图所示位置,获取到表单内容之后,连接数据库,之后将用户的信息写入config.php文件( f i l e = f o p e n ( file = fopen( file=fopen(files, “w”); ),写入后关闭config.php文件(),但是中间没有添加任何过滤代码。那么,就可以写入一些恶意代码
打开config.php文件,发现可以写入内容
运行安装程序
第二步,检测安装环境
第三步:写入内容,也就是存在漏洞的位置,经测试发现,只有数据表前缀的位置可以随意写入内容
在config.php代码中的位置,需要用“‘)”闭合前面的字符 ;号结束,写下一个代码assert($_POST[‘c’]);并且用//注释掉后面的内容
构造完payload:’);assert($_POST[‘c’]);//后,插入payload
最后安装成功
访问网站首页
测试:恶意代码成功写入,并且执行
因为在首页index.php中加载了config.php所以在首页输入测试语句,而config.php中已经被插入一句话木马,所以getshell成功
三、漏洞修复
因为漏洞产生的原因是系统重装漏洞,且首次安装后,第二次访问,仍旧可以重新安装,那么修复方法,在弹窗后添加exit();函数,让程序执行到这个位置后,下面的代码不执行,就不会有系统重装的问题了,当然也可以添加过滤机制
更多web安全工具与存在漏洞的网站搭建源码,收集整理在知识星球。