前言
日常我們在工作時做安全測試或者日常的漏洞挖掘中,往往會遇到請求加密,參數加密的情況,而且絕大部分都是前端加密的情況,那麼我們就可以手動調試跟蹤去解決這個加密問題,對我們自己要發送的數據進行編碼來幫助我們進行測試
前端加密定位方法
一般定位都會採用關鍵函數跟蹤的方式,流程如下:
選擇需要定位的標籤,一般都是提交、登錄、保存等按鈕,通過這些按鈕再去查找其中對應的事件函數,然後到調試器欄ctrl+shift+f全局搜索函數名定位,定位到關鍵函數後,對其打個斷點,然後跟一跟基本就能確定走了什麼加密流程。
隨後就需要手工在控制台對函數進行調用對自己要測試的數據進行編碼,當然也可以把這些js文件保存下來,通過python腳本調用js函數。
burp也有一個jsEncrypter插件,詳情可以去github主頁瞅瞅,是把js保存下來然後使用phantomjs調用加密函數對數據進行加密。
加密繞過實例
登錄時抓包查看到數據包如下,可以看到passwd字段進行了明顯的加密

一般密碼加密會在登錄事件進行加密處理,那麼我們從這裡開始跟蹤,選中登錄按鈕右鍵檢查元素定位。

可以看有一個checkusernew()函數,轉到調試器,直接ctrl+sgift+f全局搜索這個函數。

然後轉到函數定義處,直接點擊右側加個斷點

然後重新走登錄流程,自動運行到斷點處,然後F10 不過、F11 步入、shift+F11 步出。
對關鍵函數如hex_md5和Encrypt需要跟進去看下做了什麼。

跟進encrypt函數

我們需要去跟進獲取加密的key和iv么,當然是不需要的,我們只需要在控制台調用執行即可

但是如何批量呢?有兩種方案,一個直接在控制台寫js代碼或者拉取相應JS,調用python的PyExecJS模塊。
我更傾向於直接在控制台調用
let arr = ['a', 'b', 'c', 'd', 'e'] //定義一個列表
var a = "" //定義一個空字符串
for (let i in arr) {a = a + Encrypt(hex_md5(arr[i])) + "n"} //循環跑
最後輸出字符a即可
其他情況
在測試過程遇到的情況往往可能要複雜得多,跟了半天都沒有跟到關鍵函數也有可能發生。再加上web前端項目打包導致函數更加不好找。
這個時候就要果斷放棄,打開下一個。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/253039.html