WELCOME
网络安全·诚邀合作
我们C4安全团队是一支专业、高效、富有经验、团结的信息安全服务团队,由一群经验丰富、技术精湛的安全专家组成,他们在网络安全领域都有各自发光发亮的地方和大量的实战经验。在红蓝攻防、日常渗透测试、CTF比赛中也获取很多优异的成绩,帮助客户解决了很多安全问题,得到了客户的认可。欢迎合作咨询!
扫描二维码
联系合作
原文作者:本团队师傅Tai
分享一个yakit的热加载解密流量的案例
打开一个小程序,发现该小程序的数据包全是POST请求,并且都类似如下这种格式,请求体的requestData做了加密,并且请求体还有nonce和signature签名,看起来非常难搞
开始js逆向,两个部分要逆,一是请求体里requestData的加解密问题,二是数据包的nonce和signature签名问题。
开启小程序调试
"3879696f4c6e5659522a3433266f2e33"
module.exports = {
encrypt: function(r, n, t) {
return v(r, n, 1, t)
},
decrypt: function(r, n, t) {
return v(r, n, 0, t)
}
跟进v函数,其实这里我已经看得眼花缭乱了,不懂算法,直接把v函数丢给AI分析
我们提示AI该算法似乎和sm4有关,让AI帮我们分析
然后就是缺啥函数,就在控制台打印出来给AI,最后也是成功的给我返回了加解密函数的nodejs代码
运行代码,也是成功还原出来请求体的明文数据,不得不说,这AI是真nb
requestData的问题解决,接下来是数据包的签名问题了,在全局搜索signature,翻了一会,找到了一处比较可能的位置,打上断点,再点击功能,果不其然断住了。
Nonce值由l()函数生成
Signature值由g(f, p, o, I)生成
Nonce值的函数破解比较简单,毕竟只是生成随机数而已,在控制台打印l函数再给AI完善一下实现生相应格式的nonce值就可,这里不多说。
跟进到g函数,该函数最终return了s(p + e + u + c)
多调试几次后发现p为固定值
"EvAucyQXqhNrXB23hw8wPw73xHzAHNqipmBFKJTHGzBXTsHpNxR9PgyMhErNEvAu"
e则是随机数nonce,u值是截断后的e,也就是e.substring(5);c值为s(JSON.stringify(t)),里面的t这是请求体里的明文数据。
控制台打印s函数,进去打断点,然后跳到这来了,注意到上面有个sm3,直接复制代码让AI帮我们分析分析,由于心疼无问AI的免费额度,所以我打算问免费的GPT试试
最后GPT也不负众望,给我返回了签名生成代码
用刚才解密的明文数据 生成一对nonce和signature
替换发包验证,服务器返回正常数据,说明校验成功。
至此我们已经完成了改小程序的js算法逆向,接下来要把加解密运用到yakit中。
Yak可以通过js.Run、js.GetFunction调用运行js里的函数,非常方便。
首先我们先解决webfuzzer里的数据包签名加密
主要思路是在beforeRequest函数里对请求包做加密和签名
真正实现功能的yak代码就几行
来看效果,这里我们可以直接对明文的请求数据进行篡改发包,可以看到服务器仍然是正常响应的,不会报500错误
来到历史流量中查看发出去的真实数据包,代码已经为我们加密了请求体并且生成了新的随机数和签名
但是这样还不够,我们还要让MITM中流量全部显示明文,方便我们查看。没有运行热加载之前,我们看到的流量如下,是加密的
实现这点我们需要了解yakit的数据流量走向方式,来判断我们应该在哪些函数中做手脚
现在我们劫持数据包如下图,也是加密,为了在劫持的时候可以看明文并且修改数据包,应该在hijackHTTPRequest函数中对数据包解密
hijackHTTPRequest解密部分代码
光这里解密了还不够呀,因为这样放出去的话数据包还是明文,服务器不接受,所以,我们还得在beforeRequest函数中对数据包进行最后的加密签名,代码如下
如此一来,数据包又被加密了,在MITM看到的流量仍然是密文,所以,我们应该在完整请求包和响应包存进数据库之前,也就是我们在MITM看到该条流量之前,再对请求包做一次解密即可,也就是在hijackSaveHTTPFlow函数中解密
至此,热加载代码已成,运行看下效果
首先是劫持抓包,看到的是明文
MITM流量中,看到也是明文,并且响应包都是正常返回,没有返回500错误;用yak实现了流量全明文的效果,极大地方便了后续的测试。
怎么样,是不是特别简单。
专栏介绍
Freebuf知识大陆内部共享资料截屏详情如下
(每周保持更新,已更新 170+文档,扫码可免费预览)
知识大陆——安全渗透感知大家族
圈子券后现价 ¥39.9元/年 ¥59.9元/永久
(新人优惠券折扣20¥,扫码即可领取优惠)
原文始发于微信公众号(C4安全团队):Yakit热加载实现流量解密
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论