对密文密码进行**的一种方法
程序员文章站
2022-05-10 23:25:38
...
需求
在**某款路由器管理员登录密码时,从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中**时选择该字典就可以了。