安全矩阵

 找回密码
 立即注册
搜索
查看: 1642|回复: 0

JS加密之逻辑密码找回漏洞案例

[复制链接]

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
发表于 2022-6-17 12:48:59 | 显示全部楼层 |阅读模式

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'
编辑
最后就是可以重置密码了。
编辑

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-30 02:32 , Processed in 0.012195 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表