yakit 替换本地JS 解决AES+Rsa加密

admin 2025年4月9日23:00:17评论5 views字数 2694阅读8分58秒阅读模式
yakit 替换本地JS 解决AES+Rsa加密

声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢

yakit 替换本地JS 解决AES+Rsa加密

前言

虽然encrypt-labs靶场还有几个没有写,但是后面几个没什么难的。yakit的webfuzzer的功能已经展示的差不多了,还不了解的师傅可以看我yakit标签的前面几篇文章。

接下来,我们进入了yakit的MITM模块的介绍。下面的文章将介绍,如何利用MITM中的热加载,解决encrypt-labs靶场中AES+Rsa加密的数据包。

yakit 替换本地JS 解决AES+Rsa加密

AES+Rsa加密

key 和 iv 是浏览器随机生成的16位 byte

yakit 替换本地JS 解决AES+Rsa加密

String()

yakit 替换本地JS 解决AES+Rsa加密
yakit 替换本地JS 解决AES+Rsa加密

找到加密方法

yakit 替换本地JS 解决AES+Rsa加密

JS当中代码如下:

CryptoJS['AES']['encrypt'](_0x57740d, _0x4515a4, {        'iv': _0x5e9345,        'mode': CryptoJS['mode']['CBC'],        'padding': CryptoJS['pad']['Pkcs7']    })['toString']()

AES的key和密钥,十六进制和base64的结果

key ae6696f1599be559c7ed292f147f8c70    base64 rmaW8Vmb5VnH7SkvFH+McA==iv c5433e11dfe2bfde74d997011c19f830    base64 xUM+Ed/iv9502ZcBHBn4MA==

RSAsetPublicKey

-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRvA7giwinEkaTYllDYCkzujviNH+up0XAKXQot8RixKGpB7nr8AdidEvuo+wVCxZwDK3hlcRGrrqt0Gxqwc11btlMDSj92Mr3xSaJcshZU8kfj325L8DRh9jpruphHBfh955ihvbednGAvOHOrz3Qy3CbocDbsNeCwNpRxwjIdQIDAQAB-----END PUBLIC KEY-----

加密后key

VcwVaxDyjNvk60fim6Oe/+nyXD7ND0oZ78xRHtyWCEeMRHxvQSHOXJXoHv0bXwc+K0ob2nfr8SLC3iVIkVHauoU/T9UmJCs2v1r7UJkzfh9Q7vZwrZimivE/xIMlxs0x8iUOEbpvkj6YQyHDoikUZL18Rsa0+FLp/tkgbE1qEB8=

加密后iv

AxSRLrB/A5APbG38wo8TYHvcwcOy3GeR6dHwtV3GCvMS2uqPBW2vVAII13cqZ5kmQJajX8rZY/0+uAEPLUFsITOwtWgPrQi8ntT02uJ5VS8T1Mm0pwlCnm8LerCKITf/I2+cfP13zFLWSrAXaueqk0XZ2Hg4/WmuPAPbK02vI2M=

可得出,参数的加密方式encryptedData = AES(data)encryptedKey = RSA(key)encryptedIv = RSA(iv)

密码爆破的时候,encryptedKey和encryptedIv可以保持不变,encryptedData按照之前AES加解密的文章做即可。

更进一步

那么,如果遇到的是在渗透测试查看流量的时候遇到呢?那时候,每个包的key和iv都是随机的,我们要怎么处理?

经过之前的分析,AES的key和iv都是前端随机生成的,也就是后端对这个生成的结果是什么并不清楚。只要满足一定的格式,后端机会接受。

因此,我们完全可以在前端将key固定。

如何让浏览器加载我们修改后的key呢?方法1通过浏览器的 override content

yakit 替换本地JS 解决AES+Rsa加密

但这种方法比较繁琐,可以自行搜索。

方法2通过Charles自带的替换JS功能右键 --> Map Local可参考:https://blog.csdn.net/BoBoLUI/article/details/122681085

方法3我们通过 yakit mitm模块的热加载替换。原理其实和Charles的类似,只不过匹配的URL地址由我们匹配。

yakit 热加载替换JS

我们先将app.js下载到本地,然后修改。通过 deepseek 生成相关的代码:

_0x4515a4 = CryptoJS.enc.Hex.parse('ae6696f1599be559c7ed292f147f8c70'), _0x5e9345 = CryptoJS.enc.Hex.parse('c5433e11dfe2bfde74d997011c19f830')
yakit 替换本地JS 解决AES+Rsa加密

我们在本地用 python 起一个http服务

python -m http.server 8000

热加载中,修改响应包

afterRequest = func(ishttps, oreq/*原始请求*/ ,req/*hiajck修改之后的请求*/ ,orsp/*原始响应*/ ,rsp/*hijack修改后的响应*/){    // Example:    // if str.Contains(string(rsp), "凝聚磅礴的中国文学力量") {    //     modified = poc.FixHTTPRequest(str.ReplaceAll(rsp, "凝聚磅礴的中国文学力量", "AAAAAAAAAAAAAAAA"))    //     return []byte(modified)    // }    url = poc.GetUrlFromHTTPRequest("http",oreq /*type: string*/)    // 匹配包含 app.js的url    if url.Contains("app.js") {    // 获取本地修改后的app.js        rsp1, temp1 = poc.Get("http://127.0.0.1:8000/app.js")~        rsp1 = poc.GetHTTPPacketBody(rsp1["RawPacket"])        // 替换响应体        rsp = poc.ReplaceHTTPPacketBody(rsp /*type: []byte*/, rsp1 )    }    return rsp;}
yakit 替换本地JS 解决AES+Rsa加密

我们清除浏览器的缓存,重新访问网站,查看app.js,可以看到此时aes的key和iv被我们固定

yakit 替换本地JS 解决AES+Rsa加密

此时请求包中的参数,我们就可以通过已知密钥进行查看了。

yakit 替换本地JS 解决AES+Rsa加密

当然,我们也可以通过编写插件查看,至于如何编写,后续会更新。欢迎关注~

参考资料

如何在chrome浏览器使用本地js替换远程js内容

原文始发于微信公众号(进击的HACK):yakit 替换本地JS 解决AES+Rsa加密

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月9日23:00:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   yakit 替换本地JS 解决AES+Rsa加密https://cn-sec.com/archives/3933204.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息