ThinkPHP再爆高危误差 尊龙凯官网入口提供解决计划

宣布时间 2019-01-13
ThinkPHP是一个快速、兼容并且简朴的轻量级国产PHP开发框架,降生于2006年头,原名FCS,2007年元旦正式更名为ThinkPHP,遵照Apache2开源协议宣布,使用面向工具的开发结构和MVC模式,融合了Struts的头脑和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,该框架海内应用很是普遍。

2019年1月11日官方修复了一处严重的误差,该误差可导致远程下令代码执行。

 误差影响版本:

5.0.x-5.0.23

 误差剖析:

误差主要泛起在ThinkPHPRequest类的method要领中,(thinkphp/library/think/Request.php)

Request类可以实现对HTTP请求的一些设置,其中成员要领method用来获取目今请求类型,其界说如下:

尊龙凯时 - 人生就是搏!

thinkphp支持设置“表单伪装变量”,默认情形下该变量值为_method,可以通过“表单伪装变量”举行变量笼罩实现对该类恣意函数的挪用,并且$_POST作为函数的参数传入。

尊龙凯时 - 人生就是搏!

Requset结构函数如下:

尊龙凯时 - 人生就是搏!

因此可以通过结构函数实现对Request类属性举行笼罩,如filter属性。结构如下payload实现远程代码执行:

尊龙凯时 - 人生就是搏!
 
远程代码最终是在filterValue中的call_user_func()执行:

尊龙凯时 - 人生就是搏!

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

在5.0.23 Request类中有个param成员函数用于获取目今请求的参数,也有个method函数:

尊龙凯时 - 人生就是搏!

当传入数值为true时:

尊龙凯时 - 人生就是搏!

跟进到server要领,参数$name为REQUEST_METHOD

尊龙凯时 - 人生就是搏!

$data为上一步的REQUEST_METHOD:

尊龙凯时 - 人生就是搏!

要想触发挪用param(),只要开启了debug模式即可:

尊龙凯时 - 人生就是搏!

故结构payload如下:

尊龙凯时 - 人生就是搏!

前面剖析可知,我们需要触发Request类中的param函数来完成filter的笼罩,在App类中exec()要领中当$dispatch[‘type’]为controller 和method时有直接的挪用:

尊龙凯时 - 人生就是搏!

而url中s的值完成设置差别的$method,最终让routeCheck返回我们需要的$dispath即可。例如结构如下payload,无需debug模式开启也可实现远程代码执行:

尊龙凯时 - 人生就是搏!

 解决计划:

一、官方建议:

    受影响的用户可将5.0.x升级到5.0.24,官方现已推出补丁,建议开发者举行修复:
 
尊龙凯时 - 人生就是搏!



二、产品检测与防护:

已安排尊龙凯官网入口IDS、IPS、WAF产品的客户请确认如下事务规则已经下发并应用,即可有用检测或阻断攻击:HTTP_ThinkPHP5.0全版本远程代码执行误差

(1)天阗入侵检测与管理系统报警截图:

尊龙凯时 - 人生就是搏!

(2)天清入侵防御系统报警截图:

尊龙凯时 - 人生就是搏!

(3)天清Web应用清静网关报警截图:


尊龙凯时 - 人生就是搏!