近期同事遇到一個金融站點的前端加簽驗證問題,找到本菜雞一起幫忙分析。經過測試發現,客戶端每次請求都會對數據包進行加簽,然后服務端會對數據包進行驗簽。
解決大概思路:確定加簽關鍵字-》分析前端代碼獲取加簽算法-》使用burpy插件調用前端加密函數自動對數據包進行加簽操作
Burpy:一款burp插件,可自定義python腳本對數據包進行加解密。https://github.com/mr-m0nst3r/Burpy
確定加簽關鍵字
開局一個登錄框
通過測試得知,服務端會對每個請求數據包的“_msgid”和“_sign”參數進行驗簽,一但數據包被修改或者重復發送相同數據包,服務端則會返回“驗證簽名失??!”
分析js獲取加簽算法
首先F12全局搜索查找“_msgid”的生成算法
找到對應的uuid()算法邏輯
把js加密代碼摳出來復制到sign.js文件
使用python的execjs模塊調用sign.js的uuid函數,編寫demo測試沒問題,加簽字段“_msgid”搞定
接下來分析加簽字段“_sign”的加密邏輯,通過sign關鍵字定位到getSign函數
此處對前端代碼進行調試,得知傳入的參數requestObject為字典格式,通過對字典數據進行處理后得到參數“sb”的值,最終將“sb”的值MD5加密后得到加簽字段“_sign”的值
“_sign”的大致加密邏輯有了,那么就需要查看前端調用棧來查看傳入參數“requestObject”的字典數據是如何生成的。
分析后得知“requestObject”由兩部分組成,一部分為不固定參數,根據業務功能點不同傳入不同的參數字典,另一部分為固定參數token、msgid、app_id、redisIdBindCustno添加到字典數據的尾部,然后傳入getSign獲取加簽參數“_sign”的值
編寫加簽腳本
大致的加簽數據生成流程已經理清楚,接下來就需要編寫burpy腳本搞定“_sign”加簽參數,首先把getSign()函數的加密算法摳出來復制到sign.js文件中
編寫腳本調用sign函數獲取加簽參數“_msgid、_sign”的值,從而實現自動化對數據包進行加簽。 (注意:傳入的encrypt函數的body為str類型,返回時也必須為str類型)
接下來可以開啟burpy插件,即可自動替換數據包中的加簽參數
審核編輯 :李倩
-
算法
+關注
關注
23文章
4620瀏覽量
93047 -
函數
+關注
關注
3文章
4338瀏覽量
62739
原文標題:記一次金融站點的驗簽破解實戰
文章出處:【微信號:菜鳥學安全,微信公眾號:菜鳥學安全】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論