您好,登錄后才能下訂單哦!
這篇文章主要為大家分析了Gogs任意用戶登錄漏洞實例分析的相關知識點,內容詳細易懂,操作細節合理,具有一定參考價值。如果感興趣的話,不妨跟著跟隨小編一起來看看,下面跟著小編一起深入學習“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任意用戶登錄漏洞實例分析”就介紹到這了,更多相關內容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請多多支持億速云網站!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。