mitmproxy - 环境配置-安装-实例

  • 初探

    mitmproxy是一个开源免费的HTTPS代理工具。它有三个使用接口:command line(命令行),web interface(web接口),Python API(Python编程接口)。
它可以用于拦截、检查、修改和重放web流量,例如HTTP/1、HTTP/2、WebSockets或任何其他SSL/ TLS保护协议。它可以帮助我们对从HTML到Protobuf的各种消息类型进行修改和解码,实时拦截特定的消息,在消息到达目的地之前对其进行修改,稍后将其重放到客户端或服务器上。
简单介绍:
命令行:
命令行工具包括mitmproxy和mitmdump。
mitmproxy和mitmdump的主要区别在于mitmproxy将嗅探的数据包保存在内存中,适用于小样本,是实时处理数据包的工具。而mitmdump则是将拦截的数据包导出来,进行分析,非实时的处理数据包的,类似于tcpdump。
web接口:
mitmweb类似于Google devtools,可以拦截网站的流量包。

  • 安装

mitmproxy的安装本身非常简单,但是我想在Ubuntu16.04下使用,在这个过程中踩了非常多的坑,记录下来为他人铺路。

  • Python3.6的安装

首先mitmproxy是仅支持Python3.6及其以上版本的,因此首先需要安装Python3.6.然而,Ubuntu自带了Python3.5,这里就涉及到了Python多个版本的管理问题,以及pip的安装及升级。首先,要先按照这个教程(https://blog.csdn.net/doudoudouzoule/article/details/84032523)把Python3.6安装完。

  • Ubuntu16.04上建立wifi热点

为了拦截数据,我需要在Ubuntu上建立热点Hotspot。直接走这个教程:https://blog.csdn.net/doudoudouzoule/article/details/84070216

  • 安装mitmproxy

热点建立好了,Python3.6也安装完成了,下面一行命令运行完,mitmproxy就安装完成了。

sudo pip3 install mitmproxy
  • 实例

功能需求:想测试设备是否对服务器证书进行了校验。实现针对无法替换证书的设备进行中间人攻击。
环境:一台安装了mitmproxy(4.0.4)的主机,开启热点,充当网关(Ubuntu16.04)。
          一个物联网设备,与服务器的通信协议为TCP,SSLv3。
这个实例面对的问题是,设备无法设置代理。那么如何拦截无法设置代理的数据包呢?
实际上mitmproxy支持多种代理模式,包括正向代理,反向代理和透明代理。
正向代理就是我们平常使用Filder等抓包工具,需要在Android手机上设置代理。
而透明代理则是客户端根本不需要知道代理服务器的存在,代理服务器会根据策略拦截并修改用户A或B的报文,并作为实际的请求方,向服务器发送请求。
代理的相关知识参考(图解正向代理、反向代理、透明代理 http://blog.51cto.com/z00w00/1031287)
所以为了不在设备上配置代理,本文将使用透明代理的方式来拦截数据包。

值得注意的是,只是不需要设置代理,不是不需要安装证书哦!虽然设备不用设置代理了,但是如果采用了SSL,要想解密还是需要在设备上安装证书的。这是我后面分析失败的原因。

transparent mode(透明代理)的原理希望大家能够自己去了解一下,本文直接将如何使用透明代理抓包。

本文的环境是Ubuntu16.04,用它开放热点,并且让设备连接到它开放的热点上。这样做的目的是:Ubuntu主机的ip地址就作为了设备的网关,才能使用透明代理。 Ubuntu建立热点 参考:https://mp.csdn.net/postedit/84070216

建立热点以后,Ubuntu主机进行如下配置:(要记得重启后需要重新设置奥!)

1.启用IP转发

sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1

2.禁用ICMP重定向

sysctl -w net.ipv4.conf.all.send_redirects=0

3.创建一个iptables规则集,将所需的流量重定向到mitmproxy (将下面的eth0替换为你的网络接口)

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080
ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080

4.以透明代理的模式启动mitmproxy,其中showhost代表告诉mitmproxy使用Host标头的值进行URL显示

mitmproxy --mode transparent --showhost

5. 将设备连接到开放热点的主机,访问http://mitm.it 下载和安装证书。此时,设备不需要设置代理就可以抓到包啦~

  • 补充

下面介绍一些mitmproxy的常用命令

mitmproxy进入以后是这个样子的:

mitmproxy - 环境配置-安装-实例_第1张图片

在这个界面里:

使用j,k或者上下方向键在列表上浏览;

使用enter进入数据包查看详细信息,tab键进行标签转换;

使用q,退出,或返回上级界面;

使用w,保存flows;

使用G,跳转到最新请求;

使用g,跳转到第一个请求;

使用z,清空所有的flows;

待补充。

如果你想拦截TCP+SSL的话,可以使用如下命令:

mitmproxy --tcp :443

 

你可能感兴趣的:(漏洞挖掘)