需求
在爆破某款路由器管理員登錄密碼時,從burp抓到的包可以看到password參數的值是經過前端加密之後再進行傳輸的,這種情況下使用明文密碼字典幾乎不可能爆破成功。我的嘗試是本地調用該登錄界面用來加密的js函數,將明文密碼字典轉爲對應的密文密碼字典。
實踐過程
首先我們查看一下點擊登錄按鈕後都執行了哪些js函數。
(command+f)搜索check()函數定義的位置,可以看到對密碼進行加密的函數是base64encode()和utf16to8()
其實這裏已經發現是先用Unicode編碼再用Base64編碼進行加密的,在一些網站上可以直接轉換,但我們還是當成未知加密來看。
搜索sources發現加密函數都被定義在base64Encode.js裏。
到這裏,我們已經把加密流程理清了,接下來寫一個python腳本調用js。
python腳本
需要使用到python的PyExecJS 庫(使用方法可以參考其他博客),代碼如下
import execjs #導入PyExecJS 庫
def get_js(): #導入js文件
f = open("base64Encode.js", 'r', encoding='UTF-8')
line = f.readline()
htmlstr = ''
while line:
htmlstr = htmlstr + line
line = f.readline()
return htmlstr
jsstr = get_js()
ctx = execjs.compile(jsstr)
def creative_book(): #創建密文密碼字典
f = open("adobe_top100_pass.txt")
for line in f:
r = line.strip('\n')
utf = ctx.call('utf16to8', r)
base64 = ctx.call('base64encode', utf)
h = open('adobe_top100_pass_creative.txt', 'a')
h.write("\n" + base64)
h.close()
f.close()
creative_book()
由於我有印象是弱口令密碼,所以選擇使用kali自帶的adobe_top100_pass.txt明文密碼字典,跑一下程序,轉爲我們需要的adobe_top100_pass_creative.txt密文密碼字典。
接下來在burpsuite中爆破時選擇該字典就可以了。