mitmproxy抓包工具

mitmproxy抓包工具

Created
Jul 11, 2023 07:15 AM
Date
Dec 8, 2022
Tags
抓包软件
 
notion image
 
**之前写过一篇博客介绍fiddler的 https://www.cnblogs.com/zichliang/p/16067941.html**今天来说说mitmproxy 也是一款不错的抓包软件,因为之前写了 这篇文章对其再进行一些补充mitmproxy 不仅可以抓包 还可以对包进行2次过滤 并且伪装请求 与python 进行交互,相比fiddler 和charles 更为灵活。

mitmproxy抓包工具

 

准备工作

使用SwitchyOmega 在浏览器使用代理IP这个功能上,即使是市场占用率的chrome浏览器,在单个ip或者多个ip的切换上面操作相对是很麻烦。
所以这里为大家推荐一款叫做「SwitchyOmega」(全称为 Proxy SwitchyOmega)的浏览器插件。它是众多浏览器上的代理扩展程序,可以轻松快捷的管理和切换多个代理设置。
关注下 人家的github:https://github.com/FelisCatus/SwitchyOmega 或者直接在浏览器中的商店下载,这里我选择的是edge浏览器 优点嘛,不用xx上网。还是很香的。
notion image
点击打开Microsoft Edge 加载项
notion image
搜索SwitchyOmega
notion image
点击获取即可(因为我已经获取了 所以是删除)

准备工作

使用SwitchyOmega 关注下 人家的github:
或者直接在浏览器中的商店下载,这里我选择的是edge浏览器 优点嘛,不用科学上网。还是很香的。 点击扩展
notion image
点击打开Microsoft Edge 加载项
notion image
搜索SwitchyOmega
notion image
点击获取即可(因为我已经获取了 所以是删除)

1. mitmproxy 介绍与安装

需要安装python环境

1. mitmproxy 是什么

notion image
mitmproxy是一组工具,可为HTTP/1,HTTP/2和WebSockets提供交互式的,具有SSL/TLS功能的拦截代理。
  • 拦截HTTP和HTTPS请求和响应并即时修改它们;
  • 保存完整的HTTP对话以供以后重播和分析;
  • 重播HTTP对话的客户端;
  • 重播先前记录的服务器的HTTP响应;
  • 反向代理模式将流量转发到指定的服务器;
  • macOS和Linux上的透明代理模式;
  • 使用Python对HTTP流量进行脚本化更改;
  • 即时生成用于拦截的SSL/TLS证书

2. 安装

直接开始安装 mitmproxy 命令不支持在 windows 系统中运行,所以可以选择linux虚拟机来完成 在 linux 中:
sudo pip3 install mitmproxy
在 windows 中,以管理员身份运行 cmd 或 power shell:
pip3 install mitmproxy
安装结束。 完成后,可以执行 mitmproxy 、 mitmdump 、 mitmweb 三个命令,我们可以拿 mitmdump 测试一下安装是否成功,执行:
PS D:\kyls_working> mitmdump --version Mitmproxy: 8.0.0 Python: 3.9.6 OpenSSL: OpenSSL 1.1.1m 14 Dec 2021 Platform: Windows-10-10.0.22000-SP0
运行 要启动 mitmproxy 用 mitmproxy 、 mitmdump 、 mitmweb 这三个命令中的任意一个即可,这三个命令功能一致,且都可以加载自定义脚本,唯一的区别是交互界面的不同。 !!!!在运行过程需要安装mitmproxy 的安全证书 http://mitm.it/ 点击这个链接去选择安装安全证书 然后选择响应的系统去下载安装即可 安装过程如下
notion image
notion image
notion image
notion image
notion image
然后下一步确定即可 记得一定要重启浏览器 1. mitmproxy
使用SwitchyOmega设置代理服务器 然后在浏览器上设置好 就可以使用mitmproxy
notion image
在mitmproxy 命令行中 通过
  • 上下键 来选择包
  • 回车是进入
  • tab 是切换 request response 和detail
  • ESC+q 是退出
2. mitmdump
mitmdump -w test.txt 将抓到的数据 存入test.txt 然后就会发现 自己的文件一堆乱码 没关系 我们之后用python去读取 就行了 3.mitmweb(不推荐 很不好用) 直接在终端输入 mitmweb 会发现会直接进入浏览器
notion image
然后刷新你的网站 就会发现在web端抓到你的数据包了 和fidder一样是一个展示窗口

2. mitmproxy 手机端抓包

mitmproxy mitmdump mitmweb 设置mitmproxy 在linux上启动mitmproxy 会启动8080端口 如果要改变端口号 使用如下命令 mitmproxy -p 8888 监听的端口号就变成了8888 设置手机模拟器 在 夜神模拟器的手机中 长按wifi 修改 手机的代理服务器的ip地址
notion image
修改为你的mitmproxy 的服务器地址和设置的端口号
| 然后返回浏览器 输入 mitm.it 安装 安卓的证书
即可完成设置

查看证书 设置——> 安全——>受信任的凭据——>用户
notion image
清除数据包 按键盘上的 z

1. 功能键

