原文链接:https://xz.aliyun.com/t/16093
某天大师傅dd我,帮忙看一眼某资产的app
下载下来看后,抓包,数据包加密了,并且存在sign+nonce+时间戳
虽然经常会去处理app的加密数据包,只会针对特定接口测试,手动生成sign去重放数据包
太懒了始终没整合进插件里自动替换测试过
趁这次机会精进一下autodecoder的插件使用
就是费脑子,一整个下午才搞定插件+接口,太菜了
思路梳理
下载了ios和android两个版本的app,发现存在flutter,使用小黄鸟vpn模式抓包
经过抓包判定,发现该app的对抗策略ios远大于android,存在fingerprinthash,类似于风控
ios的object c逆向成本太高,放弃
数据包类似于这样
与其慢慢翻代码,不如偷点懒,果断启动算法助手,暴力hook全局算法
很幸运,这款app的算法没有在so层和js层,直接写在了java层
看一眼便知道了加密逻辑 && 密钥
至于为什么要用真机,因为有些app不但对root环境进行检查测(好绕),还会对虚拟机环境检测(难绕)
手动对照了几次,大致梳理了一下加密逻辑和生成sign的逻辑
通过源码对照,nonce为uuid,timestamp为正常时间戳
在ios和android上抓包验证,采用相同密钥均可以解密,证明思想和密钥无误
技术实现
这里采用f0ng师傅的autodecoder的burp插件
https://github.com/f0ng/autoDecoder
根据要求,我们实现的是自实现的接口加解密
配置如下图所示
为什么要勾上对数据包头进行处理。当你多阅读即便官方提供的模板源码,就明白了
如果不勾上,实际测试getheaders获得的所有数据都是空的
官方demo
https://github.com/f0ng/autoDecoder/blob/main/flasktestheader.py
ps:严重吸取教训,别自主主张,老老实实按demo来
先实现简单解密的路由接口
decrypt_aes_data为自定义函数,懂得都懂,师傅们凑合着写,不踩坑就行
再实现加密路由
修改post内容----》生成新的nonce+时间戳----》生成新的sign----》替换----》生成新的加密主体
踩坑点: 此处我们获取的json数据,有转义字符串,直接在python里aes解密会加上无关的东西 得先strip()一下 千万别用re模块自动去掉转义字符串!!!血泪教训
然后正则匹配里也自以为聪明的踩坑了,这里把大小写都加上了(尴尬)
为什么最终return的是enc_body,因为明文是给自己看的,服务端还是要密文
在接口测试中,成功加解密+实现sign/nonce/时间戳自动替换
在burp的intruder的模块成功实现自动爆破,完事!
圈子专注于更新src相关:
1、维护更新src专项漏洞知识库,包含原理、挖掘技巧、实战案例
2、分享src优质视频课程
3、分享src挖掘技巧tips
4、微信小群一起挖洞
所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.
原文始发于微信公众号(神农Sec):记某app使用autodecoder插件绕过加密数据包+重放防护
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论