抓包工具mitmproxy的基础用法

2017-06-15

抓包工具mitmproxy的基础用法

工作中用到的抓包工具常见的windows中的Fiddler,mac中的Charles,今天介绍一款可以在终端中使用的跨平台抓包工具mitmproxy

1. 安装

mitmproxy的安装非常简单,可以直接通过Homebrew安装。(不知道Homebrew的小伙伴可移步Homebrew官网一探究竟)

1
$ brew install mitmproxy

2. 配置

和其他抓包工具一样,就要设置代理,mitmproxy默认的端口是8080,你也可以通过-p自定义端口:

1
$ mitmproxy -p 8080

3. 安装证书

前两部做好后,在终端打开mitmproxy,在浏览器中打开mitm.it,下载并根据提示安装相应的证书。

4. 常用操作

前三部完成后,我们就可以进行抓包了,输入?可以查看帮助文档:

4.1 查看抓包结果

比如我们现在打开谷歌,你会看到像下面的抓包结果:

黄色的箭头==>>==指向当前的请求,列表上的请求表明了请求方法、链接、时间、状态码、数据大小。按ENTER键即可查看进入查看每个请求的详情:

tab键可以在Request、Response和Detail间切换(也可以通过HL左右切换)。

Response中的数据可以以不同的格式展示,按m键底部会出现各种数据格式的说明,如果我按e,数据即可以Hex格式展示:

q即可回到列表。q可以用作回到上一级,也可以退出程序(但是q会询问是否退出,Q会强制退出。)

4.2 修改请求

我们刚才打开google有很多请求,为了新一次的抓包,我希望清楚刚才所有的请求,我们可以按z清除列表上的所有抓包请求。

我现在打开 http://httpbin.org/ ,因为我们现在只想观察来自这个网址的请求,不希望别的请求的干扰,这时候我们可以使用过滤请求功能,按f键,输入httpbin\.org

只会显示包含httpbin.org的请求:

我们可以看到,还有两张gif图片,我们同样可以把他们过滤掉:httpbin\.org & !gif & !facebook

我们进入该请求,然后按e可以修改该请求,底部提示我们修改相应的参数:

现在我想修改请求的url,我把url改成 http://httpbin.org/ip ,然后按r重新发送该请求,我们注意到刚才的页面是一个HTML页面,现在返回的数据是JSON,返回的是我所在的IP。

4.3 拦截请求

mitmproxy是一个中间人代理工具,客户端与服务端之间的数据传输都要经过mitmproxy。比如,客户端向服务端发送请求,请求的所有参数都将经过mitmproxy,mitmproxy可以对请求的参数进行修改然后发送给服务端。服务端收到请求后,将响应发送回客户端,又被mitmproxy拦截,mitmproxy可以修改响应内容,然后再发送回客户端。

i,即可进入拦截模式,底部提示我们输入拦截的条件。我们现在在浏览器中打开 http://httpbin.org/ip ,被拦截的请求显示橘黄色,因为浏览器的请求被mitmproxy拦截,所以浏览器一直在等待服务端的响应:

进入查看该请求,可以按e对请求的参数进行修改,现在我不修改请求参数,然后按a将请求发送给服务端,服务端的响应被mitmproxy拦截:

我们可以修改响应的内容,欺骗客户端,本来响应的内容是当前所在的IP(134结尾),我现在随意更改响应的内容(按e,底部提示我们修改的内容),然后再按a,将响应内容发送给客户端:

浏览器所受到的内容就是被我修改后的内容: