本文是挖洞高手「Ness_a」分享的技术文章,公众号旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。
三年甲方安全工作经验,负责漏洞挖掘、安全体系架构、IOT安全,是多家众测平台的核心测试人员,蝉联多家SRC年榜TOP。
很多Web、H5、APP、小程序为了增加攻击成本和安全性,会把Request及Response的数据进行加密,这种加密原理其实无非就是在Js文件中调用 1个或者多个Js文件(或函数),把原有的明文信息,按照Js中的加密逻辑生成密文,但这种方式也是可逆的。
本文是我结合实际案例总结出来的一个比较“笨”但是有效的方法,即找到加密位置、copy加密函数、微调直接跑,这个方法其实可以应对大多数的前端加解密,希望对小伙伴们有所借鉴。
该H5应用为例,抓包查看,可以看到里面无论响应包或是请求包关键信息都直接是密文。
![【Js逆向】浅析前端加解密 【Js逆向】浅析前端加解密]()
1.初步分析是何种加密,RSA、AES或者Base64加盐;
3.F12根据API直接断点调试,逐步跟进堆栈(对于APP的话可能需要逆向APK了,对于微信小程序的话需要找到本地的缓存js);
1.观察bdata中数据,data、key一眼AES,既然是AES那就首先要联想到如下内容:
(3)如果AES为动态key,找到具体AES函数,分析运行流程
2.既然已知是AES加密,那么直接F12大法,搜索关键字如:AES、AESKEY等,刚好在某js文件里直接找到了相关函数:
![【Js逆向】浅析前端加解密 【Js逆向】浅析前端加解密]()
分析该函数,就是刚刚提到过的动态key,既然如此,肯定有其他函数调用了getAesKey(),那先把getAesKey()copy出来,放在txt。
3.已经找到了getAesKey函数,继续跟进调用到这个函数的位置,继续F12大法。
![【Js逆向】浅析前端加解密 【Js逆向】浅析前端加解密]()
![【Js逆向】浅析前端加解密 【Js逆向】浅析前端加解密]()
第四个搜索结果如下,直接看到了关键特征bdata,放回。
![【Js逆向】浅析前端加解密 【Js逆向】浅析前端加解密]()
4.细致分析doPostRequest函数,把其中涉及到的所有自定义函数提取出来后,再次放在txt备忘,同时也方便做逻辑梳理(所以说分析算法和细致化渗透时,txt备忘很关键)
GetAesKey--encryptData--sendPost--decrypt
根据调用的函数名,合理猜测,直接就是主函数,类似于C语言中的main,做各种函数调用,同时也是程序入口。
![【Js逆向】浅析前端加解密 【Js逆向】浅析前端加解密]()
那就去一步步调试看下,一旦定位到关键主函数,笨方法就是直接全打上断点,一个个去看去分析各种函数会生成什么样的值。
![【Js逆向】浅析前端加解密 【Js逆向】浅析前端加解密]()
先看入参,传进来了一个API接口并命名为url,data数据就为明文body,这个时候回想一下我们的目标是什么?我们想要的是可以直接明文输入,然后js直接把我们的明文加密为后端可识别密文,于是思路就变为,直接在doPostRequest函数做改动,然后自行输入url和明文,再直接加密输出。
继续跟进看下,url就是直接拼接成baseurl+api没啥好说的,把data数据打印出来看下,然后分析这个API接口所在的js文件函数,发现里面lgParam和ipAdr就是一个固定的值,不管是请求哪个API都要带上,lgParam里面是session,ipAdr是IP地址,IdentNo和Itype就是这个API中必填的请求参数。
![【Js逆向】浅析前端加解密 【Js逆向】浅析前端加解密]()
继续跟进,调用aesKey函数就直接拿到一个aesKey密钥。
![【Js逆向】浅析前端加解密 【Js逆向】浅析前端加解密]()
继续跟进,可以看到这里调用了encryptData函数并且传入了两个值,一个是data一个是aesKey,所以我们定位到了初步加密的地方和函数。
![【Js逆向】浅析前端加解密 【Js逆向】浅析前端加解密]()
后面要做的就是继续跟进函数,把所有doPostRequest函数中有调用到的函数例如:encryptData等等全部copy出来,再把这些子函数调用到的其他函数全都copy出来,然后再改改格式,就可以了,类似于apk的hook。
最后的脚本就类似如下,写了个start函数用来传参也就是api和明文body,然后其他需要输出的关键参数值加上console.log,再引用doPostRequest函数,最后调用start函数就ok了。
![【Js逆向】浅析前端加解密 【Js逆向】浅析前端加解密]()
![【Js逆向】浅析前端加解密 【Js逆向】浅析前端加解密]()
目前很多行业Web端、移动端都开始卷前端加密,很多师傅们遇到了加密传参就直接pass掉,转头看下个资产,但其实有些厂商会抱有“做了加密传输,我很安全”这种侥幸心理,所以只要解出加密逻辑,很可能多站通用、多漏洞产出。
从攻击层面来说,一切前端参数加密都是可逆的,关键点如下:
从防御层面来说,要拒绝信任一切用户传参,哪怕是做了各种加密,从底层(服务端)做好安全管控。
原文始发于微信公众号(i春秋):【Js逆向】浅析前端加解密
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/2429213.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论