关键字: 前端JS加密,伪验证码,PyV8,pydictor
抓取网页
推荐Save All Resources chrome插件,扒网页资源很方便。
隐藏了无关信息,本地搭建如下
本来想练习一下使用验证码绕过爆破工具(Pkav HTTP Fuzzer 1.5.6),但抓包未发现验证码参数提交,唯独用户名、密码都做了加密处理
略过这个伪验证码,下一步查找加密出处。开头以为简单Base64加密,F12调试查看资源发现原来有一个加密脚本,CryptoJS,应该是一个挺普遍使用的开源前端加密库。
翻看HTML源码,查看调用。果然,得到了DES加密的具体参数。
尝试手动加密
本来以为根据DES加密的参数,很容易手动模拟一次加密过程,却不合预期。CryptoJS.enc.Base64.parse(key)
输出的keyHex,其为wordArray
类型,用作加密函数的参数。这时尝试alert(keyHex)
输出的字符串作密钥,并不成功。
再留意到burpsuit的intruder模块的字符预处理不支持DES加密,意味着,即使还原手动加密的步骤,也不能直接应用于爆破模块。
使用PyV8库
干脆将直接运行JS脚本,自行生成一个专用字典。锁定使用python的PyV8库执行JS。
#coding=utf-8
#filename test-import.py
import PyV8
import requests
jsfile = open('lib/encode/customjs/my.js','r')
js += jsfile.read()
jsfile.close()
def getEncPasswd(word):
ctxt = PyV8.JSContext()
with PyV8.JSLocker():#进程安全锁
ctxt.__enter__()
ctxt.locals.password = word
ctxt.eval(js)
res = ctxt.locals.result
ctxt.leave()
return res.encode('utf-8')
#print getEncPasswd('admin')
运行一下,哈哈,终于得到 bvusJDLPXUo=
这串可爱的字符了。
pydictor
字典生成工具pydictor出场,其能自定义脚本用于Encode字典。 lib/encode/test-encode.py 直接 import上面的脚本了。
命令行开跑
python pydictor.py -tool handler wordlist\top1000.txt --encode test -o customDict.txt
有了字典,愉快地 intruder 吧。