文章來源:先知社區(Ainrm)
原文地址:https://xz.aliyun.com/t/10801
0x01 前言
遇到一個傳輸過程數據被加密的網站,無法重放改包,前端也做了較為嚴格的限制,測試一度陷入僵局,最終從js找到突破點拿到web後台管理員權限
0x02 過程
網站前端操作邏輯由js控制,首次請求返回內容為靜態資源調用,隨後js向頁面填充內容

傳輸過程對數據做了加密處理

前端邏輯由js控制,全網站請求路徑及參數構造方式明文出現在js中,打開開發者工具即可看見敏感信息

通過jsfinder對調用的38個js進行匹配,發現779條url

再放入burp做存活探測,263個地址可以直接被訪問到,如果後端鑒權功能不完善,則可能存在大量未授權訪問

泄漏地址中/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模型,使用非對稱算法加密密鑰、對稱算法加密數據

理解了構造流程,嘗試寫入普通用戶的userID和userType後放包,修改密碼成功,猜測後端服務器只驗證了token的真實性,便提取用戶id進入修改密碼流程,依此邏輯可以嘗試遍歷管理員id,但生產環境會造成大量賬號無法登陸,最終由客戶提供管理員id完成漏洞測試,成功修改管理員密碼

拿到後台管理員賬戶權限

js泄漏網站路徑 --> 敏感業務未授權訪問 --> 服務器弱鑒權機制 --> 參數構造方法透明 --> 獲得web管理員權限
0x03總結
從用戶輸入處的敏感字符檢測到請求發送過程數據加密再到服務端響應內容加密,網站做了較為系統的安全防護,但忽略了一個重要的點是:js是透明的,該網站使用js驅動關鍵業務但未對代碼做安全加固明文出現在頁面中,運行邏輯完全可見,傳輸過程防護失效,整體安全性降低,同時大量敏感數據也出現在js代碼中,連同後端不完善的權限設計,系統變得不再安全可靠,建議:
不要將敏感數據寫入js代碼中,如果因業務需要也應對代碼進行加固(如:混淆、加密、反調試)後再投入生產環境
關 注 有 禮
還在等什麼?趕緊點擊下方名片關注學習吧!
推 薦 閱 讀



歡 迎 私 下 騷 擾
