1. 程式人生 > 其它 >Gitlab CVE-2018-14364 壓縮包上傳getshell 漏洞復現分析

Gitlab CVE-2018-14364 壓縮包上傳getshell 漏洞復現分析

0x00 前言

該漏洞屬於登入後的任意檔案寫入漏洞,該漏洞可以通過寫入公鑰復現該漏洞需要注意版本問題,一開始用vulhub起的環境發現復現不了,於是到網上找了一個docker映象搭建起來才復現成功。

0x01 漏洞復現

首先搭建環境,不建議手動從頭搭起,除了gitlab以外還有其他元件,相對麻煩,這裡可以直接藉助docker上的image進行搭建。

//拉取映象
sudo docker pull gitlab/gitlab-ce:11.0.3
//對映同期埠80到本地的10081
docker run -d -p 10081:80 beginor/gitlab-ce:11.0.1-ce.0

訪問10081埠,並設定密碼,設定完成後,進入登入,使用“root/剛剛設定的密碼”進行登入

新建專案

選擇匯入專案

選擇從gitlab export匯入

選擇生成步驟一中的壓縮包1,專案名稱填一個新的名稱,這裡為test2,選擇匯入專案

選擇刪除該專案

再次按照上面的步驟新建專案匯入

填入跟上面的步驟同名的專案名test2,並匯入第二個壓縮包,選擇匯入專案

可以看到該檔案已被寫入

0x02 漏洞分析

關鍵漏洞修補程式碼地址,如下。在匯入gitlab壓縮包之後,走這個流程

接著會試圖解壓該壓縮包並檢查壓縮包中的內容是否存在軟連結並刪除軟連結

該匹配的正則表示式為

$符號表示匹配到一行的最末尾,該表示式被繞過,若以\n開頭也是末尾,而\n表示換行放開軟連結名字的開頭,則該軟連結不被列出進行檢測。

第一步上傳為上傳包含軟連結的壓縮包,解壓後該壓縮包中的軟連結指向gitliab根目錄

第二部上傳檔案解壓後解壓到軟連結當中,而軟體連結指向安裝的根目錄,則會重定下至固定目錄。

0x03 參考

https://xz.aliyun.com/t/2661

https://gitlab.com/gitlab-org/gitlab-foss/-/compare/v11.0.3...v11.0.4

https://segmentfault.com/a/1190000021593151