Gogs任意使用者登入漏洞實例分析
一、 漏洞背景
Gogs 是一款類似GitHub的開源檔案/程式碼管理系統(基於Git),Gogs 的目標是打造一個最簡單、最快、最輕鬆的方式來搭建自助Git服務。使用 Go 語言開發使得 Gogs 能夠透過獨立的二進位分發,並且支援 Go 語言支援的 所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。
二、 漏洞描述
gogs是一款極易搭建的自助Git服務平台,具有易於安裝、跨平台、輕量級等特點,使用者眾多。其0.11.66及以前版本中,(go-macaron/session庫)沒有對sessionid進行校驗,攻擊者利用惡意sessionid即可讀取任意文件,透過控製文件內容來控制session內容,進而登入任意帳戶。
三、 影響版本
影響版本如下:
Gogs 0.11.66及之前的版本
四、 漏洞重複
(1) 利用ubuntu虛擬機器docker克隆vulhub上gogs環境
(2) 執行下列指令啟動gogs:docker-compose up -d
(3) 環境啟動後,存取http: //192.168.49.103:3000/install,即可看到安裝頁面。安裝時選擇sqlite資料庫,並開啟註冊功能。
(4)使用Gob序列化產生session檔案data。
(5)然後註冊一個普通使用者帳戶,建立項目,並在「版本發布」頁面上傳剛產生的session檔案。
(6)透過這個附件的URL,得知這個文件的檔案名稱:./attachments/2eb7f1a2-b5ec-482e-a297-15b625d24a10。然後,建構Cookie:i_like_gogits=../attachments/2/e/2eb7f1a2-b5ec-482e-a297-15b625d24a10,造訪即可發現已成功登入id=1的使用者(即root管理員)
#五、 漏洞分析利用
首先, 對於每個使用者, 我們都可以建立倉庫, 透過release功能可以上傳任意內容可控的檔案, 從而為我們偽造session文件提供了條件.
透過explore功能, 我們能找到很多用戶的倉庫, 進入某用戶的用戶資料頁面, 我們可以得到構造該用戶session的所有需要的資料(uid, username).
透過上方file.go的程式碼, 我們發現, session檔案的內容為Gob編碼方式, 借鑒P牛寫的生成session的payload。
由此, 我們可以產生一段session, 透過每個使用者皆可使用的release上傳功能, 我們將我們偽造的session上傳至伺服器。
預設配置的gogs,release中檔案存放的目錄結構是attachments/fid[0]/fid[1]/fid。 session存放的目錄結構是sessions/sid[0]/sid[1]/sid。此外sessions與attachments資料夾均存放在相同的data資料夾下。
因為gogs會將session分段, 建構成最終的路徑後再進行讀取, 而attachments與session在同一資料夾下, 修改session為我們剛剛上傳的檔案的路徑, 即../attachments/1/7/17f4120b-1a0d-416a-b0b0-def4342ded5b, session的函數將路徑解析為sessions/././../attachments/1/7/17f4120b -1a0d-416a-b0b0-def4342ded5b也就是我們上傳的那個檔案, 最終完成任意使用者登陸。
六、 修復建議
Gogs可至Github下載編譯develop分支,在該分支中此漏洞已修復,或升級至最新版本的Gogs。
以上是Gogs任意使用者登入漏洞實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)
