近期同事遇到一個(gè)金融站點(diǎn)的前端加簽驗(yàn)證問(wèn)題,找到本菜雞一起幫忙分析。經(jīng)過(guò)測(cè)試發(fā)現(xiàn),客戶(hù)端每次請(qǐng)求都會(huì)對(duì)數(shù)據(jù)包進(jìn)行加簽,然后服務(wù)端會(huì)對(duì)數(shù)據(jù)包進(jìn)行驗(yàn)簽。
解決大概思路:確定加簽關(guān)鍵字-》分析前端代碼獲取加簽算法-》使用burpy插件調(diào)用前端加密函數(shù)自動(dòng)對(duì)數(shù)據(jù)包進(jìn)行加簽操作
Burpy:一款burp插件,可自定義python腳本對(duì)數(shù)據(jù)包進(jìn)行加解密。https://github.com/mr-m0nst3r/Burpy
確定加簽關(guān)鍵字
開(kāi)局一個(gè)登錄框

通過(guò)測(cè)試得知,服務(wù)端會(huì)對(duì)每個(gè)請(qǐng)求數(shù)據(jù)包的“_msgid”和“_sign”參數(shù)進(jìn)行驗(yàn)簽,一但數(shù)據(jù)包被修改或者重復(fù)發(fā)送相同數(shù)據(jù)包,服務(wù)端則會(huì)返回“驗(yàn)證簽名失??!”

分析js獲取加簽算法
首先F12全局搜索查找“_msgid”的生成算法

找到對(duì)應(yīng)的uuid()算法邏輯

把js加密代碼摳出來(lái)復(fù)制到sign.js文件

使用python的execjs模塊調(diào)用sign.js的uuid函數(shù),編寫(xiě)demo測(cè)試沒(méi)問(wèn)題,加簽字段“_msgid”搞定

接下來(lái)分析加簽字段“_sign”的加密邏輯,通過(guò)sign關(guān)鍵字定位到getSign函數(shù)

此處對(duì)前端代碼進(jìn)行調(diào)試,得知傳入的參數(shù)requestObject為字典格式,通過(guò)對(duì)字典數(shù)據(jù)進(jìn)行處理后得到參數(shù)“sb”的值,最終將“sb”的值MD5加密后得到加簽字段“_sign”的值

“_sign”的大致加密邏輯有了,那么就需要查看前端調(diào)用棧來(lái)查看傳入?yún)?shù)“requestObject”的字典數(shù)據(jù)是如何生成的。

分析后得知“requestObject”由兩部分組成,一部分為不固定參數(shù),根據(jù)業(yè)務(wù)功能點(diǎn)不同傳入不同的參數(shù)字典,另一部分為固定參數(shù)token、msgid、app_id、redisIdBindCustno添加到字典數(shù)據(jù)的尾部,然后傳入getSign獲取加簽參數(shù)“_sign”的值


編寫(xiě)加簽?zāi)_本
大致的加簽數(shù)據(jù)生成流程已經(jīng)理清楚,接下來(lái)就需要編寫(xiě)burpy腳本搞定“_sign”加簽參數(shù),首先把getSign()函數(shù)的加密算法摳出來(lái)復(fù)制到sign.js文件中

編寫(xiě)腳本調(diào)用sign函數(shù)獲取加簽參數(shù)“_msgid、_sign”的值,從而實(shí)現(xiàn)自動(dòng)化對(duì)數(shù)據(jù)包進(jìn)行加簽。 (注意:傳入的encrypt函數(shù)的body為str類(lèi)型,返回時(shí)也必須為str類(lèi)型)

接下來(lái)可以開(kāi)啟burpy插件,即可自動(dòng)替換數(shù)據(jù)包中的加簽參數(shù)


審核編輯 :李倩
-
算法
+關(guān)注
關(guān)注
23文章
4762瀏覽量
97178 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4406瀏覽量
66863
原文標(biāo)題:記一次金融站點(diǎn)的驗(yàn)簽破解實(shí)戰(zhàn)
文章出處:【微信號(hào):菜鳥(niǎo)學(xué)安全,微信公眾號(hào):菜鳥(niǎo)學(xué)安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
【freeRTOS開(kāi)發(fā)筆記】記一次坑爹的freeTOS升級(jí)
循環(huán)充放電一次就是少一次壽命嗎?
一次電池為什么不能被充電?
循環(huán)充放電一次就是少一次壽命嗎?
電池循環(huán)充放電一次就是少一次壽命嗎?
無(wú)線(xiàn)路由器密碼破解Beini破解wpa實(shí)戰(zhàn)教程詳細(xì)說(shuō)明
對(duì)于加解密、加簽驗(yàn)簽你們有概念嗎
記一次CH552不識(shí)別無(wú)法下載解決辦法
CFCA簽名驗(yàn)簽服務(wù)器解決方案獲鯤鵬Validated認(rèn)證
一次調(diào)頻和二次調(diào)頻的概念 一次調(diào)頻可以實(shí)現(xiàn)無(wú)差調(diào)節(jié)?
鴻蒙開(kāi)發(fā):Universal Keystore Kit密鑰管理服務(wù) 簽名、驗(yàn)簽介紹及算法規(guī)格
移動(dòng)電源EMC整改:認(rèn)證失敗到一次通過(guò)的實(shí)戰(zhàn)經(jīng)驗(yàn)

記一次金融站點(diǎn)的驗(yàn)簽破解實(shí)戰(zhàn)
評(píng)論