JavaEE論壇2.0審計記錄
00×1 前言
畢業設計臨近啊~ 要檢查了~ 趕緊去網上扣了幾套SSM的論壇程式。順手就審計了一下。
源程式下載地址: ofollow,noindex" target="_blank">http://www.mycodes.net/143/9369.htm
審計出來之後就趕緊跑去官網測試。誰知道,不能註冊。於是找了其他的站點進行了復現~
00×2 前臺儲存xss
這個是黑盒測試出來的,因為用了Ueditor的富文字編輯器。然後直接構造了payload,導致帖子正文xss
直接發帖->將富文字切換為HTML原始碼編輯->發帖->檢視帖子->觸發正文xss
00×3 後臺儲存型xss#直打管理員
這裡是因為輸出的時候沒過濾。導致的xss。先講利用方法:
修改個人資料處,修改真實姓名為payload
前臺訪問會員個人資料處,觸發
後臺管理員再次觸發
我們再來看一下更新的SQL語句
在入庫的時候完全沒做任何過濾,我們跟蹤一下更新的方法。
eclipse跟蹤一下方法
直接把前端表單傳入的值放到了user這個類中,然後執行update方法,在跟一下service層
沒有進行任何過濾。
然後看下sql語句
確實是沒做啥過濾,直接入庫了。然後從從資料庫把內容拿出來渲染到頁面上,也沒做任何過濾,所以造成了xss
00×4 前臺SQL盲注
觸發的原因主要還是因為拼接了SQL語句。在mybatis框架中用了“#”符號才會預編譯,用“$”符號就會拼接SQL語句了,如果這部分使用者可控,那麼就會造成SQL注入了,有人可能會問那我寫SQL語句的時候全部用“#”號不就行了嗎,這種想法是錯誤的。因為在某些常見場景下你必須要用”$”符號來進行SQL拼接,不然mybatis框架會報錯。例如 like,in此類查詢的時候就必須要用到“$”符號。詳細可以看看這篇文章
這裡的話,我們先來看下程式設計師對於所有的語句是怎麼寫的,查詢一下用到了$符號的場景。
在JifenMapper.xml中看到了這處,其實還有很多處
然後全域性搜尋呼叫這個方法的類,因為大部分程式設計師是有規範的。我就發現了在JifenContriller這個類中呼叫了findpage這個方法
我們再來看下程式碼層,有沒有做過濾。
還是直接一步傳入,然後在入庫的。
現在我們來分析入口在哪,
我們可以看到,從方法的定義來看,訪問連結為 /user/jifen/index.do ,傳入的引數是來自jifen,page兩個類。那麼,我們來看下jifen跟page這兩個類有什麼屬性。
在Jifen這個類中,我們可以看到有著跟前面SQL語句中對應的欄位,也就是說,starttime跟endtime這兩個欄位是使用者可控的。
然後我們把它跑起來,檢視這個請求是在哪個點觸發的。經過測試之後,發現觸發點是在積分搜尋處觸發的。
點選查詢,抓包。
經過上面的分析,我們能確定是這個入口點了。然後先走一遍正常請求。
SQL日誌:
打個單引號,看看~
看下SQL日誌:
根本就沒進庫。
然後看下控制檯,有我們熟悉的mysql語法報錯了,確定了沒過濾了。
構造payload
starttime=2018-09-13'or 1=1 or'&endtime=2018-09-20&type=1
跑出資料庫
因為官網註冊不了,於是找了其他站點做了測試。同樣是成功注入出來的。
跑出了user():root@localhost
00×5 總結
對於注入這些的敏感點,還是要注重寫程式碼層的防禦。