Jfinal cms采用Java語言開發,官方代碼倉庫為:https://gitee.com/jflyfox/jfinal_cms。
Jfinal cms前台評論處存在XSS漏洞,以v4.6版本為例,下面是簡單的漏洞分析。
首先來看如何利用此漏洞。
第一步:填寫payload
在新聞評論的地方填寫如下payload:abcd<img src="/xswv.png" onerror="alert('OK')"></span><span>
第二步:提交內容
點擊“發布”按鈕。
第三步:觸發漏洞
刷新頁面即可看到彈窗提示。
接下來是代碼分析:
根據BurpSuite抓包來看,提交評論時訪問的URL為:http://xxx.abcde.com/front/comment/save,根據此路徑可以快速定位到CommentController.java文件。
該文件是CommentController類,CommentController類有個save方法,我們具體來看save方法的代碼。
在save方法中先做了一些權限判斷,沒有登錄的用戶不能添加評論。然后調用CommentService對象的saveComment方法來保存用戶的評論。
我們跳轉到CommentService.java文件查看saveComment方法的具體代碼。
saveComment方法首先調用JFlyFoxUtils對象的delScriptTag方法對評論內容進行安全過濾,然后再將評論存儲到數據庫中。
從delScriptTag這個名字我們大概就能猜到該方法的作用是刪除script標簽。
我們再接着看delScriptTag方法:
該方法進行兩次正則表達式替換,第一次是替換掉<script></script>標簽,第二次是替換掉<style></style>標簽。但是該方法並沒有過濾掉其他html標簽,例如:img標簽。所以我們可以利用img標簽的onerror事件觸發XSS漏洞。
至此,該XSS漏洞的原因已經找到了,就是因為后端代碼對用戶輸入的內容過濾不完善導致的。