前言
某天在項目中遇到了一個奇怪的人才管理系統,通過FOFA(會員可在社區獲取)進行了一番搜索,發現了該系統在互聯網上的使用情況相當廣泛。于是,我開始了后續的審計過程。
在搜索過程中,我偶然間找到了一份過期的源碼,并在本地搭建起來,開始了審計工作。
審計過程
在檢查一系列常見的RCE(遠程代碼執行)漏洞后(漏洞可在社區中獲取,已更新至8000+),我發現了系統中大量的代碼都使用了名為beetl的庫。這個庫是國內一個知名開發者開發的模板引擎,類似于freemarker。
在進一步分析中,我發現潛在的漏洞觸發點在GroupTemplate#getTemplate方法中。我進行了全局搜索,發現在ComputationRuleUtil#getValue方法中有一個調用點,并且并未寫死模板內容。相比之下,其他地方多次調用時都寫死了模板內容。
這個發現意味著在ComputationRuleUtil#getValue方法中,可能存在潛在的漏洞觸發點,可以被利用來執行遠程代碼。這是一個值得關注和優化的問題。
我們可以觀察到對s2的拼接操作,而s2的最終值來自于String src參數。在這個過程中,src經過了rule方法的處理。通過觀察rule方法,我們可以發現,當我們傳入的第一個字符串參數不包含@sum和@avg時,rule方法會直接返回我們傳入的參數。
全局搜索ComputationRuleUtil#getValue方法的調用位置。
在PerformanceIndicatorServiceImpl#checkRule方法中,發現了對ComputationRuleUtil#getValue方法的調用,而且這個方法的參數是從外部接收的。
在繼續查找調用位置時,定位到了入口點/checkRule。在這里,觀察到請求參數rule,并未發現任何過濾操作。
后來我查看了一下Shiro的鑒權配置,發現這個接口并不是前端直接暴露的。
在后續的調查中,我發現項目中使用的Spring版本比較低,存在一個登錄繞過漏洞。攻擊者可以通過構造URL形式為/druid/../xxxx直接訪問到我們發現的后臺路由。下面是一個構造回顯效果的示例:
鑒于beetl的高版本已經具有對常見命令執行payload的黑名單過濾,我們可以采用反射加載JavaScript來構造攻擊。
「圈子的最近主題和圈子內部工具一些展示」
紛傳100%官方認證授權,可在發現-圈子頁面查看
poc漏洞庫 8000+src陸續更新中 -緊跟時代發展爭做先進網安人
一起愉快刷分-榜上有名
免殺-護網必備
新手學習、老手鞏固-溫故而知新
**學習報告-三人行必有我師
**
各類會員-尊貴的SVIP
「你即將失去如下所有學習變強機會」
學習效率低,學不到實戰內容
一頓自助錢,我承諾一定讓用戶滿意,也希望用戶能給予我一份信任
【詳情下方圖片了解】,【掃下方二維碼加入】:只做高質量優質精品內容」
圈子目前價格為¥99元(交個朋友啦!),現在星球有近150+位師傅相信并選擇加入我們,圈子每天都會更新內容,老用戶可永久享受初始加入價格,圈子內容持續更新中
一張圖總結
免責聲明
由于傳播、利用本公眾號所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,本公眾號及作者不為此承擔任何責任,一旦造成后果請自行承擔!如有侵權煩請告知,我們會立即刪除并致歉。謝謝!
滲透測試15