攻防世界中习题
可知其为thinkphp5的远程代码执行漏洞,通过查阅资料可知
由于ThinkPHP5框架对控制器名没有进行足够的安全检测,导致在没有开启强制路由的情况下,黑客构造特定的请求,可直接GetWebShell。
影响版本
ThinkPHP 5.0系列 < 5.0.23
ThinkPHP 5.1系列 < 5.1.31
相关代码
think\Container在tp运行的时候就会被加载。使用think\Container这个字符串实例化控制器的时候就会实例化Container这个类,下一步是去调用invokeFunction这个函数。
public static function invokeFunction($function, $vars = [])
{
$reflect = new \ReflectionFunction($function);
$args = self::bindParams($reflect, $vars);
// 记录执行信息
self::$debug && Log::record('[ RUN ] ' . $reflect->__toString(), 'inf