最近发现很多App程序使用thinkcmf,这个程序的源代码存在getshell漏洞。我们的Sine安全紧急事件分析并修复了这个高风险漏洞,攻击者可以通过构建特定的请求包get request在远程服务器上执行任意脚本代码。
根据index.php的配置,项目路径为application,打开portal下的Controller目录,选择一个控制类文件。
发现他的父类是common \\ controller \\ homebase控制器。
向HomeBaseController添加以下测试代码
ThinkpHp是一个基于MVC的应用框架,分为三个核心组件:模型(M)、视图(V)和控制器(C)。
由于添加的代码在控制器中,按照ThinkpHp框架约定,可以通过参数A指定对应的函数名,但函数的修饰符必须是公共的,添加的代码正好满足这个条件。
您可以通过以下网址访问它,并且可以添加GET参数arg1并将其传递给函数。
cmfx-master/?a=test _ publicarg1=运行成功
HomeBaseController类中有一些具有公共访问权限的函数,重点是显示函数。根据描述,模板可以通过定义加载,模板路径可以根据契约由$this-parseTemplate函数确定。如果不满足原始合同,匹配将从当前目录开始。
然后调用THinkphpController函数的显示方法
/**
*加载模板和页面输出可以返回输出内容
*@accesspublic
*@paramstring$templateFile模板文件名
* @ paramstring $字符集模板输出字符集
*@paramstring$contentType输出类型
* @ paramstring $内容模板输出
*@returnmixed
*/
public functiondisplay($ templateFile=\' \',$charset=\' \',$contentType=\' \',$content=\' \',$ prefix=\' \'){ 0
parent : display($ this-parseTemplate($ template file),$charset,$contentType,$content,$ prefix);
}
下一步是调用ThinkView的fetch方法,其中TMpL_ENGINE_TYpE为Think,最终的模板内容分析在parseTemplateBehavior中完成
您可以通过如下调用来加载任何文件
http://127 . 0 . 0 . 1:81/cmfx-master/?a=displaytemplateFile=README . MD
动词(verb的缩写)执行漏洞
网站漏洞修复建议
通过这段审计代码发现问题的关键点是修改显示和提取功能的修改器模板功能。如果对程序代码不熟悉,建议联系专业的网站安全公司进行漏洞修复,如SINESAFE、绿盟, 启明星辰,等。许多应用程序调用这个程序的api接口源代码。建议您首先进行全面的网站漏洞检测和渗透测试,提前防范此类攻击带来的危害。