Python调用JS函数生成密文字典

0x00

在Web渗透的时候,经常会遇到一些登录表单用DES之类的加密方式来加密参数,又因为BurpSuite不支持这样的加密(也许我的Burp有问题,一直看不到),所以给暴力破解表单带来了麻烦。

以前就有想过能不能用JAVA、Python或者其他语言引用JS文件,调用内部的函数来生成字典,一直没有去尝试。这次刚好遇到就试着实现一下,顺便记录着水一篇博客。

0x01

Python库PyExecJS能够解析和执行JS代码,还能直接调用JS函数,先安装

pip install PyExecJS

完成安装后试着执行一下JS,eval执行JS,compile引用JS,call调用JS函数

>>> import execjs
>>> execjs.eval("'red yellow blue'.split(' ')")
['red', 'yellow', 'blue']
>>> ctx = execjs.compile("""
...     function add(x, y) {
...         return x + y;
...     }
... """)
>>> ctx.call("add", 1, 2)
3

0x02

那么,装好PyExecJS库,并且调试执行以后,就可以直接开始生成字典了。

以某网站为例,点击登录按钮时触发LoginCheck函数

function LoginCheck() {
	var username = document.getElementById('Login1_txtUserName').value;
	var password = document.getElementById('Login1_txtPassword').value;
	if (username == '' || password == '') {
		alert('请输入用户名和密码\uFF01');
		return false;
	}
	document.getElementById('Login1_txtUserName').value = jsencrypt('txtUserName', username);
	document.getElementById('Login1_txtPassword').value = jsencrypt('txtPassword', password);
	return true;
}

其中账户密码都被jsencrypt函数加密,继续跟进jsencrypt函数

因为jsencrypt本身又调用了其他函数,那么只需要用Python引用整个js文件,就可以直接调用 jsencrypt 来加密。

将jsen.js文件保存起来,然后用PyExecJS库引用这个JS文件就可以调用内部的 jsencrypt 函数啦。

import execjs

# 加载并引用jsen.js
js = open('jsen.js', encoding='utf-8').read()
jo = execjs.compile(js)

# 打开字典,调用jsencrypt函数加密每一个字典
with open('D:\Pentest Tools\BusterList\ComplexPassword_6940.txt') as f:
    for line in f.readlines():
        p = line.strip()
        print(jo.call('jsencrypt', 'txtPassword', p))

之后就能生成一个被加密好的密文字典。

发表评论

电子邮件地址不会被公开。 必填项已用*标注