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/