JFinalCms是開源免費的JAVA企業網站開發建設管理系統,極速開發,動態新增欄位,自定義標籤,動態建立資料庫表並crud資料,資料庫備份、還原,動態新增站點(多站點功能),一鍵生成模板程式碼。
環境佈置:IDEA開啟專案,等待maven載入好。
使用phpstudy整合的mysql5.7資料庫即可,匯入JFinalCMS.sql資料庫。
修改pom檔案:
使用local9.0.90TOMCAT,JDK環境1.8。
執行TOMCAT,開啟後臺:
http://localhost:8081/cms_war_exploded/
反射xss:
搜尋/admin/login定位到程式碼塊:
由上可見,透過getPara獲取賬號密碼後再透過render渲染到前端頁面:
再分析前端程式碼構造xss進行閉合:
儲存xss:
前臺存在留言功能,留言會被管理員稽核:
登入後臺,點選擴充套件管理,留言資訊:
原理同上。
【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “部落格園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)
Sql注入漏洞(1):
該CMS存在很多處sql注入漏洞,大多數都是以+直接拼接sql注入語句造成,可以全域性搜尋+號尋找注入點。
找到以上程式碼塊,可以直接看到title引數透過+直接拼接進入sql語句執行,於是我們繼續找前端是呼叫的什麼介面,並看看是否在接受引數時進行了過濾。
搜尋findPage引數:
可以看到Contentcontroller層中存在title引數,點進去,定位到具體程式碼塊:
可以看到呼叫了getPara方法獲取傳入的title引數,繼續跟進getPara方法:
並未重寫該方法,只是簡單獲取引數,未進行任何過濾,回到原來的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:
證明存在sql注入漏洞,其對應前端功能如下:
Sql注入漏洞(2):
前臺搜尋框處也存在sql注入漏洞,只不過此處的呼叫過程較難找到。
如上圖搜尋關鍵字search定位到程式碼塊:
仔細分析如上程式碼,我無法追蹤keyword的具體呼叫。
以上程式碼是透過setAttr方法直接儲存到當前請求的屬性當中。我對keyword處打斷點除錯也未理清楚它後續是如何呼叫的。
於是再換一種思路,直接全域性搜尋keyword:
定位到具體程式碼,但無法確定是否是呼叫的此處findPage程式碼來構造sql。
搜尋findPage也沒有明確思路。
於是改變思路,由於keyword關鍵字最終是透過模板template渲染呼叫。
於是在template處挨個點進去找類似功能程式碼:
最終定位到程式碼塊:
根據註釋明確此處程式碼是根據不同關鍵詞進行搜尋,包含關鍵詞keyword,繼續檢視keyword呼叫鏈:
確定是透過呼叫findPage,傳入keyword引數來呼叫資料:
用sqlmap驗證keyword引數:
任意檔案讀取:
翻找controller層程式碼,找到檔案下載程式碼塊:
可見未對傳入的fileKey引數進行過濾,直接拼接進行檔案讀取。
(且我在翻找filter過濾器後,發現似乎 並未對該路徑進行許可權校驗,可進行未授權呼叫介面)
更多網安技能的線上實操練習,請點選這裡>>