开源测试工具 抓包:Mitmproxy 之 Mitmweb

stephen · 2024年12月24日 · 365 次阅读

一、项目信息

二、能解决什么问题、优点

我知道大部分测试人员都不喜欢看文档,所以稍微总结一下测试平时使用的功能,或者大家感兴趣的功能,一般是其他抓包软件无法或者不容易实现的

  • https 抓包 + 服务器部署 +web 可视化界面
  • 请求/响应 替换
  • python 插件支持
  • 解密 response
  • 上游模式 - 科学抓包
  • 长连接支持,websocket、udp、tcp
  • wireguard 透明代理

三、安装 + 证书

写了又删了,其他帖子都写这个,我就不写了,有兴趣自己会去装的
搁这看 官方
需要注意的是,如果服务器安装了,要在局域网其他设备访问,需要指定参数

--web-host 0.0.0.0

四、技巧篇

1、内容替换

有什么用

就测试而言,我举几个例子:
1、 可以测试客户端的不同响应,而不需要服务器的参与
比如我有一个登录或者 serverstate 接口,返回{"status": 1}。 现在我要测试停服界面,一般,我只需要把响应结果改成{"status": 0},客户端就会进入停服界面
2、 简单的安全测试
以下例子其实已经属于安全的范畴了,尤其在弱联网游戏中,很容易修改玩家的数值

怎么做

在 mitmweb 中,点击 options-edit options,找到 modify_body,添加一行

/~s/"status":1/"status": 0

这个表示把响应中的status: 1改为status: 0
同理, 我要测试 Bilibili 的硬币
修改之前:

修改之后:

使用的替换就是

/~s/"coin":\d+/"coin": 99999999999

所以这里是显示没问题的。

官方教程

官方

2、解密 response

一般的抓包软件,即便我知道解密算法,那也无法可视化,只能抓包拿到 body,再通过其他的工具或代码解密
通过插件这里就可以可视化请求和响应
解密前:

解密后:

3、上游模式 - 抓科学包

如果想要抓取某些包,比如谷歌商店的请求,一般是比较困难的。这里可以指定上游代理,前提是你已经安装了代理软件

--mode "upstream:http://localhost:7890@$proxy_port"

4、长连接支持

一般手机的长连接抓包是比较麻烦的,比如使用 root 然后 tcpdump,使用 wireshark 进行分析。 里面的内容是又多又乱。
这里直接使用 wireguard 模式

5、插件支持

官方插件: doc.mitmproxy
github 插件:github
这里我举例几个:
1、上文中提到的解密,例子为
contentview
当然,解密逻辑需要自己写
2、ssl 握手失败的问题,可以直接让它通过,以免影响正常功能测试
check_ssl_pinning
3、 添加一个新的 option 选项,自定义功能
options-simple
4、 常见 sql 漏洞检测
xss_scanner

综合来说,拿到请求,是可以为所欲为的。比如我自己做的几个插件:
解密、api 文档生成、弱网络模拟、响应码检查等

五、常见问题

如何安装第三方 python 包?

pipx inject mitmproxy <package-name>

如何解决安卓 7.0 后 ssl pin 的问题?

只提供思路,具体的可以查一下,也可以讨论
方法一:官方文档-Certificate Pinning
方法二:使用安卓 7.0 以下设备或模拟器
方法三:root+magisk

内存使用过大的问题?

1、使用定时脚本重启
2、使用-w 写入文件

[编辑中]

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册