0x01 前言
在日常登录和获取验证的时候,会遇到各种各样的加密方式,今天介绍最近刚到的提示。加密密码出现在表单提交过程中,下面是中国电信的登录中,支持详细讲解利用pyv8来加密的。
0x02 JS加密
首先我们电信用户的登录了解xxx.cn/web/login
,打开开发者工具,点击网络,输入手机号和秘钥,点击验证码,点击登录,在所有人栏登录。
可以看到密码字段是加密以后的密码,那么怎么加密的呢?
点击发现右边的不就是加密吗?不着急,我们看到CryptoJS库了吗?
https://xxxx.cn/web/static/js/crypto-js/rollups/aes.min.js
分析一下这就是JS加密算法,的思路是加载CryptoJS发现然后,用他来加密我的密码,我们来找到CryptoJS这个加密JS。
继续下看我们看到aes.min.js(进去后发现就是我们上面需要的加密算法),到这里我们才能够成功,然后下载这个加密算法,运行加密函数,我们输入的明文密码再加密成密文。我们先下载aes.min.js这个js文件,保存到本地取名为:crawl_.js。
接下来就是我们使用pyv8来执行JS加密的过程,代码如下:
import PyV8
ctxt = PyV8.JSContext()
ctxt.enter()
c = raw_input('请输入验证码:')
add = '''
aesEncrypt = function() {
var t = CryptoJS.MD5("login.189.cn "),
i = CryptoJS.enc.Utf8.parse(t),
r = CryptoJS.enc.Utf8.parse("1234567812345678"),
u = CryptoJS.AES.encrypt('''+"'{}'"。格式(c)+''',i, {
iv: r
});
返回 u + ""
};
'''
with open('crawl_.js')as f:
a = f.read()
func = ctxt.eval(a + add)
print func()
运行代码我们输入:123456
加密后的结果为:aeMui9uecQAA8XCQwfpUEA==
0x03 实战案例
某运营商在修改用户密码的时候,对随机值的解密。
如果返回正确的加密的结果,那么就可以重置密码了。如下图:
strDec可以看到随机的加密过程,data.res则为我们需要加密的值。
我们根据strDecdes.js找到
我们就可以通过调用des.js来进行加密。
打印 LoginCrypt.utf16to8(LoginCrypt.desEnc('53869', '1', '2','3'))+'n'
最后就是可以重置密码了。
往期推荐 ●●
// 1
// 2
// 3
// 4
获取更多文章,戳“阅读全文”
原文始发于微信公众号(雾晓安全):JS加密之逻辑密码找回漏洞案例
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论