在對網站程序代碼的安全檢測當中,網站文件任意查看漏洞在整個網站安全報告中屬
於比較高危的網站漏洞,一般網站裡都會含有這種漏洞,尤其平台,商城,交互類的網站較
多一些,像普通權限繞過漏洞,導致的就是可以查看到網站裡的任何一個文件,甚至可以查
看到網站的配置文件config.php conn.php等等。
我們eSafe白帽資安網公司在對gitea開源程序代碼進行網站安全檢測的時候發現存在網站文件任意查
看漏洞,沒有授權的任意一個用戶的賬號都可以越權創建gitea的lfs對象,這個對象通俗來講
就是可以利用gitea代碼裡寫好的第三方api借口,進行訪問,可以實現如下功能:讀取文件,
上傳文件,列目錄等等的一些讀寫分離操作。其中API李的oid是gitea對象的一個值,這個值是
用的哈希,在前端輸入的過程中並沒有對其進行ID值的判斷與安全過濾,導致可以插入任意的
字符傳入到主機的後端中去,導致可以執行查看文件的漏洞。我們來現場還原下網站漏洞的
利用:
看漏洞,沒有授權的任意一個用戶的賬號都可以越權創建gitea的lfs對象,這個對象通俗來講
就是可以利用gitea代碼裡寫好的第三方api借口,進行訪問,可以實現如下功能:讀取文件,
上傳文件,列目錄等等的一些讀寫分離操作。其中API李的oid是gitea對象的一個值,這個值是
用的哈希,在前端輸入的過程中並沒有對其進行ID值的判斷與安全過濾,導致可以插入任意的
字符傳入到主機的後端中去,導致可以執行查看文件的漏洞。我們來現場還原下網站漏洞的
利用:
首先POST數據過去,POST到的地址為 /vulhub文件夾下的repo.git目錄/info/lfs/objects文件。
如下圖:
如下圖:
我們POST數據過去的時候就可以在OID這個值裡插入一些可以查看網站文件的代碼,但是
這個漏洞是需要有前提條件的,就是gitea默認開啟公開訪問,然後在創建gitea對象的時候,
才會產生繞過權限查看文件的漏洞,為什麼說要公開訪問,是因為公開以後,之前創建的
gitea對像才會生效,緊接著檢查當前用戶是否有權限訪問LFS對象。我們看到我們POST發
送數據過去以後,返回來的數據包是200狀態,也就是發送成功,gitea對像已經成功創建了
,我們POST數據裡寫的oid=值是....../../../etc/passwd,這個代碼的意思就是查看系統根目
錄下的etc文件夾下的linux 用戶密碼文件。
這個漏洞是需要有前提條件的,就是gitea默認開啟公開訪問,然後在創建gitea對象的時候,
才會產生繞過權限查看文件的漏洞,為什麼說要公開訪問,是因為公開以後,之前創建的
gitea對像才會生效,緊接著檢查當前用戶是否有權限訪問LFS對象。我們看到我們POST發
送數據過去以後,返回來的數據包是200狀態,也就是發送成功,gitea對像已經成功創建了
,我們POST數據裡寫的oid=值是....../../../etc/passwd,這個代碼的意思就是查看系統根目
錄下的etc文件夾下的linux 用戶密碼文件。
接下來我們就要查看這個/etc/passwd文件裡的內容了,該如何查看這個密碼文件呢? 我們
用get的方式進行提交,我們編輯一下網址:
用get的方式進行提交,我們編輯一下網址:
http://esafe.tw.com/vulhub/repo.git/info/lfs/objects/ [....../../../etc/passwd]/sth,然後打開
chinaz的url編碼工具進行編碼一下,就可以了,我們get提交訪問的時候就查看到了
/etc/passwd文件的內容。
chinaz的url編碼工具進行編碼一下,就可以了,我們get提交訪問的時候就查看到了
/etc/passwd文件的內容。
那麼該網站漏洞是如何產生的呢?
我們來看下gitea的程序源代碼,發現代碼裡的meta.oid值是調用的transformKey函數,這
個函數的作用就是將oid的值轉換成了其他的編碼方式,導致字符裡內容可以隨意寫入,
沒有長度限制,文字限制,當我們POST把oid值改為....../../../etc/passwd的時候就可以直
接調取了這個文件並讀取出來。
個函數的作用就是將oid的值轉換成了其他的編碼方式,導致字符裡內容可以隨意寫入,
沒有長度限制,文字限制,當我們POST把oid值改為....../../../etc/passwd的時候就可以直
接調取了這個文件並讀取出來。
網站漏洞修復建議:
盡快升級gitea的版本,並做好網站安全加固,POST數據包進行安全過濾,有條件的話請部
署get post防火牆,對get post方式提交的數據進行安全過濾,當發現查看系統文件的時候,
比如:/etc/passwd請直接過濾攔截,並返回301狀態。
署get post防火牆,對get post方式提交的數據進行安全過濾,當發現查看系統文件的時候,
比如:/etc/passwd請直接過濾攔截,並返回301狀態。