前端JavaScript加密绕过
1/1常见加密算法
比较简单的base64、hex等这些编码就不再说了。
0x01 对称加密(加解密的密钥相同)
- 常用算法:DES、DES3、AES
- 根据密钥长度不同又分为:AES-128、AES-192、AES-256
- 其中AES-192和AES-256在Java中使用需获取无政策限制权限文件
- 加密/解密使用相同的密钥
- 加密和解密的过程是可逆的
0x02非对称加密(加解密密钥为公钥和私钥)
- 常用算法:RSA
- 使用公钥加密,使用私钥解密
- 公钥是公开的,私钥保密
- 加密处理安全,但是性能极差,单次加密长度有限制
- RSA既可用于数据交换,也可用于数据校验
- 数据校验通常结合消息摘要算法 MD5withRSA 等
两种加密算法常见结合套路:1、随机生成密钥2、密钥用于AES/DES/3DES加密数据3、RSA对密钥加密4、提交加密后的密钥和加密后的数据给服务器
0x03信息摘要算法/签名算法
- 常用算法:MD5、HMAC(HmacMD5、HmacSHA1、HmacSHA256)、SHA(SHA1、SHA256、SHA512)
- 不管明文多长,散列后的密文定长
- 明文不一样,散列后结果一定不一样
- 散列后的密文不可逆
- 一般用于校验数据完整性、签名 sign
- 由于密文不可逆,所以后台无法还原,也就是说他要验证,会在后台以跟前台一样的方式去重新签名一遍。也就是说他会把源数据和签名后的值一起提交到后台。所以我们要保证在签名时候的数据和提交上去的源数据一致,这种算法特喜欢在内部加入时间戳
1/2实例操作
打开网站,抓包
修改个数据,比如修改num为1000
可以看到,修改过参数数据后,后端数据校验之后不合法,所以没有返回数据。
打开测试网站 -> F12控制台 -> 切换至 XHR
这里我们看下需要做的有什么?
- 请求中有token(t明显是时间戳),token和数据不匹配后端不返回数据
- 返回的数据是加密的,需要解密
接下来我们就定位具体的加密函数和解密函数。
按照上面提到的流程步骤
打开控制台 -> source ->搜索
搜索加密参数名 token
根据搜索结果的文件名判断,基本上就是第二个文件,点击打开
token的生成代码
var token = md5(String(page) + String(num) + String(timestamp));
设置断点,刷新
成功进入断点,没毛病了
根据加密函数,编写脚本
可以看到,生成的token和URL中的一致,至此,加密部分完成。
解密部分同样的道理,搜索返回包中的参数,直接搜索list发现有点多,不太好观察,还有一种方法
可以看到数据部分html的id为ip-list
,再次搜索
成功找到解密数据包的代码
设置断点,进一步确认
没毛病,可以看到decode_str
后就开始出现我们需要的明文数据了,所以这里的 decode_str 就是我们要的解密方法。剩下就是分析代码,编写解密脚本了。
function decode_str(scHZjLUh1) { scHZjLUh1 = Base64["\x64\x65\x63\x6f\x64\x65"](scHZjLUh1); key = '\x6e\x79\x6c\x6f\x6e\x65\x72'; len = key["\x6c\x65\x6e\x67\x74\x68"]; code = ''; for (i = 0; i < scHZjLUh1["\x6c\x65\x6e\x67\x74\x68"]; i++) { var coeFYlqUm2 = i % len; code += window["\x53\x74\x72\x69\x6e\x67"]["\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65"](scHZjLUh1["\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74"](i) ^ key["\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74"](coeFYlqUm2)) } return Base64["\x64\x65\x63\x6f\x64\x65"](code)}
先运行下看看
报错,提示Base64
未定义,设置断点,找到Base64
的具体代码
复制粘贴进代码,再次运行
艹,提示Windows未定义,根据流程,缺啥补啥,debug,找对应的值
可以看到分别对应的是String
和fromCharCode
那就是调用了String.fromCharCode
方法了,替换掉,再次运行
bingo~
成功解密获取到明文数据。
1/3 Python实现加密方法合集**
关于上述第一部分的常见加密算法,GitHub有对应的仓库,直接可以用的
GitHub:https://github.com/dhfjcuff/R-A-M-D-D3-S-M-H/
本文来源于:http://byd.dropsec.xyz/2019/09/08/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95%E4%B9%8BJS%E9%80%86%E5%90%91/