访问浏览器 然后在我们的手机浏览器中输入http://www.baidu.com 即可完成抓包 查看某个数据包 上下键 选择数据包 回车进入详细数据包 退出某个数据包 q 清除数据包 z 退出 按下 q 然后再使用y完成退出

2. 数据包的过滤

启动mitmproxy 并且启动手机 打开网址 www.baidu.com 就会发现我们抓到了很多数据包 然后我们 输入字母 f
notion image

过滤表达式

光这个表格我就抄了好久... 不容易啊 mitmproxy工具中的许多命令都使用过滤器表达式。过滤器表达式由以下运算符组成
命令
描述
~a
匹配响应资源: CSS,Javascript,Flash,images.
~b regex
Body
~bg regex
请求的Body
~bs regex
响应的Body
~c int
HTTP响应码
~d regex
域名
~dst regex
匹配目标地址
~e
匹配错误
~h regex
Header
~hq regex
请求Header
~hs regex
响应Header
~http
匹配HTTP流
~m regex
方法
~marked
匹配marked流
~q
匹配无响应请求
~s
匹配response响应
~src regex
匹配来源地址
~t regex
Content-type header
~tcp
匹配TCP流
~tg regex
请求Content-Type Header
~ts regex
响应Content-Type Header
~u regex
网址URL
~websocket
匹配WebSocket流(和HTTP-WebSocket握手流)
!
一元非
&
|
(...)
分组

查看流选择器

在交互式上下文中,mitmproxy具有一组在当前视图上运行的便捷流选择器:
@all 所有流量 @focus 当前关注的流程 @shown 当前显示的所有流 @hidden 当前隐藏所有流 @marked 所有标记的流 @unmarked 所有未标记的流 这些经常在命令和键绑定中使用
例子
  1. 筛选出非200的请求
set viewer_filter '!~c 200'
notion image
  1. 筛选出百度这个域名的所有请求
set viewer_filter '~d baidu.com'
notion image
  1. 筛选post请求且是百度的请求
set viewer_filter '~m post & ~d baidu.com' set viewer_filter '~m post & ~u baidu.com'
notion image

3. mitm 设置断点拦截

输入字母 i 以此来 写断点条件 请求篡改 例:
  1. 断点 百度域名且是 get的
set intercept '~d baidu.com & ~m get' ![断点 百度域名且是 get的.png](../../_resources/断点 百度域名且是 get的.png) 然后选择红色的数据包 点击回车进入 断点输入E修改详细数值
notion image
然后修改 我们的url 修改为 https:xw.qq.com 并且删除掉我们headers里的hosts 然后按q退出到列表页 按下 a 进行重新载入 即可完成请求篡改 响应篡改 进入 调试界面 进入
notion image
我们进入 response.body 即可 完成响应篡改
notion image
3. mitmdump 的使用 !!!注意更换设备就要再安装一台证书 mitmdump 非常重要 他可以和python脚本进行交互 在windows下直接输入
mitmdump 更换端口号 mitmdump -p 8888 载入自定义python脚本 mitmdump -p 8888 -s test.py 脚本有固定格式
# -*- coding: utf-8 -*- # @Time : 2022/11/29 17:20 # @Author : lzc # @Email : hybpjx@163.com # @File : request.py # @Software: PyCharm # @blog : <https://www.cnblogs.com/zichliang> # 必须这么写 def request(flow): print(flow.request.headers)
notion image
我们设置好代理 安装好安全证书后 访问 http://httpbin.org/get 就会发现我们的服务端显示 headers的全部内容
notion image
第一个是我们需要的信息 然后我们会可以使用 mitmproxy 的ctx中的log日志模块 来记录我们的内容
# -*- coding: utf-8 -*- # @Time : 2022/11/29 18:20 # @Author : lzc # @Email : hybpjx@163.com # @File : mitmproxy.py # @Software: PyCharm # @blog : <https://www.cnblogs.com/zichliang> from mitmproxy import ctx # 必须这么写 def request(flow): # print(flow.request.headers) # # 请求头 # ctx.log.info(str(flow.request.headers)) # ctx.log.warn(str(flow.request.headers)) # ctx.log.error(str(flow.request.headers)) # # 请求的链接地址 # ctx.log.error(str(flow.request.url)) # # 请求的主机头 # ctx.log.error(str(flow.request.host)) # # 请求的方法 ctx.log.error(str(flow.request.method)) # # 请求的路径 # ctx.log.error(str(flow.request.path))
重新启动我们的mitmproxy 并且重新访问一下url就会得到……
notion image
这样就能对颜色进行区分 也可以对响应内容进行访问
# -*- coding: utf-8 -*- # @Time : 2022/11/29 18:31 # @Author : lzc # @Email : hybpjx@163.com # @File : response.py # @Software: PyCharm # @blog : <https://www.cnblogs.com/zichliang> def response(flow): # 响应的状态码 ctx.log.error(str(flow.response.status_code)) # 响应的内容 ctx.log.error(str(flow.response.text))
使用mitmdump 代理
mitmdump -s test.py -p 8889 --mode upstream:https://xxx.xxx --stream-auth 通行证书+密码 -p 8889