某众测前端解密学习记录

admin 2024年4月19日03:28:45评论2 views字数 2614阅读8分42秒阅读模式

免责声明:由于传播、利用本公众号李白你好所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号李白你好及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

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

1

前言

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

2

分析前端加密函数

找到加密解密函数位置

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

某众测前端解密学习记录

打上断点,开始调试
某众测前端解密学习记录
找到相关函数,点击步入

某众测前端解密学习记录
找到关键解密函数

r = JSON.parse(Object(u["a"])(e, window.cxcrmAesKey));

某众测前端解密学习记录

3

技术细节

项目地址:

https://github.com/jxhczhl/JsRpc

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

启动项目

某众测前端解密学习记录

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

group与name自行修改

某众测前端解密学习记录

测试是否通信成功

某众测前端解密学习记录

注入环境变量

(此动作要在页面调试中追踪到相关函数才能执行,不然会报错)

加密:window.enc = Object(u["b"])解密:window.dec = Object(u["a"])

某众测前端解密学习记录

多参数调用

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);})

某众测前端解密学习记录

4

联动autoDecoder

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

某众测前端解密学习记录

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

import requestsimport jsonfrom urllib.parse import quoteapp = 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 + "rnrnrnrn" + 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 + "rnrnrnrn" + decrypt_param      else:          return decrypt_param  if __name__ == '__main__':      app.debug = True # 设置调试模式,生产模式的时候要关掉debug      app.run(host="0.0.0.0",port="8888")

某众测前端解密学习记录
抓包测试下是否调试成功

某众测前端解密学习记录

某众测前端解密学习记录
调试成功后在burp里插件里选项改为接口加解密

某众测前端解密学习记录

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

某众测前端解密学习记录

5

总结

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

某众测前端解密学习记录
既然已经联动burp后续可以联动Mitmproxy,xray,sqlmap等,解决了加密问题后思路就跟常规渗透一样了

参考:
jxhczhl/JsRpc: 远程调用(rpc)浏览器方法,免去抠代码补环境 (github.com)

https://mp.weixin.qq.com/s/mcvAeEEyvjmV4E4xoaHVUQhttps://github.com/f0ng/autoDecoder原文作者:lei_sec文章来源:https://forum.butian.net/share/2889

6

原文始发于微信公众号(李白你好):某众测前端解密学习记录

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月19日03:28:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   某众测前端解密学习记录https://cn-sec.com/archives/2668989.html

发表评论

匿名网友 填写信息