1 漏洞标题
ThinkPHP5远程代码执行漏洞
2 漏洞描述
ThinkPHP 是一个快速、兼容而且简单的轻量级国产 PHP 开发框架。ThinkPHP 从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。
近日,ThinkPHP 官方发布了安全更新,其中修复了存在 ThinkPHP 5.0.0 ~ 5.0.23 版本中的远程代码执行漏洞:
https://blog.thinkphp.cn/910675
3 漏洞属性
【漏洞评级】高危
【影响范围】ThinkPHP 5.0.x
4 漏洞检测与确认
本文主要以官网下载的5.0.X 完整版(thinkphp_5.0.23_with_extend.zip)为例分析
Thinkphp处理请求的关键类为
Request(thinkphp/library/think/Request.php)
该类可以实现对HTTP请求的一些设置。
其中成员函数method用来获取当前请求类型,其定义如下:
该函数主要在其他成员函数(例如isGet、isPost、isPut等)中被用来做请求类型判断
thinkphp支持配置“表单伪装变量”,默认情况下该变量值为_method
因此在method()中,可以通过“表单伪装变量”进行变量覆盖实现对该类任意函数的调用,并且$_POST作为函数的参数传入。
Request类的构造函数定义如下: