查看原文
其他

JS逆向实战:RPC + Mitmproxy

小惜渗透 刨洞安全团队 2024-02-21

遇到个需求,网站如下,是一个手机号验证码登录,现在的需求是看看这个验证码有没有锁定策略,很简单只要把发送验证码的包用爆破模块,设置单线程并且每过 60秒 发送一次就可以

但是发现这个包有校验,这里请求头中多了四个参数,CustappidTimestampSignatureNonce,发现改动任何一个响应就会失败

接下来去浏览器中,定位相关 js 代码逻辑,其实定位这里有很多方式,常用的两种方式就是全局搜索关键字或看流量堆栈,我习惯第二种,不过依据这次的环境全局搜索来的快一些

逻辑在此,其实那个 signature 我也分析了一波,就是一些值,先 sha256 然后再 md5,不过这次主要是讲 rpc,所以这里不深入展开了,继续,可以看到我们需要的对应函数为 _()

不过这个时候我们去控制台去执行它是不会执行成功的

因为函数作用域问题,所以我们这个时候需要再刚才的 js 代码处打个断点,然后点击发送验证码,触发断点

这个时候我们去控制台调用该函数就可以正常调用了

为了方便实用这个时候我们需要将这个函数设置成全局函数,这样不在 debug 的时候,我们也可以正常调用了

window._ = _

然后我们放行断点后也可以正常调用了

RPC调用

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

下载编译好的 exe,以及 resource 里面的注入代码 jsEnv.js

第一步现将 jsEnv.js 的代码粘贴到控制台执行

然后打开 exe,然后在浏览器控制台先连接通信,记住 group 和 name 的值

var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=group1&name=code");

然后我们注册我们之前的函数 _()

demo.regAction("getinfo"function (resolve) {
    var infos = _();
    resolve(JSON.stringify(infos));
})

然后我们直接访问接口看一下

http://localhost:12080/go?group=group1&name=code&action=getinfo

可以正常调用,然后我们可以用 python 代码获取值

import requests

def get_rpc():
    url = "http://127.0.0.1:12080/go"
    data = {
        "group""group1",
        "name""code",
        "action""getinfo"
    }
    result = requests.post(url, data=data)
    return result.json()['data']

print(get_rpc())

Mitmproxy

接下来就是我们联动 Burp 了,我想让 Burp 发包的时候默认将这些参数给我带上,让我能够正常发包,这里我们可以使用 mitmproxy 来开一个上游代理,然后我们就可以自定义经过的请求包了,注意要 python3.10 以上,用 pip 安装即可

pip install mitmproxy

然后记得装一下 mitmproxy 的证书,先运行一下,然后在用户目录的 .mitmproxy 文件夹下会生成

然后创建 python 脚本

#encrypt.js
import requests
from mitmproxy import ctx

def get_rpc():
    url = "http://127.0.0.1:12080/go"
    data = {
        "group""group1",
        "name""code",
        "action""getinfo"
    }
    result = requests.post(url, data=data)

    return result.json()['data']


def request(flow):

        result = eval(get_rpc())
        flow.request.headers['Nonce'] = result['nonce']
        flow.request.headers['Custappid'] = result['custAppId']
        flow.request.headers['Timestamp'] = str(result['timestamp'])
        flow.request.headers['Signature'] = result['signature']

之后运行 mitmproxy(需要注意的是存在三个程序,我们运行的 mitmproxy 是其中的一个,它的优点就是控制台输出信息较为明朗,但是如果存在 bug 的情况下建议调试使用 mitmdump

mitmproxy.exe -p 8081 -s .\rpc.py

设置 Burp 的上游代理

成功,要注意我们用 burp 发包,burp 上的值没有变是正常的,因为请求经过 mitmproxy 才会被修改

我们可以对比一下,实际上,值已经被修改了


本文作者:小惜渗透原文地址:https://xz.aliyun.com/t/13232


关注公众号后台回复 0001 领取域渗透思维导图,0002 领取VMware 17永久激活码,0003 获取SGK地址,0004 获取在线ChatGPT地址,0005 获取 Windows10渗透集成环境,0006 获取 CobaltStrike 4.9.1破解版


加我微信好友,邀请你进交流群





往期推荐



BeanShell注入内存马

记一次CMS系统通杀0day审计

银狐处置及分析

浅谈安全方向的学习方法

记一次校内的XX系统渗透

极端容器场景下的远程文件下载思路

linux在没有curl和wget的情况下如何用shell实现下载功能

实战下的内网中继攻击问题

对某菠菜的渗透测试笔记

绕过AV进行UserAdd的方法总结及实现

某次近源攻击到内网漫游拿下域控以及Vcenter

某次以目的为导向的内网渗透-取开发源码

APT29利用CVE-2023-38831攻击大使馆

微信PC客户端存在@全体逻辑错误

对某app的加密定位与hook

《永结无间》客户端RCE漏洞

NSA组织"二次约会"间谍软件功能复现及加解密分析

发现新恶意团伙"紫狐"!针对finalshell的供应链事件

记一次渗透中因为JS拿下整个云

APK逆向分析入门-以某车载音乐APP为例

记一次红队经历

WordPress Core RCE Gadget 分析

Juniper 新洞 CVE-2023-36845 浅析

备用号,欢迎关注


继续滑动看下一个

JS逆向实战:RPC + Mitmproxy

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存