【漏洞预警】ThinkPHP 5多版本远程代码执行漏洞预警

  • 来源:深信服安全中心
  • 发布时间:2018-12-12
#

事件描述

12月9日,ThinkPHP官方团队发布了最新版本的安全修复公告,该版本修复了一处远程代码执行漏洞,该漏洞由于ThinkPHP框架对控制器名没有进行足够的检测,导致在没有开启强制路由的情况下执行任意代码,最终服务器会被GetShell,该漏洞影响ThinkPHP 5.0、ThinkPHP 5.1多个版本。该漏洞利用难度小,但是危害性很大。

千里百科

ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache 2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP 5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块决定。

根据全网数据统计,使用ThinkPHP的网站多达33万余个,其中大部分集中在国内,约占使用量的75%以上。其中,浙江、北京、广东三省使用量最高,下边统计图中展示了ThinkPHP在国内使用量前十的地域。

图片1.png 

图1  ThinkPHP分布图

ThinkPHP的使用范围较广,在政府部门、教育行业、商业用途中,ThinkPHP都备受青睐。由于ThinkPHP使用广泛,并且攻击者利用该漏洞可以在用户服务器上执行任意代码,最终可GetShell,因此此漏洞的影响非常大,应该引起大家的关注。

漏洞分析

本次ThinkPHP 5.0的安全更新主要是在library/think/APP.php文件中增加了对控制器名的限制,而ThinkPHP 5.1的安全更新主要是在library/think/route/dispatch/Module.php文件中增加了对控制器名的限制。所以我们可以知道该漏洞的根源在于框架对控制器名没有进行足够的检测,从而会在未开启强制路由的情况下被引入恶意外部参数,造成远程代码执行漏洞。

图片2.png 图2 ThinkPHP 5.0补丁

图片3.png 

图3 ThinkPHP 5.1补丁

首先在library/think/APP.php中exec()函数,根据路由来加载类:

图片4.png 然后再加载controller时,未对controller名称进行过滤,从而导致攻击者可以通过引入\符号来调用任意类方法。

图片5.png 漏洞复现

1.我们在官网上下载ThinkPHP-5.0.20版本复现漏洞,出现如下首页:

图片6.png 

2.源码中,访问构造好的Payload来执行任意代码:

siteserver/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls -l

3.以上Payload用于执行系统命令显示目录下文件,出现以下页面,漏洞复现成功:

图片7.png

影响版本

ThinkPHP v5.0.23以下版本

ThinkPHP v5.1.31以下版本

参考链接

http://www.vulnspy.com/cn-thinkphp-5.x-rce/thinkphp_5.x_(v5.0.23及v5.1.31以下版本)_远程命令执行漏洞利用(getshell)/

解决方案

修复建议

ThinkPHP 已经针对该漏洞发布了ThinkPHP 5.0安全补丁。

下载地址:https://github.com/top-think/framework/commit/b797d72352e6b4eb0e11b6bc2a2ef25907b7756f

ThinkPHP 已经针对该漏洞发布了ThinkPHP 5.1安全补丁。

下载地址:https://github.com/top-think/framework/commit/802f284bec821a608e7543d91126abc5901b2815

深信服解决方案

深信服安全云在漏洞爆发之初,已完成检测更新,对所有用户网站探测,保障用户安全。不清楚自身业务是否存在漏洞的用户,可注册信服云眼账号,获取30天免费安全体验。

注册地址:http://saas.sangfor.com.cn

深信服下一代防火墙已更新规则防御此漏洞,建议部署深信服下一代防火墙的用户更新到最新规则库,开启安全防护规则,可轻松抵御此高危风险。

深信服云盾已第一时间从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。