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

|