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

访客6年前黑客文章855

几周前我对某个手机银行使用进行测验。这个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]  黑客接单网

相关文章

综合利用SlickQuiz两个0-Day漏洞接管Uber的WordPress网站-黑客接单平台

本文叙述作者在参与HackerOne的H1-4420竞赛中,针对厂商Uber的某WordPress博客网站为方针,发现其内置问卷调查插件SlickQuiz最新版存在存储型XSS(CVE-2019-12...

代码审计之Fiyo CMS事例共享

Fiyo CMS是小型的商务电话服务及移动协作东西,由一名前职业学校学生初次开发和创立的,后者其时在RPL的SMK 10三宝垄学习。 那时他的姓名不是Fiyo CMS,而是Sirion,它是Site...

瞄准Chrome凭据的新威胁已现身-黑客接单平台

CyberArk最近捕获了一个风趣的歹意软件样本。它与惯例的偷盗凭证歹意软件,如Pony或Loki的不同之处在于,它只针对最常见的浏览器——谷歌Chrome。 该歹意样本没有被混杂,但却能够躲避大多数...

一个MongoDB注入进犯事例剖析

在开端咱们的MongoDB“注入之旅”之前,咱们需求先知道和其他数据库比较,为什么咱们更乐意选MongoDB——由于MongoDB并不是SQL作为查询句子,所以人们可能会认为这样的数据库难以进行注入进...

安全防备:nginx下git引发的隐私走漏问题

1   安全事情 最近阿里云服务器后台办理体系中收到一条安全提示音讯,体系装备信息走漏: http://my.domain.com/.git/config 能够被公网无认证即可拜访,请修正。...

下一代网络钓鱼技术——滥用Azure信息保护功能-黑客接单平台

在这篇文章中,咱们将从攻击者的视点介绍怎么运用Azure信息维护(Azure Information Protection,AIP)来改善网络垂钓技能。这个主意是在一次测验作业进程中发生的,其时我正在...