Laravel 5.7反序列化漏洞(CVE-2019-9081+2020第五空间题解)

动态调试的过程中可以看到 Kernel::class
中的值是 Illuminate\Contracts\Console\Kernel
。而对应的 $app = $this->app[Kernel::class];
代码在执行时会抛出异常,所以我们要跟进这个部分。继续跟进之后到达 vendor/laravel/framework/src/Illuminate/Container/Container.php
文件中。我在动态分析的时候发现 Illuminate\Container\Container
类中调用的是 Illuminate\Container\BoundMethod
call
静态方法。还有别忘了 Illuminate\Foundation\Application
类继承的是 Illuminate\Container\Container
类的call方法。所以我们要继续往下跟。

继续跟进之后可以看到一个关键函数 call_user_func_array
。继续跟进 getMethodDependencies
函数。该函数返回的是 $dependencies
数组和 $parameters
的合并数据,其中 $dependencies
默认为空数组,而 $parameters
为可控数据。

再加上此处 $callback
的值就是我们可控的值 system
,因此此处的实际形式为 call_user_func_array(可控数据,可控数据)
,可以构成任意代码执行。最终构造的POP链如下: