ThinkPHP 漏洞5.x远程命令执行漏洞分析与复现


发布人:admin分类:漏洞播报浏览量:516发布时间:2018-12-13

0x00 前言

ThinkPHP官方2018年12月9日发布重要的安全更新,修复了一个严重的远程代码执行漏洞。该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本,推荐尽快更新到最新版本。

0x01 影响范围

5.x < 5.1.31, <= 5.0.23

0x02 漏洞分析

Thinkphp v5.0.x补丁地址: https://github.com/top-think/framework/commit/b797d72352e6b4eb0e11b6bc2a2ef25907b7756f

Thinkphp v5.1.x补丁地址: https://github.com/top-think/framework/commit/802f284bec821a608e7543d91126abc5901b2815

// 是否自动转换控制器和操作名

$convert = is_bool($this->convert) ? $this->convert : $this->rule->getConfig('url_convert');

  // 获取控制器名

 $controller       = strip_tags($result[1] ?: $this->rule->getConfig('default_controller'));

 $controller = strip_tags($result[1] ?: $this->rule->getConfig('default_controller'));

 if (!preg_match('/^[A-Za-z](\w)*$/', $controller)) {

throw new HttpException(404, 'controller not exists:' . $controller);

}

$this->controller = $convert ? strtolower($controller) : $controller;

 // 获取操作名


路由信息中controller的部分进行了过滤,可知问题出现在路由调度时

关键代码:

 

 

在修复之前程序未对控制器进行过滤,导致攻击者可以通过引入\符号来调用任意类方法。

 

 

其中使用了$this->app->controller方法来实例化控制器,然后调用实例中的方法。跟进controller方法:

 

其中通过parseModuleAndClass方法解析出$module和$class,然后实例化$class。

 

 

而parseModuleAndClass方法中,当$name以反斜线\开始时直接将其作为类名。利用命名空间的特点,如果可以控制此处的$name(即路由中的controller部分),那么就可以实例化任何一个类。

接着,我们再往回看路由解析的代码。其中route/dispatch/Url.php:: parseUrl方法调用了route/Rule.php:: parseUrlPath来解析pathinfo中的路由信息

 

 

代码比较简单,就是使用/对$url进行分割,未进行任何过滤。

 

其中的路由url从Request::path()中获取

 

 

由于var_pathinfo的默认配置为s,我们可利用$_GET['s']来传递路由信息,也可利用pathinfo来传递,但测试时windows环境下会将$_SERVER['pathinfo']中的\替换为/。结合前面分析可得初步利用代码如下:index.php?s=index/\namespace\class/method ,这将会实例化\namespace\class类并执行method方法。

 

0x03漏洞利用

docker漏洞环境源码:https://github.com/vulnspy/thinkphp-5.1.29

本地环境:thinkphp5.0.15+php5.6n+ apache2.0

http://www.thinkphp.cn/donate/download/id/1125.html

 

被黑站点统计 - 文章版权1、本主题所有言论和图片纯属会员个人意见,与本文章立场无关
2、本站所有主题由该文章作者发表,该文章作者与被黑站点统计享有文章相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和被黑站点统计的同意
4、文章作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、被黑站点统计管理员有权不事先通知发贴者而删除本文

免责声明

本站主要通过网络搜集国内被黑网站信息,统计分析数据,为部署安全型网络提供强有力的依据.本站所有工作人员均不参与黑站,挂马或赢利性行为,所有数据均为网民提供,提交者不一定是黑站人,所有提交采取不记名,先提交先审核的方式,如有任何疑问请及时与我们联系.

admin  的文章


微信公众号

微信公众号


Copyright © 2012-2022被黑网站统计系统All Rights Reserved
页面总访问量:23306457(PV) 页面执行时间:107.658(MS)
  • xml
  • 网站地图