前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Src挖掘-某众测前端解密学习记录

Src挖掘-某众测前端解密学习记录

作者头像
亿人安全
发布2024-04-19 19:43:22
1210
发布2024-04-19 19:43:22
举报
文章被收录于专栏:红蓝对抗红蓝对抗

原文链接:

https://forum.butian.net/share/2889

某次大型金融公司众测,抓包发现都是加密数据,经过Jsrpc与autoDecoder学习调试后,最后也是成功还原数据包,挖掘出高危漏洞。分享经验,希望对大家有所帮助。

0x00 前言

相信不少朋友挖掘src时或金融项目中,遇到数据包加密的目标直接放弃,其实不然,随着时代变迁,此类项目只会越来越多,掌握破解之法才是关键。

0X01 分析前端加密函数

1-1找到加密解密函数位置

开启f12,控制台中找到对应加解密Js位置

打上断点,开始调试

找到相关函数,点击步入

找到关键解密函数

代码语言:javascript
复制
r = JSON.parse(Object(u["a"])(e, window.cxcrmAesKey));

0x02 jsrpc注入

项目地址:https://github.com/jxhczhl/JsRpc

2-1

控制台中注入此项目中resouces/JsEnv_Dev.js

启动项目

代码语言:javascript
复制
// 注入环境后连接通信
var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=zzz&name=hlg");

group与name自行修改

测试是否通信成功

2-2 注入环境变量 (此动作要在页面调试中追踪到相关函数才能执行,不然会报错)

代码语言:javascript
复制
加密:window.enc = Object(u["b"])
解密:window.dec = Object(u["a"])

2-3 多参数调用

代码语言:javascript
复制
demo.regAction("dec", function (resolve,param) {
    //这里还是param参数 param里面的key 是先这里写,但到时候传接口就必须对应的上
    res=dec(param,window.cxcrmAesKey)
    resolve(res);
})

demo.regAction("enc", function (resolve,param) {
    //这里还是param参数 param里面的key 是先这里写,但到时候传接口就必须对应的上
    res=enc(param,window.cxcrmAesKey)
    resolve(res);
})

0x03 联动autoDecoder

jsrpc设置好后,就可以联动f神写的autoDecoder了,先上一张原理图

f神在项目中也提供了flasktest.py,这里要修改一下结合jsrpc提供的接口,代码如下(与前文设置参数要对应)

代码语言:javascript
复制
import requests
import json
from urllib.parse import quote

app = Flask(__name__)  
url = "http://localhost:12080/go"
@app.route('/encode',methods=["POST"])  
def encrypt():  
    param = request.form.get('dataBody')  # 获取  post 参数  
    #print(json.dumps(param))
    param_headers = request.form.get('dataHeaders')  # 获取  post 参数  
    param_requestorresponse = request.form.get('requestorresponse')  # 获取  post 参数  
    data = {
        "group": "zz",
        "name": "gg",
        "action": "enc",
        "param": json.dumps(param)
    }
    res = requests.post(url, data=data) #这里换get也是可以的
    encry_param = json.loads(res.text)['data']
    print(encry_param)
    if param_requestorresponse == "request":  
        return param_headers + "\r\n\r\n\r\n\r\n" + encry_param  
    return encry_param

@app.route('/decode',methods=["POST"])  
def decrypt():  
    param = request.form.get('dataBody')  # 获取  post 参数  
    param_headers = request.form.get('dataHeaders')  # 获取  post 参数  
    param_requestorresponse = request.form.get('requestorresponse')  # 获取  post 参数  
    print(param)
    data = {
        "group": "zz",
        "name": "gg",
        "action": "dec",
        "param": param
    }
    res = requests.post(url, data=data) #这里换get也是可以的
    decrypt_param = json.loads(res.text)['data']
    print(decrypt_param)
    if param_requestorresponse == "request":  
        return param_headers + "\r\n\r\n\r\n\r\n" + decrypt_param  
    else:  
        return decrypt_param  

if __name__ == '__main__':  
    app.debug = True # 设置调试模式,生产模式的时候要关掉debug  
    app.run(host="0.0.0.0",port="8888")

抓包测试下是否调试成功

调试成功后在burp里插件里选项改为接口加解密

抓包后选择加密部分右键点击插件Decode-即可解密

0X04 总结

后续调试出明文后,也是成功挖掘出高危漏洞

既然已经联动burp后续可以联动Mitmproxy,xray,sqlmap等,解决了加密问题后思路就跟常规渗透一样了

参考: jxhczhl/JsRpc: 远程调用(rpc)浏览器方法,免去抠代码补环境 (github.com) https://mp.weixin.qq.com/s/mcvAeEEyvjmV4E4xoaHVUQ https://github.com/f0ng/autoDecoder

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 亿人安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言
    • 0X01 分析前端加密函数
    • 0x02 jsrpc注入
      • 2-1
        • 2-2 注入环境变量 (此动作要在页面调试中追踪到相关函数才能执行,不然会报错)
          • 2-3 多参数调用
          • 0x03 联动autoDecoder
            • 0X04 总结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档