ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于年初,原名FCS,年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,该框架国内应用非常广泛。
年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()执行:
在