某個OA系統的程式碼審計

蚁景网安实验室發表於2024-07-24

2023年HVV中爆出來的洞了,但是有一些漏洞點修復了,剛好地市級的攻防演練中遇到了一個,想著把可能出現問題的點全部審計一下,順便熟悉一下.net程式碼審計。ps:感興趣的師傅們可以自行根據poc搜尋原始碼。

0x1 反編譯

好吧,當我沒說,下載dnspy反編譯即可,但是首先要找到web邏輯程式碼才能開始審計,因為這套oa是使用了mvc開發模式,簡單介紹一下mvc,其實就是model,controller,view,其中的view是檢視也就是html等展示給使用者看的東西,model是模型也就是控制資料庫的程式碼。controller是控制器負責執行程式碼的邏輯,也就是我們需要審計的地方了。

某個OA系統的程式碼審計

某個OA系統的程式碼審計

然後找到controller就是web的主要邏輯了。

某個OA系統的程式碼審計

0x2 身份校驗繞過

首先可以隨便點入一個controller,發現filesController繼承自TopVisionApi。

某個OA系統的程式碼審計

然後我們發現IsAuthorityCheck()這個函式用於判斷許可權。

某個OA系統的程式碼審計

首先看到第一行程式碼getByValue這個函式,其實Request.Properties["MS_HttpContext"]).Request[value]就是獲取http請求中的某個引數,而value就是呼叫傳過來的引數,在這裡是token,那麼這段程式碼就是獲取http中的token引數。

某個OA系統的程式碼審計

然後if判斷了token是不是空值然後再判斷token引數的值是不是等於"zxh",如果登入則直接返回一個UserInfo物件。

某個OA系統的程式碼審計

然後回到filesController的身份判斷,發現只判斷了IsAuthorityCheck返回是否為null,所以只需要讓token引數是zxh的時候,那麼就可以繞過身份校驗了。

某個OA系統的程式碼審計

0x3 任意檔案下載

還是 filesController 這個控制器 DownloadRptFile方法。這時我們已經繞過了身份認證,所以只需要看之後程式碼即可。requestFileName就是我們傳遞的http引數,

某個OA系統的程式碼審計

然後跟進程式碼。並未發現任何過濾../的行為,直接傳遞給getBinaryFile函式

某個OA系統的程式碼審計

getBinaryFile函式如下。

某個OA系統的程式碼審計

結果證明: (讀取檔案內容會以base64返回)

某個OA系統的程式碼審計

0x4 資訊洩露

發現GetCurrentUserList方法查詢了所有使用者資訊。並且返回給前臺。

某個OA系統的程式碼審計

<UserInfo>是c#中的泛型,這裡是用來查詢資料庫的。可以看到遍歷了dicUserList這個陣列。這個陣列就是初始化的使用者資訊陣列了。

某個OA系統的程式碼審計

直接訪問:

某個OA系統的程式碼審計

0x5 任意檔案刪除

發現DeleteFile2方法是一個刪除檔案方法。這裡也沒有發現過濾../以及過濾刪除檔案的字尾名。

某個OA系統的程式碼審計

雖然是有限制了檔案路徑,但是全然沒有過濾../,而且filename引數也是完全可控的。所以這裡其實是存在任意檔案刪除漏洞的。

某個OA系統的程式碼審計

某個OA系統的程式碼審計

ps: 這裡就不放驗證截圖了,感興趣的師傅們可以自行本地驗證。

【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “部落格園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

0x6 任意檔案上傳

UploadFile2方法中獲取了各種引數,然後傳入UploadFile2

某個OA系統的程式碼審計

跟進該方法。pathType就是限制檔案上傳到哪個資料夾的。

某個OA系統的程式碼審計

pathType詳解:

某個OA系統的程式碼審計

fs引數是我們傳遞的byte陣列也就是檔案的內容。

startPoint等於0就好這樣才能建立一個新的檔案,datasize則是陣列的長度。

某個OA系統的程式碼審計

漏洞驗證:

某個OA系統的程式碼審計

0x7 SQL隱碼攻擊

InventoryController的GetProductInv方法,直接從引數獲取boxNoName未經過過濾直接透過string.Format拼接至sql語句中,導致了sql注入。

某個OA系統的程式碼審計

驗證:直接sqlmap即可

某個OA系統的程式碼審計

某個OA系統的程式碼審計

更多網安技能的線上實操練習,請點選這裡>>

相關文章