thinkcmf5.0.180901 远程代码执行漏洞分析

最近thinkcmf爆出了一个后台登录后的远程代码执行漏洞。

非常好奇看了下决定写一个分析过程分析下如何执行代码的。如何搭建环境就不多介绍了,大家可以phpstudy或者xampp,thinkcmf
的源代码可以直接从github或者码云上下载。https://gitee.com/thinkcmf/ThinkCMF/releases/ 历史版本自己找下,下面开始我的分析。
首先先执行下漏洞,安装好后admin身份直接登陆,在后台-设置-url美化-添加url规则,设置内容 原始网址 portal/List/index 显示网址 list/:id’.file_put_contents(‘1.php’,’ thinkcmf5.0.180901 远程代码执行漏洞分析_第1张图片
在去数据库里面搜寻会在表cmf_route里面发现一条一样的记录。
之后在去代码里寻找那个地方触发了漏洞,我们修改刚才的显示网址让他报错list/:id’.file_put_contents(‘1.php’,‘aaa’,’ 然后切换左侧菜单就会报错如下
thinkcmf5.0.180901 远程代码执行漏洞分析_第2张图片
找到文件data/conf/route.php打开查看代码
‘list/:id’.file_put_contents(‘1.php’,‘aaa’,’
array (
0 => ‘portal/List/index’,
1 =>
array (
),
2 =>
array (
‘id’ => ‘\d+’,
),
),
);

发现这里多了我们刚才添加进来的规则,url直接用.拼接起来,在php里面这样会直接执行内部的代码就导致触发了远程的代码直接漏洞。
那到底是什么时候触发呢,这就和cms采用的thinkphp框架有关了。
我们在用phpstorm加载目录下的代码,直接分开下断看什么时候结束
最后发现断在了这里thinkcmf5.0.180901 远程代码执行漏洞分析_第3张图片
框架在初始化的时候会去加载规则,而thinkcmf把规则设置成了可以后台添加并且保存到数据库,之后在从数据库读取加载,加载的时候没有严格过滤导致了框架加载的时候include直接执行了。到这里一切思路就变得清楚了。由于要后台登陆修改就显得这个漏洞变得有点鸡肋了,不如thinkphp5最近爆出的直接远程代码执行漏洞来的直接。就当做练习吧。

你可能感兴趣的:(web代码审计)