原文首发Freebuf
https://www.freebuf.com/articles/network/407775.html
PS: 如果内容图片比较糊,可直接浏览freebuf链接就行
一、前言
接到某系统的渗透测试,仅仅一个注册和登录,本以为常规低危三连,却发现连一个明文传输都不给机会(非真实业务系统照片,信息敏感,稍微打码一下,抱歉~~)
输入任意账户密码进行抓包,分析请求包及返回包均是加密,很绝望 ~,经过观察可知请求包的加密是双引号中间是加密内容,响应包是直接返回加密内容的
二、加密分析
通过前端JS分析,找到login.js分析用户名/密码会被一个Encrypt函数进行加密,在loginName、password下断点,进入到Encrypt函数里面,动态调试一下具体的加密方式
逐步调试中可以获取IV值(硬编码在JS文件)、KEY是动态获取(239行)以及补码方式ZeroPadding,但不确定mode的,下一步要跟进到55c函数里面分析具体的加密方式
通过进一步的动态分析,可看到为CBC模式
跳出该55c观察一下Encrypt函数最终的返回的jsonStr为最终的加密内容,等于是请求包的 "加密登陆"
在分析一下如果要登陆的话,需要满足什么格式,为后续的脚本做铺垫,持续跟进getGuid函数、salt获取方式
函数JS已经写好了,salt就是获取当前时间戳了
三、解密分析
有加密肯定有解密,直接在login.js中找到Decrypt函数,打上断点进入函数进行动态调试分析(进入到55c函数分析应该和上面一致了)
四、编写Python脚本实现自动化加解密
现在确定了AES/CBC/ZeroPadding,KEY/IV,直接chatGPT生成Python脚本,再结合具体的功能进行微调
先找一个测试数据验证一下是否正确,通过系统的F12控制台进行分析
本地测试当前的加密和解密状态
控制台调用函数加密解密状态,发现一致,证明脚本没有啥问题
五、漏洞挖掘
由于这一套系统是做了登陆失败次数等限制,主要还是测试一个爆破登陆(非实际真实漏洞),这开发的安全意识还是很高的
六、总结
遇到这种加密情况,只能找具体的JS加密方式尝试进行解密,由于信息敏感,打码较为严重,望见谅,主要还是分享思路。
原文始发于微信公众号(弱口令验证机器人):记一次JS逆向分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论