*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。
*本文作者:小纨绔,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
ThinkPHP 5.0 版本是一个颠覆和重构版本,也是ThinkPHP 十周年献礼版本,基于 PHP5.4 设计(完美支持 PHP7 ),采用全新的架构思想,引入了很多的 PHP 新特性,优化了核心,减少了依赖,支持Composer ,实现了真正的惰性加载,并且为 API 开发做了深入的支持,在功能、性能以及灵活性方面都较为突出 。
漏洞描述
ThinkPHP5.0在核心代码中实现了表单请求类型伪装的功能,该功能利用$_POST['_method']变量来传递真实的请求方法,当攻击者设置$_POST['_method']=__construct时,Request类的method方法便会将该类的变量进行覆盖,攻击者利用该方式将filter变量覆盖为system等函数名,当内部进行参数过滤时便会进行执行任意命令。
影响范围
ThinkPHP 5.0.0 ~ ThinkPHP 5.0.23
什么是表单请求类型伪装
如上表单,可以在POST表单里面提交_method变量,传入需要伪装的请求类型 ,该请求从客户端看来是POST请求,而服务器会将该请求识别PUT请求并进行处理,其中变量_method可以在application\config.php文件中进行修改。// 表单请求类型伪装变量
'var_method' &#