js逆向·找到登錄時目標網站的加密算法的幾種方式 || phantomjs || jsEncrypter插件
為什么要去找到目標網站的加密密碼方法:
為了要把我們的payload正確的帶入目標網站的服務器進行邏輯驗證,那么就需要知道對方使用的什么加密或者編碼規則來處理數據的,比如說我們輸入的密碼被base64編碼了,然后發送給后端,后端會進行解碼過后再帶入邏輯驗證中去判斷你輸入的密碼賬號正確與否,那我們要測試有沒有安全問題,輸入一些惡意參數的話自然也需要把我們輸入的payload進行同樣的base64編碼,這樣在發送給服務器時,服務器才能正確的進行解碼然后進行邏輯驗證,如果你不用同樣的編碼規則的話,服務器無法正確解碼,那邏輯驗證就更不可能成功了。所以要記住一點,如果目標網站有加密或者編碼數據的情況,一定要找出它然后同它保持一致。
前置知識:
作用域:簡單來說就是程序運行起來時相關的數據值有哪些
調用堆棧:調用堆棧里的程序意思就是發起此請求時有哪些程序參與其中;這里面的程序執行順序是從下到上的
XHR:全稱 XML HTTP Request
分析調試方法:
-文件流程斷點
-代碼全局搜索
-XHR提交斷點
本文只介紹通過這三種方法找到加密算法的點;自己愿意用哪種就用哪種,反正學這三個的目的都只有一個。即找到目標網站的加密方法
-
第一種方法:文件流程斷點
-
點擊登錄之后,查看相關的數據包,可以在負載里發現我們輸入的數據都被加密了;原本輸入的明文手機號被加密成不認識的東西
-
也可以在發起程序的選項卡里查看,發起此數據包時有哪些相關的程序參與其中
在相關的程序里選擇一個你覺得最有可能是跟加密算法函數沾邊的那個文件,然后點擊進去查看(根據經驗判斷的,實在不行就一個個檢查吧)我覺得最有可能的就是login.js文件了,所以我點擊login那個js文件,跳轉至相關代碼上去了
一看好多跟加密相關的東西那應該是找對了,找到關鍵的加密函數這,下一個斷點在附近,然后再去點擊一遍登錄,讓程序跑起來卡在這,然后再去控制臺驗證一下加密函數。
-
(為什么要斷點后再去控制臺進行驗證呢?:因為如果不打斷點的話程序一下就執行完成了,創建的變量啊,相關的數據也會直接在內存空間銷毀,到時候你再去使用相關的函數方法,涉及到的變量什么的都已經不存在了,會報錯提示你未定義相關函數或者變量,所以我們要設置斷點讓程序運行起來又不至于直接結束,趁相關方法還存在于內存當中的時候使用目標網站的相關函數達到目的)
這樣就可以保證我們的payload跟目標網站使用相同的加密算法來加密數據了
-
第二種方法:全局代碼搜索
-
第三種方法:XHR提交斷點
-
在網絡選項卡里找到此數據包請求的路徑是哪個,然后把這個路徑復制下來,到源代碼選項卡里添加進去。
 添加完成后再次點擊登錄,就可以達到一個目的,即如果在運行程序的過程當中,如果URL涉及到你添加進去的路徑時,程序會停下來。如下圖:
那就跟上面的一樣了,在涉及的相關程序里找到你覺得跟加密方法相關的js文件,點進去找就行了。同樣可以找到login.js 這個文件
最后再補充一點:
上面說過作用域里面的值,就是程序運行到這一步時涉及到的相關的變量啊什么的此時的值。意思就是我剛才在網站輸入的數據手機號啊,密碼啊等明文數據,到這一步的時候,已經被加密成了密文了,那說明加密的動作也就在此之前了。找加密函數的時候也就該往上看了,或者就在附近。
但是我們在測試的時候需要測試的payload實在太多,一個一個這么試嗎?顯然是不太合適的。那就需要結合一些其它工具來批量實現了。
Burp Suite–jsEncrypter插件
這個插件可以導入我們自定義的加密算法進去,作用是拿來對payload進行自定義批量加密處理的
使用方法:
-
下載phantomjs并把里面的bin目錄添加環境變量
https://phantomjs.org/download.html
-
BurpSuite加載jsEncrypter插件下載地址和配置如下圖:
https://github.com/c0ny1/jsEncrypter/releases
-
對逆向的加密算法提取JS文件
- 把目標網站負責加密的js文件下載到本地
-
-
把代碼寫入到模版中(引用JS和調用加密)
jsEncrypter.0.3.2文件夾里的phantomjs_server.js:這個是模板文件,主要是這兩塊部分需要關注,如下圖:
- 運行剛寫入的模版文件后插件連接測試
用phantomjs這個可執行程序,運行那個模板文件
-
正常設置發包后選擇引用插件選項
add添加一個擴展插件點擊ok,然后就可以開始爆破了

|