【漏洞预警】ThinkPHP 5.0.* 远程代码执行漏洞预警

  • 来源:深信服安全中心
  • 发布时间:2019-01-24
#

事件描述

2019年1月11日,某安全团队发布了一篇ThinkPHP 5.0.*远程代码执行漏洞文档,该漏洞主要存在于Request (thinkphp/library/think/Request.php)类中,ThinkPHP 5.0.24以下版本由于在此类中未做好安全过滤,导致了一个ThinkPHP 5.0.*远程代码执行漏洞。

千里百科

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,因此此漏洞的影响非常大,应该引起大家的关注。

漏洞分析

该漏洞主要存在于Request (thinkphp/library/think/Request.php)类中,我们通过动态调试跟踪一下:

图片2.png 

首先在thinkphp\library\think\App.php的App类中的run()函数里,如开启了debug模式,就会在ThinkPHP中实现日志的记录,其中有调用$request->param()。

图片3.png 

在Request (thinkphp/library/think/Request.php)类中,存在param成员函数用于获取当前请求的参数。其中也有调用method()函数,并且传入参数值为true,当传入的$method === true时 会执行server()。

图片4.png 

由此可见,参数$name为REQUEST_METHOD,最终会调用input函数。input函数实现如下。最终会执行到$filter = $this->getFilter($filter,$default);

图片5.png 

来解析过滤器此时$filter 为‘’,$default为null。继续跟进查看getFilter函数的实现:

图片6.png 

最终会通过call_user_func来实现代码执行。此处原理同刚刚爆出的THINKPHP 5 通过控制controller值实现反射调用指定类来远程代码执行漏洞原理一致,不再过多分析。

在官网最新下载的5.0.23完整版中,在App类(thinkphp/library/think/App.php)中module方法增加了设置filter参数值的代码,用于初始化filter。因此通过上述请求设置的filter参数值会被重新覆盖为空导致无法利用。

图片7.png 

漏洞复现

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

图片8.png 

2.然后访问构造好的Payload来执行任意代码:

微信截图_20190124150008.png

3.以上Payload用于执行系统命令显示主机名称,出现以下页面,漏洞复现成功:

图片9.png 

影响版本

ThinkPHP v5.0.24以下版本

修复建议

ThinkPHP5官方已经在 github更新了补丁,下载地址:

https://github.com/top-think/framework/commit/4a4b5e64fa4c46f851b4004005bff5f3196de003

深信服解决方案

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

注册地址:

http://saas.sangfor.com.cn

 

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

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