share-image
ESC

使用 mitmproxy

什么是 mitmproxy

mitmproxy是一款支持HTTP(S)的中间人代理工具。不同于Fiddler2,burpsuite等类似功能工具,mitmproxy可在终端下运行。mitmproxy使用Python开发,是辅助web开发&测试,移动端调试,渗透测试的工具。

官网: https://mitmproxy.org/

安装

mac 安装

brew install mitmproxy

pip3 install mitmproxy

说明

mitmproxy 提供了3个命令 :

  • mitmdump :纯命令行界面,类似 tcpdump
  • mitmproxy :命令行模式,类似 vim
  • mitmweb :带 web 界面的

mitmproxy

直接执行 mitmproxy 会打开本机的8080端口

然后手机开启http 代理,设置完代理后访问 mitm.it

点击对应的图标安装证书并使系统信任该证书,安装证书是为了当请求 HTTPS 页面的内容也可以看到具体的请求头和响应头信息,然后访问页面 PC 端就会出现对应的请求信息了

按方向键上下键进入对应的 URL 内查看请求 响应等字段,按左右键切换,按 q 键返回主界面。

在请求列表界面按 i,在左下角会显示 Intercept filter:,要求输入过滤表达式,用于指示拦截哪些请求,此处的过滤表达式的语法同请求列表过滤表达式相同。

比如输入 baidu.com,则当请求到百度时候请求会被拦截并以橙色标识(颜色根据终端设置不一样会显示不一样)

请求拦截后可以编辑重新发送,也可以直接放行,比如进入到该请求的响应里面按 e 键设置一些参数

自定义端口和 IP 和端口

mitmproxy --listen-host 0.0.0.0 -p 8888

mitmweb

执行 mitmweb 后会打开浏览器

出现如图所示的对话框,当有请求时候则都会显示在这里

mitmdump

默认执行 mitmdump

三个命令具体的参数都可以看帮助

--help

API

from mitmproxy import http

def request(flow: http.HTTPFlow):
# redirect to different host
if flow.request.pretty_host == "example.com":
flow.request.host = "mitmproxy.org"
# answer from proxy
elif flow.request.path.endswith("/brew"):
flow.response = http.HTTPResponse.make(
418, b"I'm a teapot",
)

python 的相关 exmaples 可以查看 GitHub 源码

比如说将所有请求头的 server 都改成 nginx

from mitmproxy import http


def response(flow: http.HTTPFlow) -> None:
flow.response.headers["newheader"] = "foo"

保存为 Python 文档后执行

mitmproxy -s xxx.py
文章作者:阿文
文章链接: https://www.awen.me/post/869.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿文的博客
本文于 2018-03-16 发布,已超过半年(2876天),请注意甄别内容是否已过期。