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

|