MitmProxy介绍以及使用

MitmProxy介绍以及使用

  • 1、MitmProxy介绍
  • 2、MitmProxy安装使用排雷
  • 3、MitmProxy用处
    • 1、MitmProxy介绍
      • 1.2 攻击图例
    • 2、MitmProxy安装使用排雷
      • 2.1 mitmproxy安装
      • 2.1.1 windows安装
      • 2.1.2 安装证书
      • 2.1.3 开代理
      • 2.1.2 mac安装
  • 3、MitmProxy用处
    • mitmdump
    • 3.1 监听特定网站收发数据,捕获数据

1、MitmProxy介绍

2、MitmProxy安装使用排雷

3、MitmProxy用处

1、MitmProxy介绍

mitmproxy 就是用于 MITM 的 代理(proxy), 而MITM,也就是(Man-in-the-middle attack)中间人攻击,指的就是通过各种技术手段将入侵者的一台计算机(或服务器)虚拟放置在网络连接的两台计算机之间。(SMB会话劫持、DNS欺骗等)计算机相互通信的请求响应过程均可以被拦截获取,在中间人攻击中,攻击者将自己伪装成每一个参与会话的终端,且不被其他终端识破,攻击者可以拦截通讯双方的通话并插入新的内容

1.2 攻击图例

马洛里拦截了艾莉丝与鲍勃之间的对话并且可能在某些时候传送给鲍伯一个虚假的消息### 1.3 代理服务器
中间人攻击可以通过代理服务器实现,由HTTP、SMTP、POP3和FTP等发展到SSL、SOCK4/5代理以及其他未知的代理类型,相当于包裹交换一个中转站。而mitmproxy就是通过代理的方式实现信息拦截的

2、MitmProxy安装使用排雷

mitmproxy相比于Charles和Fiddler,它可以以命令行或者脚本方式hook,也可以定制化抓取数据,实现像Charles一样的改装请求。

  • mitmproxy 官网:https://www.mitmproxy.org/
  • mitmproxy 官方文档:https://docs.mitmproxy.org/stable/
  • mitmproxy 官方脚本 demo:https://docs.mitmproxy.org/stable/addons-examples/

2.1 mitmproxy安装

2.1.1 windows安装

pip install pipx
pip install mitmproxy
# 或者直接用pip install mitmproxy 命令安装

windows安装完后,需要手动配置mitmproxy到环境变量中(注:我这里使用的是anconda环境,直接将bin目录下的所有可执行文件放入环境变量即可)
在这里插入图片描述
windows安装好后,可在IDE或者cmd中输入mitmweb查看是否安装成功
在这里插入图片描述
在windows环境下,mitmproxy接口并不支持
在这里插入图片描述
mitmweb 是mitmproxy的web化界面工具,在上面我们可以看到完整的请求响应流以及对应的头和身体

2.1.2 安装证书

此时,还没有安装成功,我们发现还不能拦截到数据,这是因为我们没有安装证书和打开对应的监听窗口, 这里主要的雷区就是,windows平台的证书其实在我们装mitmproxy的时候系统已经自动给你下载了
在官网中有描述
安装路径在我们的usr\13386(用户名).mitmproxy 下,p12结尾的证书就是windows平台下的。
在这里插入图片描述
双击mitmproxy-ca.p12,进入证书导入向导。
在这里插入图片描述
傻瓜式安装,下一步就行
在这里插入图片描述
注意这里的密码填空就行了。
下一步将证书放入下列存储选项中,选择受信任的根证书颁发机构
在这里插入图片描述
点击完成,证书就导入到当前用户\计算机的根证书存储里面了
在这里插入图片描述

2.1.3 开代理

接下来就是打开代理,win10平台可以直接在设置中搜索代理就可以定位到手动代理设置这一栏。也可以在chrome/Firefox下的高级设置中找到代理设置,打开代理,并且端口号为Proxy监听的端口号8080(手机端的安装配置与其类似),这时候重启mitmweb,可以看到下图所示,抓到本机发出的请求flow(流)了。其使用方法与Charles类似,这里不再赘述。
在这里插入图片描述

2.1.2 mac安装

brew  install  mitmproxy

如果是Mac,命令安装完后,会自动添加好环境变量。由于博主主要使用的是win的平台,对mac不太熟悉,要想参考麻烦移步其它文章 (奥力给~)

3、MitmProxy用处

mitmdump

mitmdump是mitmprox的核心,它是mitmproxy 的命令行版本。将 tcpdump 用于 HTTP
近似于 charles 的命令行版本文章来源地址https://uudwc.com/A/g411

3.1 监听特定网站收发数据,捕获数据

import mitmproxy.http
from mitmproxy import ctx
import traceback, os

filter_host = "webvpn.bit.edu.cn"
url_path = "webvpn.bit.edu.cn/https/77726476706e69737468656265737421e7e056d2223e6f59700d8cbe915b24239d8e8349f501643293dc/search/results"


class catch_cookies(object):
    '''
    利用mitmproxy模拟一个完整的HTTP通信周期获取\修改数据
    '''

    def __init__(self):
        self.cookie = ""
        self.num = 0

    # 与服务器建立代理连接,仅仅是client与proxy连接,不会触发request,response以及其他http事件
    def http_conn(self, flow: mitmproxy.http.HTTPFlow):
        pass

    # 来自client的 HTTP 请求的头部被成功读取, body还是空的
    def request_headers(self, flow: mitmproxy.http.HTTPFlow):
        pass

    # 来自client的 HTTP 请求被成功完整读取(包括请求头cookie以及body)
    def request(self, flow: mitmproxy.http.HTTPFlow):
        global filter_host, url_path
        if (flow.request.host != filter_host) and (url_path not in str(flow.request.url)):
            return
        self.num += 1
        if self.num > 1:
            pass
        else:
            ctx.log.info(u"处理第 %d 个请求" % self.num)
            print("处理第 %d 个请求" % self.num)
            try:
                for key, value in flow.request.cookies.items():
                    # if "wengine_vpn_ticket" not in key:
                    #     pass
                    # else:
                    coo = "{}={}; ".format(key, value)
                    self.cookie += coo
                    # self.cookie += flow.request.cookies[i]
                print("cookie", self.cookie)
                # 将cookie写进文本里,再写一个程序读取,直接在此模块导入redis会报没有redis模块(未解决)
                with open(r'./cookies_ei_bit.txt', 'w', encoding="utf-8") as file:
                    file.write(self.cookie)
                    print("cookie写入成功\033[0m")
            except:
                print(traceback.print_exc())

    # 来自server的 HTTP的响应头部被成功读取, body还是空的
    def response_headers(self, flow: mitmproxy.http.HTTPFlow):
        pass

    # 来自server的 HTTP 响应被成功完整读取
    def response(self, flow: mitmproxy.http.HTTPFlow):
        pass

    # 处理响应异常, HTTP错误
    def error(self, flow: mitmproxy.http.HTTPFlow):
        pass


addons = [
    catch_cookies()
]

if __name__ == '__main__':
    from mitmproxy.tools.main import mitmweb

    mitmweb()

原文地址:https://blog.csdn.net/weixin_42182687/article/details/121082471

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年06月17日 06:39
字符串转换成对象列表时候抛出异常:com.alibaba.fastjson.JSONException: TODO
下一篇 2023年06月17日 06:39