2023年HVV中爆出來的洞了,但是有一些漏洞點修復了,剛好地市級的攻防演練中遇到了一個,想著把可能出現問題的點全部審計一下,順便熟悉一下.net程式碼審計。ps:感興趣的師傅們可以自行根據poc搜尋原始碼。
0x1 反編譯
好吧,當我沒說,下載dnspy反編譯即可,但是首先要找到web邏輯程式碼才能開始審計,因為這套oa是使用了mvc開發模式,簡單介紹一下mvc,其實就是model,controller,view,其中的view是檢視也就是html等展示給使用者看的東西,model是模型也就是控制資料庫的程式碼。controller是控制器負責執行程式碼的邏輯,也就是我們需要審計的地方了。
然後找到controller就是web的主要邏輯了。
0x2 身份校驗繞過
首先可以隨便點入一個controller,發現filesController繼承自TopVisionApi。
然後我們發現IsAuthorityCheck()這個函式用於判斷許可權。
首先看到第一行程式碼getByValue這個函式,其實Request.Properties["MS_HttpContext"]).Request[value]就是獲取http請求中的某個引數,而value就是呼叫傳過來的引數,在這裡是token,那麼這段程式碼就是獲取http中的token引數。
然後if判斷了token是不是空值然後再判斷token引數的值是不是等於"zxh",如果登入則直接返回一個UserInfo物件。
然後回到filesController的身份判斷,發現只判斷了IsAuthorityCheck返回是否為null,所以只需要讓token引數是zxh的時候,那麼就可以繞過身份校驗了。
0x3 任意檔案下載
還是 filesController 這個控制器 DownloadRptFile方法。這時我們已經繞過了身份認證,所以只需要看之後程式碼即可。requestFileName就是我們傳遞的http引數,
然後跟進程式碼。並未發現任何過濾../的行為,直接傳遞給getBinaryFile函式
getBinaryFile函式如下。
結果證明: (讀取檔案內容會以base64返回)
0x4 資訊洩露
發現GetCurrentUserList方法查詢了所有使用者資訊。並且返回給前臺。
<UserInfo>是c#中的泛型,這裡是用來查詢資料庫的。可以看到遍歷了dicUserList這個陣列。這個陣列就是初始化的使用者資訊陣列了。
直接訪問:
0x5 任意檔案刪除
發現DeleteFile2方法是一個刪除檔案方法。這裡也沒有發現過濾../以及過濾刪除檔案的字尾名。
雖然是有限制了檔案路徑,但是全然沒有過濾../,而且filename引數也是完全可控的。所以這裡其實是存在任意檔案刪除漏洞的。
ps: 這裡就不放驗證截圖了,感興趣的師傅們可以自行本地驗證。
【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “部落格園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)
0x6 任意檔案上傳
UploadFile2方法中獲取了各種引數,然後傳入UploadFile2
跟進該方法。pathType就是限制檔案上傳到哪個資料夾的。
pathType詳解:
fs引數是我們傳遞的byte陣列也就是檔案的內容。
startPoint等於0就好這樣才能建立一個新的檔案,datasize則是陣列的長度。
漏洞驗證:
0x7 SQL隱碼攻擊
InventoryController的GetProductInv方法,直接從引數獲取boxNoName未經過過濾直接透過string.Format拼接至sql語句中,導致了sql注入。
驗證:直接sqlmap即可
更多網安技能的線上實操練習,請點選這裡>>