mitmproxy-环境配置-安装-实例
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的安装及升级。⾸先,要先按照这个教程()把Python3.6安装完。
Ubuntu16.04上建⽴wifi热点
为了拦截数据,我需要在Ubuntu上建⽴热点Hotspot。直接⾛这个教程:
安装mitmproxy
热点建⽴好了,Python3.6也安装完成了,下⾯⼀⾏命令运⾏完,mitmproxy就安装完成了。
sudo pip3 install mitmproxy
实例
功能需求:想测试设备是否对服务器证书进⾏了校验。实现针对⽆法替换证书的设备进⾏中间⼈攻击。
环境:⼀台安装了mitmproxy(4.0.4)的主机,开启热点,充当⽹关(Ubuntu16.04)。
⼀个物联⽹设备,与服务器的通信协议为TCP,SSLv3。
这个实例⾯对的问题是,设备⽆法设置代理。那么如何拦截⽆法设置代理的数据包呢?
实际上mitmproxy⽀持多种代理模式,包括正向代理,反向代理和透明代理。
正向代理就是我们平常使⽤Filder等抓包⼯具,需要在Android⼿机上设置代理。
⽽透明代理则是客户端根本不需要知道代理服务器的存在,代理服务器会根据策略拦截并修改⽤户A或B的报⽂,并作为实际的请求⽅,向服务器发送请求。
代理的相关知识参考(图解正向代理、反向代理、透明代理 )
所以为了不在设备上配置代理,本⽂将使⽤透明代理的⽅式来拦截数据包。
值得注意的是,只是不需要设置代理,不是不需要安装证书哦!虽然设备不⽤设置代理了,但是如果采⽤了SSL,要想解密还是需要在设备上安装证书的。这是我后⾯分析失败的原因。
transparent mode(透明代理)的原理希望⼤家能够⾃⼰去了解⼀下,本⽂直接将如何使⽤透明代理抓包。
本⽂的环境是Ubuntu16.04,⽤它开放热点,并且让设备连接到它开放的热点上。这样做的⽬的是:Ubuntu主机的ip地址就作为了设备的⽹关,才能使⽤透明代理。 Ubuntu建⽴热点 参考:
建⽴热点以后,Ubuntu主机进⾏如下配置:(要记得重启后需要重新设置奥!)如何设置代理服务器
1.启⽤IP转发
sysctl -w net.ipv4.ip_forward=1
sysctl -w f.all.forwarding=1
2.禁⽤ICMP重定向
sysctl -w f.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. 将设备连接到开放热点的主机,访问mitm.it 下载和安装证书。此时,设备不需要设置代理就可以抓到包啦~
补充
下⾯介绍⼀些mitmproxy的常⽤命令
mitmproxy进⼊以后是这个样⼦的:
在这个界⾯⾥:
使⽤j,k或者上下⽅向键在列表上浏览;
使⽤enter进⼊数据包查看详细信息,tab键进⾏标签转换;
使⽤q,退出,或返回上级界⾯;
使⽤w,保存flows;
使⽤G,跳转到最新请求;
使⽤g,跳转到第⼀个请求;
使⽤z,清空所有的flows;
待补充。
如果你想拦截TCP+SSL的话,可以使⽤如下命令:mitmproxy --tcp :443

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。