CVE-2019-9081 Laravel v5.7反序列化RCE漏洞復現
- 2019 年 10 月 6 日
- 筆記
0X1 漏洞概述
最近在復現一些AWD線下賽環境,恰好看見有大佬放出的QWB的一道關於Laravel v5.7的反序列化漏洞的利用過程文章。今天特地將此CVE-2019-9081漏洞還原復現。
Laravel v5.7是一款基於php 7.1.3之上運行的優秀php開發框架,5.7.x版本中的Illuminate組件存在反序列化漏洞。
0X2 環境搭建
Laravel通過composer安裝搭建。在此我們直接選擇比賽時的源碼環境進行本地運行,使用環境配置如下:
系統:Ubuntu16.04 PHP:PHP7.3 HTTP:Apache2
開啟Apache2之後,將PHP切換到PHP7.3,因為7.2編譯過程沒有使用OpenSSL,所以後續會報錯,因此下載源碼包安裝了最新的PHP7.3,所以使用命令如下:
#禁用Apache中的PHP7.2 sudo a2dismod php7.2 #啟用PHP7.2 sudo a2enmod php7.3
接下來使用命令:php7.3 artisan serve啟動服務測試:

在瀏覽器中可以訪問證明環境ok。
漏洞發現作者已經在routes/web.php中添加一條路由:
Route::get('/index', 'TaskController@index');

接下來在app/Http/Controllers
文件夾下創建文件TaskController.php
,源碼如下:

通過上一條路由我們在訪問入口文件即可連接過來。
0X3 漏洞利用
漏洞分析過程在此不再贅述,具體詳情可查看原作者部落格。我們通過瀏覽器訪問環境
http://172.16.1.137/laravel-5.7/public/index.php/index?code
其中code參數的值就是我們要傳入的反序列化程式碼。如下圖所示,根據漏洞出處的組件跟蹤漏洞位置在__destruct()函數中。

貼出作者給的exp腳本:

然後利用該腳本生成反序列化數據:

運行該腳本得到數據,如下圖所示。

訪問剛才的連接,傳入反序列化exp數據值,如下圖所示,得到結果:

漏洞利用成功!
0X4 漏洞修復
刪除__destruct中的$this->run()程式碼段即可。
0X5 參考文章
https://xz.aliyun.com/t/5510
https://laworigin.github.io/2019/02/21/laravelv5-7%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96rce/