漏洞挖掘-记某次众测的加解密对抗

前言

起源于某次众测中,遇到请求包响应包全密文的情况,最终实现burp中加解密。

用到的工具有

  • sekiro(rpc转发)
  • flask(autodecoder自定义接口)
  • autodecoder(burp插件转发)

debug部分

开局搜索框,随意输入字符。

图片[1]-漏洞挖掘-记某次众测的加解密对抗-山海云端论坛

从burp查看后端请求,发现请求包响应包均为密文

猜测应该是前端进行了加密操作,接着尝试debug出加密逻辑。

图片[2]-漏洞挖掘-记某次众测的加解密对抗-山海云端论坛

先从启动器中寻找接口触发的函数,这里通过定位getData函数

图片[3]-漏洞挖掘-记某次众测的加解密对抗-山海云端论坛

然后通过F10跳过函数,最终到加密处如下

图片[4]-漏洞挖掘-记某次众测的加解密对抗-山海云端论坛

观察be35包,当调用b的时候,返回了s,及AES加密。当调用a的时候,返回了o,及AES解密。分析这个AES的加解密,key和iv均不为硬编码,这也是后续RPC的最难点。

对于RPC来说,这一步需要我们将加解密函数添加到全局,也就是window.enc=Object(r[“b”])//加密
window.dec=Object(r[“a”])//解密

添加完之后,还有key和iv需要解决。

这里当时临时解决办法是通过debug当时的key和iv,通过硬编码的形式来进行加解密。

js注入部分

首先需要在sekiro中新建group,不然匿名分组会慢很多。

这里由于我进行的本地rpc,需要将wss协议更换为ws

下面是针对debug的函数做出的加解密方法注册。client.registerAction(“aes_enc”,function(request, resolve, reject){//加密
resolve(enc(request[“enc_par”],request[“key”],request[“iv”]);
});

client.registerAction(“aes_dec”,function(request, resolve, reject){//解密
resolve(enc(request[“dec_par”],request[“key”],request[“iv”]);
});

其中 enc 调用的是debug时注册的全局加密函数,request["xxx"]为调用 sekiro http接口的参数名,其他用法可参考使用文档。

burp上游代理部分

这里使用的autodecoder这款burp插件的接口加解密来作为上游代理,这里通过python的flask框架来编写二层接口加解密。以下是加密接口实现,解密同理。

@app.route(‘/aes_encode’, methods=[“POST”])
def encrypt():
param = request.form.get(‘dataBody’)# 获取 post 参数
data ={
“group”: “分组名”,
“sekiro_token”: “xxxxx”,#在sekiro的管理页面
“action”: “aes_enc”,#注册的action名字
“enc_par”: param,
“bind_client”: “设备名”,
“key”: key,
“iv”: iv
}
res = requests.post(url, data)
enc = json.loads(res.text)[‘data’]
return enc

需要注意的是bind_client参数为设备ID,这个参数需要加上,不然会导致多设备转发出错,参考官方文档。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容