文章总结: 本文介绍了mitmproxy工具的安装和使用方法,重点展示了如何编写Python扩展来自定义修改HTTP请求和响应。文章提供了完整的代码示例,演示了如何拦截特定URL的请求并修改参数和响应内容,适合需要高度自定义流量处理的场景。
综合评分: 86
文章分类: WEB安全,安全工具,渗透测试
mitmproxy高交互自定义代理
原创
initsec
初始安全
2024年5月11日 08:02
中国香港
- 背景
- 介绍
- 安装
- 基础使用
- 编写扩展
背景
在我看来抓包功能和 Burp 一样,但有时候需要对请求和响应高度自定义修改,比如参数中的limit要调整为 50,但offset需要动态调整为0 50 100 150 200 ...,且还需要根据时间戳计算签名,这个时候用 burp 实现可能就比较麻烦了,所以需要有一种新的高度自定义扩展的方案。
介绍
mitmproxy is an interactive, SSL/TLS-capable intercepting proxy with a console interface for HTTP/1, HTTP/2, and WebSockets.
mitmdump is the command-line version of mitmproxy. Think tcpdump for HTTP.
mitmweb is a web-based interface for mitmproxy.
- Github[1]
- 官网[2]
安装
pip3 install mitmproxy
安装后会有介绍中的 3 个工具,mitmproxy、mitmdump、mitmweb,三个命令实际功能都差不多,只是展示的形式不太一样。
我平时感觉就 mitmproxy(纯命令行)或者 mitmweb(提供 1 个 WEB UI)就够了。
基础使用
监听 1234 端口
mitmweb --listen-port 1234 --web-port 1235
mitmproxy --listen-port 1234
启动后和 burp 一样需要安装对应的 CA 证书,挂上http://127.0.0.1:1234代理访问 http://mitm.it/ 即可。
image-20240428上午94535961
配置好后就可以正常看到流量包了。
image-20240428上午95040533
编写扩展
上面能看到数据包就说明配置好了,现在就是编写自定义的扩展了,来实现修改我们的请求和响应。(这里只举例常用的修改 http 请求和响应,当然他还支持很多其他的,可参考 addons-overview[3]
编写 py 脚本如下:
import mitmproxy.http
from mitmproxy import ctx
from mitmproxy import flowfilter
class Interceptor:
def __init__(self):
# 添加网址过滤器
self.filter = flowfilter.parse("~u https://www.baidu.com")
# 修改请求
def request(self, flow: mitmproxy.http.HTTPFlow):
if flowfilter.match(self.filter, flow):
ctx.log.info(f"get keyword {flow.request.query['wd']}")
# 替换搜索词
flow.request.query["wd"] = "123"
# 修改响应
def response(self, flow: mitmproxy.http.HTTPFlow):
if flowfilter.match(self.filter, flow):
ctx.log.info(f"get response lens {len(flow.response.content)}")
# 添加/修改headers
flow.response.headers["mitm"] = "test"
flow.response.content = "66666".encode(encoding="utf-8")
addons = [
Interceptor()
]
编写好后使用mitmproxy 加载即可。(注:mitmproxy支持热更新,修改脚本保存后会自动重新加载
mitmweb --listen-port 1234 --web-port 1235 -s mitmproxytest.py
可见请求后 wd 参数被自动替换,响应也被替换。
image-20240428上午101823362
image-20240428上午101757219
参考资料
[1]
Github: https://github.com/mitmproxy/mitmproxy
[2]
官网: https://mitmproxy.org/
[3]
addons-overview: https://docs.mitmproxy.org/stable/addons-overview/
- END –
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:初始安全 initsec《mitmproxy高交互自定义代理》