运用Frida合作Burp Suite追寻API调用

访客5年前黑客文章824

几周前我对某个手机银行使用进行测验。这个app用了一个结构,这个结构能够混杂、加密app与服务器进行的TLS衔接。我用Frida截获了加密环节之前的明文恳求/呼应。我期望能够修正截获的API调用,然后看看长途服务器是怎么呼应的,但这样的话我每次都得修正Frida脚本。
Burp是用来进行web测验的东西,而关于移动使用的测验应该也大致相同。我想要让burp跟frida合作起来,截获/修正burp中的API调用。虽然我没做Burp的插件,可是用一个小脚本咱们就能够截获API调用了,这省去了修正脚本中API参数的很多时刻。
截获API恳求并不费事:
1.    树立Burp监听端口(如26080端口)将流量转发到回显服务器(如27080端口)
2.    回显服务器在27080端口监听
3.    用Frida同步发送HTTP恳求到Burp监听端口
Burp就会接纳到Frida发送的API恳求。咱们就能够修正Burp中收到的调用,然后把数据转发到回显服务器。回显服务器会将修正恳求后收到的呼应发还给Frida。
设置Burp监听端口
咱们先开端设置Burp的监听端口。我已经在藏匿署理形式中启用了26080作为监听端口:

Python tracer代码
我挑选对已有的frida-trace代码进行修正和拓宽,让其具有trace东西那样的灵活性。
以下的这段Python代码能够让frida-trace代码与你转发API调用的服务器合作。它能够将HTTP恳求发送到咱们本地的Burp监听端口。你也能够在HTTP头部参加API调用的元数据,或许参加URL途径加以区别。
现在的代码或许依靠版别号,我不知道未来的版别会不会有改变,至少现在它能兼容Frida 8.2.2。
from frida import tracer
import requests
BURP_HOST = "localhost"
BURP_PORT = 26080
def frida_process_message(self, message, data, ui):
    handled = False
    if message['type'] == 'input':
        handled = True
    elif message['type'] == 'send':
        stanza = message['payload']
        if stanza['from'] == '/http':
            req = requests.request('FRIDA', 'http://%s:%d/' % (BURP_HOST, BURP_PORT), headers={'content-type':'text/plain'}, data=stanza['payload'])
            self._script.post({ 'type': 'input', 'payload': req.content })
            handled = True
    if not handled:
        self.__process_message(message, data, ui)
tracer.Tracer.__process_message = tracer.Tracer._process_message
tracer.Tracer._process_message = frida_process_message
if __name__ == '__main__':
    print("[x] To intercept in Burp, set up an invisible proxy listening on port %d, forwarding to the echo server." % BURP_PORT)
    tracer.main()
Trace handler脚本
下面的脚本能够用来截获onLeave 函数中的read()调用。你能够依据自己需求修正。咱们只需要转发/截取你想要修正的那些参数。
我经过Frida的send() API完成了功用。这个调用被Python脚本接纳,然后发送到handler脚本,然后当咱们在BurpSuite中修正恳求时,脚本会等候呼应,然后履行回调函数。
{
    onEnter: function (log, args, state) {
        log("read(" + "fd=" + args[0]+ ", buf=" + args[1]+ ", count=" + args[2] + ")");
        state.buf = args[1]
    },
    onLeave: function (log, retval, state) {
        send({from: '/http', payload: Memory.readUtf8String(state.buf)})
        var op = recv('input', function(value) { // callback function
            log("Forwarding mitm'ed content: " + value.payload)
            Memory.writeUtf8String(state.buf, value.payload)
        });
        op.wait();
    }
}
回显服务器
以下脚本完成的功用是对Frida宣布的恳求做出呼应,会先request payload。你也能够依据自己的需求进行修正。
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
from optparse import OptionParser
ECHO_PORT = 27080
class RequestHandler(BaseHTTPRequestHandler):
    def do_FRIDA(self):
        request_path = self.path
        request_headers = self.headers
        content_length = request_headers.getheaders('content-length')
        length = int(content_length[0]) if content_length else 0
        self.send_response(200)

[1] [2]  黑客接单网

相关文章

运用Subversion完成网站自动更新

Subversion概述     概述     Subversion,简称SVN,是一个开放源代码的版别控制体系,相对于的RCS、CVS,采用了分支办理体系。     网站更新拓扑结构       ...

Web爬虫:多线程、异步与动态署理开始

在收集数据的时分,经常会碰到有反收集战略规矩的WAF,使得原本很简略工作变得复杂起来。黑名单、约束拜访频率、检测HTTP头号这些都是常见的战略,不按常理出牌的也有检测到爬虫行为,就往里注入假数据回来,...

Zabbix运用Pycurl模块监控web页面状况

因为网络的问题,zabbix自带web模块用不了,后台研制2b,老是更新正式环境安装包,导致一向出问题,老是给他们擦屁股,早说过这事,他们不合作,现在出问题了,挺爽j_0025.gif,这锅我表明不背...

使用“进程注入”完成无文件复生 WebShell

上周末,一个好兄弟找我说一个很重要的方针shell丢了,这个shell之前是经过一个S2代码履行的缝隙拿到的,现在缝隙还在,不过web目录悉数不可写,问我有没有办法搞个webshell持续做内网。正好...

DVWA 1.10 High等级的CSRF另类通关法-黑客接单平台

网上有许多关于CSRF High等级的通关记载,可是都有一个缺点,没有做到主动触发修正暗码。这儿记载了我在解题时的思路,趁便共享出来抛砖引玉,期望大佬们不吝赐教哈 0×00 简略剖析一下CSRF后端...

RIG exploit kit:歹意活动剖析陈述

尽管攻击方式不算复杂,但是RIG仍然能通过一些恶意软件活动获得较大的流量。而那些利用被黑站点和恶意广告,重定向到RIG的流量,是通过服务端的302跳转机制,或者是通过客户端的iframe和JS脚本...