一单绑、前言
遇到一個傳輸過程數(shù)據(jù)被加密的網(wǎng)站,無法重放改包曹宴,前端也做了較為嚴格的限制搂橙,測試一度陷入僵局,最終從js找到突破點拿到web后臺管理員權(quán)限
二笛坦、過程
網(wǎng)站前端操作邏輯由js控制区转,首次請求返回內(nèi)容為靜態(tài)資源調(diào)用,隨后js向頁面填充內(nèi)容
傳輸過程對數(shù)據(jù)做了加密處理
2.1 敏感信息泄漏
前端邏輯由js控制版扩,全網(wǎng)站請求路徑及參數(shù)構(gòu)造方式明文出現(xiàn)在js中废离,打開開發(fā)者工具即可看見敏感信息
通過jsfinder對調(diào)用的38個js進行匹配,發(fā)現(xiàn)779條url
再放入burp做存活探測礁芦,263個地址可以直接被訪問到厅缺,如果后端鑒權(quán)功能不完善,則可能存在大量未授權(quán)訪問
2.2 任意用戶密碼修改
泄漏地址中/xx-password
可疑宴偿,是一個密碼修改的web,訪問后填寫數(shù)據(jù)后點擊確定诀豁,沒有請求發(fā)出窄刘,但登錄后再測試能正常修改密碼,存在問題:
- 用于用戶初次登陸強制修改密碼的接口未做限制舷胜,導(dǎo)致可在登錄狀態(tài)下不輸入原密碼即可修改新密碼
隨后手動點擊logout后再次測試便可以發(fā)出請求娩践,多次測試確認與cookie相關(guān),登陸成功后服務(wù)器下發(fā)cookie烹骨,前端js會提取該cookie生成一個新的請求頭Access-Token
用于身份鑒別翻伺,當(dāng)未能從cookie中提取token時便不會進入處理流程就不會觸發(fā)請求事件,所以未登錄狀態(tài)點擊提交沒有請求發(fā)出沮焕,登出后cookie未被刪除依然可以生成token
繼續(xù)測試吨岭,此時請求頭已有一個失效的合法token,但返回用戶類型錯誤峦树,猜測傳入?yún)?shù)還存在問題
但傳輸過程被加密辣辫,無法改包測試
只能從參數(shù)構(gòu)造入手旦事,找到button綁定click事件
進入函數(shù),找到核心代碼急灭,p()
函數(shù)傳入密鑰(t)和待加密數(shù)據(jù)(e)兩個值姐浮,可以看到斷點處此時userId
和userType
未綁定值,函數(shù)內(nèi)使用sm2算法對密鑰加密葬馋、aes算法對數(shù)據(jù)加密卖鲤,然后分別放入key
和content
字段返回,這種結(jié)構(gòu)類似https模型畴嘶,使用非對稱算法加密密鑰蛋逾、對稱算法加密數(shù)據(jù)
[圖片上傳失敗...(image-b5b13f-1645084626312)]
理解了構(gòu)造流程,嘗試寫入普通用戶的userID
和userType
后放包掠廓,修改密碼成功换怖,猜測后端服務(wù)器只驗證了token的真實性,便提取用戶id進入修改密碼流程蟀瞧,依此邏輯可以嘗試遍歷管理員id沉颂,但生產(chǎn)環(huán)境會造成大量賬號無法登陸,最終由客戶提供管理員id完成漏洞測試悦污,成功修改管理員密碼
拿到后臺管理員賬戶權(quán)限
2.3 小結(jié)
js泄漏網(wǎng)站路徑 --> 敏感業(yè)務(wù)未授權(quán)訪問 --> 服務(wù)器弱鑒權(quán)機制 --> 參數(shù)構(gòu)造方法透明 --> 獲得web管理員權(quán)限
三铸屉、總結(jié)
從用戶輸入處的敏感字符檢測到請求發(fā)送過程數(shù)據(jù)加密再到服務(wù)端響應(yīng)內(nèi)容加密,網(wǎng)站做了較為系統(tǒng)的安全防護切端,但忽略了一個重要的點是:js是透明的彻坛,該網(wǎng)站使用js驅(qū)動關(guān)鍵業(yè)務(wù)但未對代碼做安全加固明文出現(xiàn)在頁面中,運行邏輯完全可見踏枣,傳輸過程防護失效昌屉,整體安全性降低,同時大量敏感數(shù)據(jù)也出現(xiàn)在js代碼中茵瀑,連同后端不完善的權(quán)限設(shè)計间驮,系統(tǒng)變得不再安全可靠,建議:
- 不要將敏感數(shù)據(jù)寫入js代碼中马昨,如果因業(yè)務(wù)需要也應(yīng)對代碼進行加固(如:混淆竞帽、加密、反調(diào)試)后再投入生產(chǎn)環(huán)境