ThinkPHP再爆高危缝隙 宝运莱官方网站提供解决规划
颁布功夫 2019-01-132019年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利用安全网关报警截图:



京公网安备11010802024551号