JFinalcms程式碼審計

蚁景网安实验室發表於2024-10-14

JFinalCms是開源免費的JAVA企業網站開發建設管理系統,極速開發,動態新增欄位,自定義標籤,動態建立資料庫表並crud資料,資料庫備份、還原,動態新增站點(多站點功能),一鍵生成模板程式碼。

環境佈置:IDEA開啟專案,等待maven載入好。

使用phpstudy整合的mysql5.7資料庫即可,匯入JFinalCMS.sql資料庫。

修改pom檔案:

JFinalcms程式碼審計

使用local9.0.90TOMCAT,JDK環境1.8。

JFinalcms程式碼審計

執行TOMCAT,開啟後臺:

http://localhost:8081/cms_war_exploded/

反射xss:

搜尋/admin/login定位到程式碼塊:

JFinalcms程式碼審計

由上可見,透過getPara獲取賬號密碼後再透過render渲染到前端頁面:

JFinalcms程式碼審計

再分析前端程式碼構造xss進行閉合:

JFinalcms程式碼審計

儲存xss:

前臺存在留言功能,留言會被管理員稽核:

JFinalcms程式碼審計

登入後臺,點選擴充套件管理,留言資訊:

JFinalcms程式碼審計

原理同上。

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

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

Sql注入漏洞(1):

該CMS存在很多處sql注入漏洞,大多數都是以+直接拼接sql注入語句造成,可以全域性搜尋+號尋找注入點。

JFinalcms程式碼審計

找到以上程式碼塊,可以直接看到title引數透過+直接拼接進入sql語句執行,於是我們繼續找前端是呼叫的什麼介面,並看看是否在接受引數時進行了過濾。

搜尋findPage引數:

JFinalcms程式碼審計

可以看到Contentcontroller層中存在title引數,點進去,定位到具體程式碼塊:

JFinalcms程式碼審計

可以看到呼叫了getPara方法獲取傳入的title引數,繼續跟進getPara方法:

JFinalcms程式碼審計

並未重寫該方法,只是簡單獲取引數,未進行任何過濾,回到原來的controller層,向上翻,找到介面呼叫,資料包如下:

POST /cms_war/admin/content/data HTTP/1.1
​
Host: localhost:8081
​
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0)
Gecko/20100101 Firefox/130.0
​
Accept: text/html, \*/\*; q=0.01
​
Accept-Language:
zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
​
Accept-Encoding: gzip, deflate, br
​
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
​
X-Requested-With: XMLHttpRequest
​
Content-Length: 47
​
Origin: http://localhost:8081
​
Connection: keep-alive
​
Referer: http://localhost:8081/cms_war/admin/content
​
Cookie: JSESSIONID=EF8BB53892173B8A4577EFC32D0215BA;
listQuery=categoryId%3D&title%3D&sorts%3D&pageNumber%3D1
​
Sec-Fetch-Dest: empty
​
Sec-Fetch-Mode: cors
​
Sec-Fetch-Site: same-origin
​
Priority: u=0
​
categoryId=&title=%E7%BD%91&sorts=&pageNumber=1

將localhost替換為物理機IP放入sqlmap:

JFinalcms程式碼審計

證明存在sql注入漏洞,其對應前端功能如下:

JFinalcms程式碼審計

Sql注入漏洞(2):

前臺搜尋框處也存在sql注入漏洞,只不過此處的呼叫過程較難找到。

JFinalcms程式碼審計

如上圖搜尋關鍵字search定位到程式碼塊:

JFinalcms程式碼審計

仔細分析如上程式碼,我無法追蹤keyword的具體呼叫。

以上程式碼是透過setAttr方法直接儲存到當前請求的屬性當中。我對keyword處打斷點除錯也未理清楚它後續是如何呼叫的。

於是再換一種思路,直接全域性搜尋keyword:

JFinalcms程式碼審計

定位到具體程式碼,但無法確定是否是呼叫的此處findPage程式碼來構造sql。

搜尋findPage也沒有明確思路。

於是改變思路,由於keyword關鍵字最終是透過模板template渲染呼叫。

JFinalcms程式碼審計

於是在template處挨個點進去找類似功能程式碼:

JFinalcms程式碼審計

最終定位到程式碼塊:

JFinalcms程式碼審計

根據註釋明確此處程式碼是根據不同關鍵詞進行搜尋,包含關鍵詞keyword,繼續檢視keyword呼叫鏈:

JFinalcms程式碼審計

確定是透過呼叫findPage,傳入keyword引數來呼叫資料:

JFinalcms程式碼審計

用sqlmap驗證keyword引數:

JFinalcms程式碼審計

任意檔案讀取:

翻找controller層程式碼,找到檔案下載程式碼塊:

JFinalcms程式碼審計

可見未對傳入的fileKey引數進行過濾,直接拼接進行檔案讀取。

(且我在翻找filter過濾器後,發現似乎 並未對該路徑進行許可權校驗,可進行未授權呼叫介面)

JFinalcms程式碼審計

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

相關文章