代碼審計之CVE-2021-40881
Simon2021-09-26 15:11:10
cms采用ssh搭建,沒有引入太多的外部插件,所以感覺還比較適合練手(主要是還 有github千星)。稍微總結一下審計的過程吧。注入類的漏洞因為采用的hibernate ,所以沒怎么關注,看了一下處理流程就過了。xss開始挖掘了一點,對于實體編碼 處理的還挺好有模有樣,用戶又好。文件上傳白名單,包括刪除新建等都沒法路徑 穿越,最后終于在默認腳本文件里rce了。不想看前邊的可以直接跳到rce,前面 都是一些我挖掘過程中對代碼流程的分析。

(1)系統安裝數據庫

這里的話想看看有無漏洞,同時也對流程分析下,便于以后理解。 步驟解讀 (1)獲取版本號 (2)獲取step,是用來判斷進行到了哪一步的。(第一步判斷了是否已安裝,安裝 了會生成一個文件,所以正常來說重裝漏洞可能不存在除非可以配合文件刪除刪除 重裝文件。。) (3)根據不同的步驟進行不同的操作。(這里在配置數據庫看的) (4)根據傳入的host,port等參數進行了數據庫連接。 (5)初始化數據庫,完成安裝。暫時沒發現啥問題,粗略的看了。

按照經驗,淦后臺,懟。流程還是解讀一下。這里登錄的流程看到了順便記錄下 (1)判斷傳入的用戶名等是否為空(密碼是做了加密處理的) (2)判斷傳入的用戶是否存在 (3)判斷密碼用戶是否正確 (4)判斷跳轉的url是否危險 中間還有一些雜七雜八加authtoken的暫時沒用上就沒跟,看看對url的處理 不能為空,不能包含回車換行,如果包含了://則做進一步的判斷。,其中算是設置 了白名單只能系統相關的幾個地址可以訪問。


emm,這種后面要加目錄的話,基本是沒戲了。要想利用這個做@跳轉也不行。


看一下文件上傳 這里判斷了文件名有無正反斜杠/\,有的話截取最后一個斜杠后面的內容,否則直接返回文件名。 然后進一步判斷了文件名中是否存在.,截取后綴名,白名單取后綴名,有zip和 excle我們關注下可能會有用。excle可以做csv注入用作釣魚,但是實戰中感覺用 處不大。學習為主,整個流程還是分析一下,重新傳一個zip



有點麻煩,時間+隨機數生成的文件名,前面路徑并且寫死了,路徑也不可控。然后 新生成了一個file,進行上傳。中間想直接利用感覺沒有太多的突破口了。



rce(CVE-2021-40881)
準確來說,只能在默認配置rce,但是比較驚喜的是,一般來說這種倉庫的bat腳本 安裝了應該是不會更改命令相關的。所以如果是默認安裝,利用自帶的bat腳本就能 直接rce。總體來說還是對傳入的參數沒有做限制。看看細節,關鍵代碼粘貼下來了。

大概解讀一下,流程是這樣子。系統默認有一個和倉庫有關的腳本文件sync.bat, 然后這里判斷傳入的commend也就是腳本的執行文件寫死了必須要sync.bat這幾個字 忽略大小寫匹配。所以這里做目錄穿越不行,直接寫死了。最近目錄穿越挖的多才開 始沒反應過來。想找一處能過上傳做目錄穿越的想的傳到這下面看看能不能覆蓋。可 惜很多地方都是重命名名字不可控。后來又想著能不能利用bat腳本直接執行系統命 令。這條路還是走活了。repo能直接帶入并且是可以回顯的。看下payload+執行效 果吧。

模板
看一下模板的功能,都過一下。 (1)判斷傳入的file是否為空 (2)獲取文件名,文件路徑,然后生成一個新的文件(這里可能存在競爭,但是有 前車之鑒,可能不會解析。就先不下定論)(3)如果是zip,就解壓(等下試試自 解壓) (4)如果不是,就走else下面的,重新new一個模板。


看一下,對文件路徑做了處理,不能包含..

直接上傳的當成文本處理了不能解析。又沒有跨目錄傳文件。沒啥用了啊。文件刪除 也是一個樣子,沒法跳目錄。和我們上次挖的文件讀取和刪除不同,這里定義了根 目錄,只能向下,而tmp目錄下都能刪除,并且沒啥敏感的。這個無用。后續計劃任 務的一些上傳也是參考了這里過濾,想要配合我們前面的rce實現全能rce目前還是 不行。
本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
Simon
暫無描述