JS加密之逻辑密码找回漏洞案例
2022-10-5 09:7:26 Author: 黑白之道(查看原文) 阅读量:28 收藏

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

文章来源:雾晓安全

黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!

如侵权请私聊我们删文

END

多一个点在看多一条小鱼干


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjE3ODU3MQ==&mid=2650553241&idx=4&sn=90c26f563c3ce0a70a18e583c427dcee&chksm=83bd5e7db4cad76b8277aa2f3567696ef92a9d5d798b242eda1c65d27c1ce34270c6271a1823#rd
如有侵权请联系:admin#unsafe.sh