沙滩星空的博客沙滩星空的博客

使用mitmproxy做抓包和中间人攻击

中间人攻击简介

中间人攻击(Man-in-the-MiddleAttack,简称MITM攻击)是一种间接的入侵攻击,这种攻击模式是通过各种技术手段, 将受入侵者控制的一台计算机,虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为中间人

安装mitmproxy

pip install mitmproxy

本质上是安装mitmproxy库的相关代码和mitmproxy.exe mitmdump.exe mitmweb.exe三个可执行程序。
Linux 则会在安装目录出现 mitmproxy mitmdump mitmweb 三个可执行程序。

mitmproxy : 命令交互界面
mitmweb : Web图形界面 地址:http://127.0.0.1:8081/
mitmdump : 可编程接口

from mitmproxy import ctx
......
ImportError: DLL load failed while importing _brotli: 找不到指定的模块。

错误位置:

Python39\site-packages\brotli.py line 8

importing _brotli

谷歌之,报错原因为缺少 redist
我的电脑系统为windows10_64位。下载并安装 vc_redist.x64.exe。即可解决。

https://support.microsoft.com/en-gb/help/2977003/the-latest-supported-visual-c-downloads

x86: vc_redist.x86.exe
x64: vc_redist.x64.exe

编写代理脚本文件

my_demo.py

from mitmproxy import ctx

# 所有发出的请求数据包都会被这个方法所处理
# 所谓的处理,我们这里只是打印一下一些项;当然可以修改这些项的值直接给这些项赋值即可
def request(flow):
    # 获取请求对象
    request = flow.request
    # 实例化输出类
    info = ctx.log.info
    # 打印请求的url
    info(request.url)
    # 打印请求方法
    info(request.method)
    # 打印host头
    info(request.host)
    # 打印请求端口
    info(str(request.port))
    # 打印所有请求头部
    info(str(request.headers))
    # 打印cookie头
    info(str(request.cookies))

# 所有服务器响应的数据包都会被这个方法处理
# 所谓的处理,我们这里只是打印一下一些项
def response(flow):
    # 获取响应对象
    response = flow.response
    # 实例化输出类
    info = ctx.log.info
    # 打印响应码
    info(str(response.status_code))
    # 打印所有头部
    info(str(response.headers))
    # 打印cookie头部
    info(str(response.cookies))
    # 替换响应报文内容
    response.text = response.text.replace('百度', '摆渡')

启动代理

mitmdump -s mitmdump.py -p 8083

配置二级代理

mitmproxy拦截流量,并通过特定规则,对不同流量进行二次代理转发
设本地有3个端口:
8889 mitmproxy
1080 默认代理1号(V2YYY)
1234 代理2号(SS)

mitmdump --mode upstream:http://127.0.0.1:1080 -s mitmdump.py -p 8889

mitmdump.py

from mitmproxy.http import HTTPFlow


def request(flow: HTTPFlow):
    # 获取请求对象
    flow.request.headers["sec-ch-ua-platform"] = "Windows"
    flow.request.headers["header-key-hello"] = "halll value"
    if flow.request.method == 'CONNECT':
        return
    if flow.live:
        flow.live.change_upstream_proxy_server(('127.0.0.1', 1234))
https://blog.csdn.net/qq_27648991/article/details/105797785
https://www.jianshu.com/p/dfd1e2753d71

生成并安装SSL证书

生成CA证书文件

自动生成

mitmproxy 或 mitmdump 命令首次运行时,会默认在用户家目录 ~/.mitmproxy 路径创建证书文件。

mitmdump 

输入以上命令,会在用户家目录 .mitmproxy 文件夹,生成mitmproxy-ca-cert.p12等证书文件。

手动下载

浏览器连接mitm的代理端口后,访问 http://mitm.it/ 网站下载对应平台的证书文件。

mitmproxy-ca-cert.p12  PKCS12格式证书私钥  Windows Other
mitmproxy-ca-cert.pem  Linux macOS iOS Firefox Other
mitmproxy-ca-cert.cer  Android

mitmproxy-ca.p12 : ----PKCS12格式证书私钥
mitmproxy-ca.pem : ----PEM格式证书私钥
mitmproxy-ca-cert.cer : ----PEM格式证书,与mitmproxy-ca-cert.pem同,适用于部分Android
mitmproxy-ca-cert.p12 : ----PKCS12格式证书,适用于Windows
mitmproxy-ca-cert.pem : ----PEM格式证书,适用于大多数非Windows平台。如 Linux macOS iOS
mitmproxy-dhparam.pem : ----PEM格式密钥文件,用于增强SSL安全性

安装CA证书

安装在浏览器上: 谷歌浏览器 -- 设置 -- 安全 -- 管理证书 -- 授权机构 -- 导入

安装在操作系统上:
Windows安装证书:双击mitmproxy-ca-cert.p12----全部默认直接点“下一步”直到安装完成。
Android安装证书:把mitmproxy-ca-cert.cer通过usb复制到手机上----点击使用证书安装器安装证书


Python3+mitmproxy安装使用教程(Windows) https://www.cnblogs.com/lsdb/p/10106655.html
使用 mitmproxy + python 做拦截代理 https://www.cnblogs.com/grandlulu/p/9525417.html
python-Mitmproxy抓包 https://www.cnblogs.com/shuzf/p/12157240.html
未经允许不得转载:沙滩星空的博客 » 使用mitmproxy做抓包和中间人攻击

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址