某众测前端解密学习记录

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

0x00 前言

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

0X01 分析前端加密函数

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

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

image.png

打上断点,开始调试
image.png
找到相关函数,点击步入

image.png
找到关键解密函数

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

image.png

0x02 jsrpc注入

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

2-1

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

启动项目

image.png

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

group与name自行修改

image.png

测试是否通信成功

image.png

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

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

image.png

2-3 多参数调用

  1. demo.regAction("dec", function (resolve,param) {
  2. //这里还是param参数 param里面的key 是先这里写,但到时候传接口就必须对应的上
  3. res=dec(param,window.cxcrmAesKey)
  4. resolve(res);
  5. })
  6. demo.regAction("enc", function (resolve,param) {
  7. //这里还是param参数 param里面的key 是先这里写,但到时候传接口就必须对应的上
  8. res=enc(param,window.cxcrmAesKey)
  9. resolve(res);
  10. })

image.png

0x03 联动autoDecoder

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

image.png

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

  1. import requests
  2. import json
  3. from urllib.parse import quote
  4. app = Flask(__name__)
  5. url = "http://localhost:12080/go"
  6. @app.route('/encode',methods=["POST"])
  7. def encrypt():
  8. param = request.form.get('dataBody') # 获取 post 参数
  9. #print(json.dumps(param))
  10. param_headers = request.form.get('dataHeaders') # 获取 post 参数
  11. param_requestorresponse = request.form.get('requestorresponse') # 获取 post 参数
  12. data = {
  13. "group": "zz",
  14. "name": "gg",
  15. "action": "enc",
  16. "param": json.dumps(param)
  17. }
  18. res = requests.post(url, data=data) #这里换get也是可以的
  19. encry_param = json.loads(res.text)['data']
  20. print(encry_param)
  21. if param_requestorresponse == "request":
  22. return param_headers + "\r\n\r\n\r\n\r\n" + encry_param
  23. return encry_param
  24. @app.route('/decode',methods=["POST"])
  25. def decrypt():
  26. param = request.form.get('dataBody') # 获取 post 参数
  27. param_headers = request.form.get('dataHeaders') # 获取 post 参数
  28. param_requestorresponse = request.form.get('requestorresponse') # 获取 post 参数
  29. print(param)
  30. data = {
  31. "group": "zz",
  32. "name": "gg",
  33. "action": "dec",
  34. "param": param
  35. }
  36. res = requests.post(url, data=data) #这里换get也是可以的
  37. decrypt_param = json.loads(res.text)['data']
  38. print(decrypt_param)
  39. if param_requestorresponse == "request":
  40. return param_headers + "\r\n\r\n\r\n\r\n" + decrypt_param
  41. else:
  42. return decrypt_param
  43. if __name__ == '__main__':
  44. app.debug = True # 设置调试模式,生产模式的时候要关掉debug
  45. app.run(host="0.0.0.0",port="8888")

image.png
抓包测试下是否调试成功

image.png

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

image.png

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

image.png

0X04 总结

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

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

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

  • 发表于 2024-04-15 10:13:29
  • 阅读 ( 7752 )
  • 分类:渗透测试

3 条评论

lei_sec
lei_sec

2 篇文章

站长统计