ThinkCMF最新网站漏洞 修复建议实施木马漏洞
最近发现了很多。APP程序用的是thinkcmf,该程序的源代码存在getshell漏洞,我们紧急分析和修复了这个高危漏洞,攻击者可以通过结构特定的请求包get在远程服务器上执行任何脚本代码。
根据index.php在配置中,项目路径为application,打开 Portal 下的 Controller 目录,选择一个控制类文件。
发现他的父类是CommonControllerHomebaseController。
在HomeBaseController添加以下测试代码
ThinkPHP是一套基于MVC应用程序框架分为三个核心部件:模型(M)、视图(V)、控制器(C)。
控制器中添加的代码,根据ThinkPHP框架协议可以通过a参数指定相应的函数名,但函数的修饰符必须是Public,添加的代码正好符合这个条件。
以下可通过URL进行访问,并且可以添加GET参数arg1传递给函数。
cmfx-master/?a=test_public&arg1=run success
HomeBaseController类别中有一些访问权限public关注函数display函数.通过查看描述,可以定制加载模板$this->parseTemplate 函数根据协议确定模板路径。如果不符合原协议,将从当前目录开始匹配。
然后调用THinkphp Controller 函数的display方法
/**
* 加载模板和页面输出 可以返回输出内容
* @access public
* @param string $templateFile 模板文件名
* @param string $charset 模板输出字符集
* @param string $contentType 输出类型
* @param string $content 模板输出内容
* @return mixed
*/
public function display($templateFile = '',$charset = '',$contentType = '',$content = '',$prefix = ''){
parent::display($this->parseTemplate($templateFile),$charset,$contentType,$content,$prefix);
}
再往下就是调用Think View的fetch这里的方法TMPL_ENGINE_TYPE 为Think,模板内容的最终分析是ParseTemplateBehavior中完成
下面的调用可以加载任何文件
执行漏洞
建议修复网站漏洞修复建议
通过审计代码发现问题的重点是display 和 fetch 修改函数的修改符模板函数,如果不熟悉程序代码,建议联系专业网站安全公司修复漏洞,对此很多app调用此程序api接口源代码,建议您首先进行全面的网站漏洞检测和渗透测试,以防止此类攻击的危害。