java審計之ofcms
Github地址如下:
"https://github.com/yuzhaoyang001/ofcms"
然后使用idea導入war包



配置tomcat

然后創建數據庫

運行sql文件


然后配置好數據庫文件

根據自己安裝的mysql版本配置pom.xml

后臺地址:http://localhost:8081/ofcms_admin_war/admin/login.html
賬號,密碼 admin / 123456
先大概過一遍功能點
因為前臺看不到啥點所以就登錄到后臺觀看
sql注入

在這里抓包

根據這個 找到 controller層


發現這里接收sql參數 然后update執行 我們打上斷點來進行調試
隨便輸入一個

然后回到idea


可以看到外面輸入的值

進入update函數

繼續

經過一直調試

最后進入到這里執行 這里采用了預編譯但是 是把整個sql語句進行預編譯 不是把sql的參數 這樣根本起不到效果
并且還進行了回顯


用報錯語句測試
因為是executeUpdate
所以只能用增刪改的sql語句
update of_cms_ad set ad_id=updatexml(1,concat(1,user()),1)

任意文件讀取
但僅限讀取html js css xml文件

這里默認只能讀取default里面的文件


因為第一次審計 不太了解框架結構 所以點擊頁面的時候進行抓包來尋找Controller層


在idea找到這個方法

dir是當前目錄 也就是可查看代碼的目錄 這個是可控的 通過這里可以看出
繼續往下跟

pathFile 則是根據傳入的dir 獲取到絕對路徑
跟到這里則可以看到只能返回html xml css js

files則是default目錄下的html等文件的絕對路徑


然后在通過傳的文件名 和 files里面的進行比較 默認是index.html

通過這里讀取到源碼

最后渲染到頁面上
整個操作沒有對dir進行限制 然后我們又可控 就能夠讀取其他目錄的文件
測試


任意文件寫入
還是上面這個Controller

可以發現只獲取這幾個參數的值

然后在這一行把content的進行了尖括號的替換
沒有進行其他的過濾 可以任意寫入
測試


任意文件上傳
看到一個上傳

還是根據數據包 找到代碼

這里代碼很少 一步一步跟進


這里看不出什么 繼續跟進

這里通過new MultipartRequest進行上傳文件
跟進

繼續

這個函數沒發現什么


發現這個函數

會判斷jsp和jspx后綴
這里可以就可以通過windows的特性 來進行繞過 上傳文件名為.jsp.
測試


第二處

這個函數也是和上面一樣的 可以進行任意文件上傳


這些都可以
越權修改密碼
先創建一個普通用戶
然后登錄 修改密碼


這里可以看到有一個user_id 修改這個 這里相當于 平常黑盒測試一樣 改為1


可以看到admin的密碼也變成asd123了
代碼分析 根據數據包找到controller



根據日志也可以看到 是根據id來進行修改密碼的 沒有進行id和用戶的綁定
有了修改密碼的前提 我們會想到修改資料這些


模板注入
在pom.xml發現cms使用freemarker
在后臺存在模板的修改
payload:<#assign value="freemarker.template.utility.Execute"?new()>${value("calc.exe")}

