声明:该公众号大部分文章来自作者日常学习笔记,未经授权,严禁转载,如需转载,联系洪椒攻防实验室公众号。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。
0x00前言
在日常的测试及其他安全工作中,前端js往往能成为某些特定场景下的突破口,本文记录了一下如何利用JS文件解密返回的加密数据包的思路及方法。
0x01 案例
在某次测试中遇到了一个站点,正常访问页面时,数据的查询提交及交互均正常,但抓包发现所有的返回数据均被加密。
以为给数据加密就没办法了吗,前端加密算什么加密?
数据包加密多少还是有点影响工作效率的,越权也好报错也好什么都看不出来。既然前端能明文呈现,说明还是有个前端解密的过程,解开就完事了。看了眼源码,简单搜索了一下常见的几个加密算法,AES,RSA,3DES这些算法,还真找着了一个代码片段(运气真好)。
这里写了两种工作模式,CBC和ECB,简单分析了一下,o是偏移量IV,40位,a是密钥,16位,大概率就是用的AES.ECB.Pkcs7(CBC模式偏移量得是16位),找了个在线加解密的网站https://try8.cn/tool/cipher/aes
,
直接搞定,开发小哥辛苦了hhh。
一句话总结一下就是找到加密算法,然后找到对应的密钥等信息,用在线或自己写对应的解密算法,把返回的数据包进行解密。这里也是运气比较好,密钥和偏移量都直接找到了,实际过程中可能反向跟踪找不到,或者采用的是动态密钥和偏移量等等情况。
0x02 另外一个思路
完成了测试工作以后,笔者又看了一下这个系统开发者的源码逻辑,整理出了另外一个思路。首先F12查看一下请求接口调用的JS文件栈跟踪,发现了几个需要关注的参数,e.exports,getLogList等。
在对应的js文件中搜索一下e.exports(别问为什么搜这个,问就是感觉是经验)
看到了e.data和e.headers,说明这个开发小哥还是比较按命名法写的代码,也没做混淆,搜索了几(百)个e.data找到了前端解密的地方。
看到这里愣了一下,其实直接搜decrypt也行(对是经验)。
代码逻辑是如果返回响应e.status是200,那么就调用解密,那么Object(d,a)()就是解密函数了,加个断点验证一下,果然,请求走到了这里。
步进一下,看到了解密后的数据。
这里把数据包跟返回的加密数据包对照了一下,msg字段对应的就是e.data.msg,code字段对应e.data.status,data字段对应e.data.data。那么其实直接搜e.data.data,也可以更快找到(对还是经验)。
找到了解密的函数就好说了,断点在这里,直接可以从控制台就完成解密了,于是后续的测试过程,只需要把测试返回数据丢到控制台解密,就可以顺利的开展工作了。最好是开两个页面,一个做好断点放在这里,另外一个页面去找请求的接口地址。
这个办法相比较找加密算法密钥来说,更容易实现一点,调用开发逻辑本身的函数解密更容易跟踪也更好调试。
0x03 总结
在数据安全愈发被人们重视的今天,数据加密作为除了传输层安全协议之外,又一个通信传输过程中的数据安全保障手段。可能日后会有越来越多的企业使用这样的加密方式进行数据传输中的防护手段,谨以此作为一种在特定情况下提高我们从业人员测试效率的手段及方法,供各位参考。
原文始发于微信公众号(洪椒攻防实验室):一则利用js解密数据包的案例
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论