mitm工具--抓包(支持脚本)

8.12 mitm工具

8.12.1 简介

     mitmproxy是一组工具,可为HTTP / 1,HTTP / 2和WebSockets提供交互式,支持SSL / TLS的拦截代理

     mitmproxy项目的工具是一组暴露通用底层功能的前端。当我们谈论“ mitmproxy”时,我们通常指这三种工具中的任何一种-它们只是同一核心代理的不同前端。

  • mitmproxy是具有SSL / TLS功能的交互式拦截侦听代理,具有用于HTTP / 1,HTTP / 2和WebSockets的控制台界面。
  • mitmweb是用于mitmproxy的基于Web的界面。
  • mitmdumpmitmproxy的命令行版本。将tcpdump用于HTTP。

     我们使用这个工具,主要是使用mitmdump功能,为了解决问题: 在不同的终端上可以抓包,Charles只能在有页面的时候进行

8.12.2 学习网站

       brew install mitmproxy

8.12.3 mitmweb配置

  • 第一步,配置浏览器的代理

       

  • 第二步:启动 mitmweb 启动时,记得带参数:要代理的端口号和服务IP

            mitmweb --listen-host 127.0.0.1 --listen-port 8666

  • 第三步:使用配置好的代理

         

  • 第四步:访问http://mitm.it/ 下载证书

        

  • 第五步:授信证书

8.12.4 mitmweb演示

  • 启动mitmweb

       

        默认打开浏览器http://127.0.0.1:8081/ ,默认监听端口8080

        如需修改默认端口:mitmweb -p 9999

  •  发送请求:  curl https://baidu.com -x 127.0.0.1:8080 -k

       

8.12.5 mitmdump常见用法

参考官网:https://docs.mitmproxy.org/stable/concepts-filters/

8.12.5.1 录制回放

  •      mitmdump -w tmp   录制,并将内容写入文件tmp
  •      mitmdump -nr tmp   回放tmp文件中的请求     (n代表no server,不启动服务器)

8.12.5.2 过滤

  •    mitmdump -nr tmp -w tmp2 "~s baidu"    将tmp文件中的内容回放并将符合条件的请求写入tmp2文件,~s 响应中包含内容baidu 

           

        强大之处:: 可以使用脚本进行扩展

8.12.5.3 脚本

      官网地址:https://docs.mitmproxy.org/stable/addons-scripting/

  • 代码: mymitmproxy.py
from mitmproxy import http


def request(flow: http.HTTPFlow) -> None:
    if "baidu.com" in flow.request.pretty_url :
        flow.response = http.HTTPResponse.make(
            200,  # (optional) status code
            b"Hello World",  # (optional) content
            {"Content-Type": "text/html"}  # (optional) headers
        )
  • 运行:mitmdump -s mymitmproxy.py

        

  • 访问baidu.com

      

8.12.6  实战

8.12.6.1 Charles抓取雪球的股票列表页,将第一条的数据进行更改(maplocal)

  • 用Charles抓取模拟器上的包
  • 将相应结果存储到文件text.json中,注意文件格式
  • 使用Charles的map local 功能

        

       

  • 刷新模拟器的APP页面,数据已经更新

         

8.12.6.2 mitmdump 实现maplocal

  • 代码:mymitmproxy.py
from mitmproxy import http

def request(flow: http.HTTPFlow) -> None:
    if "quote.json" in flow.request.pretty_url :
        with open('text.json',encoding='utf-8') as f:

            flow.response = http.HTTPResponse.make(
                200,  # (optional) status code
                f.read(),  # (optional) content
                {"Content-Type": "application/json"}  # (optional) headers
            )
  • 运行mitmdump -s mymitmproxy.py
  • 注意要更改模拟器的代理端口为mitmdump的默认端口8080
  • 注意要将代理切换至mitmdump的配置中

        

8.12.6.2  有兴趣可以更改下返回数据

           

            

           

           

 

posted @ 2020-08-12 19:56  pretend_smile  阅读(2905)  评论(0编辑  收藏  举报