Drupal 遠程代碼執行漏洞(CVE-2019-6339)
一、漏洞介紹
Drupal core是Drupal社區所維護的一套用PHP語言開發的免費、開源的內容管理系統。
Drupal core 7.62之前的7.x版本、8.6.6之前的8.6.x版本和8.5.9之前的8.5.x版本中的內置phar stream wrapper(PHP)存在遠程代碼執行漏洞。遠程攻擊者可利用該漏洞執行任意的php代碼。
二、漏洞危害
遠程代碼執行。
三、漏洞驗證
環境搭建:
實驗環境 | 系統 | IP地址 |
---|---|---|
攻擊機 | win10 | 192.168.18.7 |
靶機 | win10 | 192.168.18.7:8088 |
這裏我使用Vulhub搭建環境:
執行如下命令啓動drupal 8.5.0的環境:bash docker-compose up -d
環境啓動後,訪問
http://your-ip:8088/
(這裏我修改了配置文件,默認是8080端口)
將會看到drupal的安裝頁面,一路默認配置下一步安裝。因爲沒有mysql環境,所以安裝的時候可以選擇sqlite數據庫。
安裝成功後如圖所示:
如下圖所示,先使用管理員用戶上傳頭像,頭像圖片爲構造好的 PoC,參考thezdi/PoC的PoC。
Drupal 的圖片默認存儲位置爲 /sites/default/files/pictures/<YYYY-MM>/
,默認存儲名稱爲其原來的名稱,所以之後在利用漏洞時,可以知道上傳後的圖片的具體位置。
訪問 http://127.0.0.1:8088/admin/config/media/file-system
,在 Temporary directory
處輸入之前上傳的圖片路徑, phar://./sites/default/files/pictures/2020-07/blog-ZDI-CAN-7232-cat.jpg
,保存後將觸發該漏洞。如下圖所示,觸發成功。
看一下POC,
修改一下執行命令,比如ls -al
,此時是6個字節數,要把s對應的字節數目改成6:
在Drupal的機制中,設定了這樣一條規則:
用戶上傳的圖片文件名將會被保留,如果出現文件名相同的情況,那麼文件名後面就會被跟上_0,_1依次遞增。
再次上傳,在 Temporary directory
處輸入新的上傳的圖片路徑, phar://./sites/default/files/pictures/2020-07/blog-ZDI-CAN-7232-cat_0.jpg
,觸發成功。
遺留問題:嘗試反彈shell失敗。
四、漏洞修復
目前廠商已發佈升級補丁以修復漏洞,補丁獲取鏈接:
https://www.drupal.org/sa-core-2019-002
參考鏈接:
https://vulhub.org/#/environments/drupal/CVE-2019-6339/
https://paper.seebug.org/897/