一次前端安全測試小計
一、前言
遇到一個傳輸過程數據被加密的網站,無法重放改包,前端也做了較為嚴格的限制,測試一度陷入僵局,最終從js找到突破點拿到web后臺管理員權限
二、過程
網站前端操作邏輯由js控制,首次請求返回內容為靜態資源調用,隨后js向頁面填充內容
傳輸過程對數據做了加密處理
2.1 敏感信息泄漏
前端邏輯由js控制,全網站請求路徑及參數構造方式明文出現在js中,打開開發者工具即可看見敏感信息
通過jsfinder對調用的38個js進行匹配,發現779條url
再放入burp做存活探測,263個地址可以直接被訪問到,如果后端鑒權功能不完善,則可能存在大量未授權訪問
2.2 任意用戶密碼修改
泄漏地址中/xx-password可疑,是一個密碼修改的web,訪問后填寫數據后點擊確定,沒有請求發出,但登錄后再測試能正常修改密碼,存在問題:
- 用于用戶初次登陸強制修改密碼的接口未做限制,導致可在登錄狀態下不輸入原密碼即可修改新密碼
隨后手動點擊logout后再次測試便可以發出請求,多次測試確認與cookie相關,登陸成功后服務器下發cookie,前端js會提取該cookie生成一個新的請求頭Access-Token用于身份鑒別,當未能從cookie中提取token時便不會進入處理流程就不會觸發請求事件,所以未登錄狀態點擊提交沒有請求發出,登出后cookie未被刪除依然可以生成token
繼續測試,此時請求頭已有一個失效的合法token,但返回用戶類型錯誤,猜測傳入參數還存在問題
但傳輸過程被加密,無法改包測試
只能從參數構造入手,找到button綁定click事件
進入函數,找到核心代碼,p()函數傳入密鑰(t)和待加密數據(e)兩個值,可以看到斷點處此時userId和userType未綁定值,函數內使用sm2算法對密鑰加密、aes算法對數據加密,然后分別放入key和content字段返回,這種結構類似https模型,使用非對稱算法加密密鑰、對稱算法加密數據
[圖片上傳失敗...(image-b5b13f-1645084626312)]
理解了構造流程,嘗試寫入普通用戶的userID和userType后放包,修改密碼成功,猜測后端服務器只驗證了token的真實性,便提取用戶id進入修改密碼流程,依此邏輯可以嘗試遍歷管理員id,但生產環境會造成大量賬號無法登陸,最終由客戶提供管理員id完成漏洞測試,成功修改管理員密碼
拿到后臺管理員賬戶權限
2.3 小結
js泄漏網站路徑 --> 敏感業務未授權訪問 --> 服務器弱鑒權機制 --> 參數構造方法透明 --> 獲得web管理員權限
三、總結
從用戶輸入處的敏感字符檢測到請求發送過程數據加密再到服務端響應內容加密,網站做了較為系統的安全防護,但忽略了一個重要的點是:js是透明的,該網站使用js驅動關鍵業務但未對代碼做安全加固明文出現在頁面中,運行邏輯完全可見,傳輸過程防護失效,整體安全性降低,同時大量敏感數據也出現在js代碼中,連同后端不完善的權限設計,系統變得不再安全可靠,建議:
- 不要將敏感數據寫入js代碼中,如果因業務需要也應對代碼進行加固(如:混淆、加密、反調試)后再投入生產環境












浙公網安備 33010602011771號