js繞過-前端加密繞過

kidicc發表於2021-08-12

前端加密解密

前言

日常我們在工作時做安全測試或者日常的漏洞挖掘中,往往會遇到請求加密,引數加密的情況,而且絕大部分都是前端加密的情況,那麼我們就可以手動除錯跟蹤去解決這個加密問題,對我們自己要傳送的資料進行編碼來幫助我們進行測試

前端加密定位方法

一般定位都會採用關鍵函式跟蹤的方式,流程如下:

選擇需要定位的標籤,一般都是提交、登入、儲存等按鈕,通過這些按鈕再去查詢其中對應的事件函式,然後到偵錯程式欄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前端專案打包導致函式更加不好找。

這個時候就要果斷放棄,開啟下一個。

相關文章