实战中前端某处加密算法的研究
background
水文一篇,没啥含金量,有手进行的东西,是我太菜了,所以觉得值得记录一下
就是一个首先输入身份信息然后返回该账号是否存在的功能点,没有验证码。正常情况下肯定burp一把梭了。但是这里发现提交的数据是被处理过了的,并不是原始的明文。
乍一看就是base64,然后去解码发现解出来的全是乱码。那没法了,只能去看看前端是怎么处理的。
点击“下一步”就是直接验证用户是否存在,这里调用的是nextStep()方法
找到了nextstep方法的具体操作了,account参数经encryptAES方法处理
在js文件里面找到了encryptAES方法的具体操作,知道AES是对称加密,这里面也有了秘钥,那这不就来了吗?
我找了很多的在线网站,都没能成功加密,我很疑惑。也不知道是啥情况。对于这些算法我也是一概不懂。但encryptAES方法就是对字符串进行AES之后再base64的。我直接用python先AES再base64之后也不行。提交过去就显示数据格式错误(这点蛮好的,方便我排错。要是统一显示账号不存在,那我可能一直走在错误的道路上也不知道)最后还是ChatGPT救了我,其实这是一个很简单的问题。gpt指出了js里面是使用的ECB模式,添加PKCS7填充并加密数据。所以很简单了,直接一句话让GPT给我们写代码。之前一直失败就是应为没有指定具体的加密器和填充方法(应该是这样)
先来一个解密脚本验证一下
from Crypto.Cipher import AES |
ok没问题(如果是错的脚本会直接报错),思路是对的,那么接下来就直接写对payload批量加密的脚本
这里还需要对=+等符号进行url编码,直接用现成的库来处理就行了
from Crypto.Cipher import AES |
将结果导入burp一把梭即可
效果也是相当的nice,顺利达到了我想要的结果。