中间人代理工具mitmproxy的安装与使用

HTTP抓包分析工具有比较多,如Fiddler,FireBug,HttpWatch,Tcpdump,PAW(mac)等。在做移动开发时,找到一款合适自己的能进行移动设备HTTP抓包的工具也是非常重要的。正所谓,工欲善其事必先利其器。
在windows机器上,经常用的最多的是fiddler工具,很强大,图形化界面,使用方便、简单;在mac上,Charles 类似fiddler工具,同样是易于操作的图形化界面,同样都是通过代理的方式实现抓包功能,可通过工具分析http(s)包、修改resquest、response内容,满足日常需求。
个人非常喜欢Fiddler,功能强大,而且还支持替换文件,对于调试线上的js/css文件非常方便。在windows上是个很趁手的工具。
今天给大家介绍一款强大的支持手机端抓包的工具:mitmproxy中间人代理工具。
Mitmproxy是一个基于python的中间人代理的框架。它的功能强大,使用简单。支持SSL的HTTP中间人代理工具,它允许你检查HTTP和HTTPS流量并支持直接改写请求。做过渗透测试的肯定很熟悉工具burpsuite或Fiddler,这些工具能够拦截并修改http或https的数据包,对于分析数据包交互的应用来说是非常有用的。但是这些工具都是整套给我们做好了。比如如果想自己定制一套这样的工具,添加一些自己需要的功能,如批量自动改写数据,自动提取数据等,那么我想,mitmproxy将是一个比较好的选择,因为它提供了一个可供用户调用脚本的功能,而不必每次打开fiddler、手动去修改request或者response,通过脚本定制化就能实现数据篡改。
官网地址:http://mitmproxy.org/
它是开源的,托管在github上,使用python开发,跨平台。
github开源地址https://github.com/mitmproxy/mitmproxy

一、介绍

mitmproxy工程工具包,主要包含了3个组件:
(1)mitmproxy:拦截的http(s)记录控制台显示 【window不支持】
(2)mitmdump:命令行接口,可以对接python脚本,通过脚本实现监听后的处理,可定制个人需求。【脚本可用此模式运行】
(3)mitmweb:web形式展示

二、使用环境

1.Python3.6及以上 (python -V查看版本)
2.更新pip(避免部分依赖包未下载)
3.安装mitmproxy

pip install mitmproxy #安装依赖包的同时也将环境安装

三、配置

电脑端设置
电脑和手机连接到同一个wifi环境下。运行时,需要指定电脑的ip地址,并约定一个端口号:

mitmproxy  -p 2386

手机端设置
手机和电脑连接同一个wifi,然后设置代理。进入WLAN,找到当前连接的wifi,长按,弹出的框中选择“修改网络”,进入后,选择“显示高级选项”,代理选择为“手动”,代理服务器主机名设置为mac端的ip地址,端口号是跟刚刚设置的2386,设好后保存。如下图:

手机端设置

  • 访问mitm.it 网址,直接下载、安装、信任CA证书(https协议需要)


    Screenshot_2018-10-29-12-38-05.png

使用mitmproxy【window不可用,linux、mac可使用,笔者使用linux系统】

  • 启动mitmproxy,默认8080,也可指定端口
mitmproxy -p 8888#指定端口

mitmproxy文档地址 https://docs.mitmproxy.org/stable/

mitmproxy官方文档

四、拦截HTTP请求/响应

mitmproxy是一个支持SSL的HTTP中间人代理工具,它允许你检查HTTP和HTTPS流量并支持直接改写请求。它位于客户端和Server端之间,它可以获取客户端的Request,然后修改再发送给Server端;Server端得到Request之后再发出相应的Response,又会被mitmproxy拦截,如果你想修改response,便可修改后再发给客户端。


透明代理HTTP.jpg

mitmproxy代理https原理图.jpg

要想在windows平台上自动批量修改数据,可运行mitmdumps工具,启动时可以使用-s参数导入外部的脚本进行拦截处理。

mitmdumps -s mitm_script.py

mitm_script.py为自己定制的修改数据的脚本。

五、自定义脚本

完成了上述工作,我们已经具备了操作 mitmproxy 的基本能力 了。接下来开始开发自定义脚本,这才是 mitmproxy 真正强大的地方。

脚本的编写需要遵循 mitmproxy 规定的套路,这样的套路有两个。
第一个是,编写一个 py 文件供 mitmproxy 加载,文件中定义了若干函数,这些函数实现了某些 mitmproxy 提供的事件,mitmproxy 会在某个事件发生时调用对应的函数,形如:

"""
Created on 2018-08-14 00:04:17
@author: wangzheng
Sys_Env : Windows_AMD64 Python3.6.2
Email:yaoyao12348@126.com
WeChat: hrcl2015 (WeiXin)
Filename: 
Description : 插件
"""
import mitmproxy.http
from mitmproxy import ctx
 
num = 0
def request(flow: mitmproxy.http.HTTPFlow):
    global num
    num = num + 1
    ctx.log.info("We've seen %d flows" % num)

第二个是,编写一个 py 文件供 mitmproxy 加载,文件定义了变量 addons,addons 是个数组,每个元素是一个类实例,这些类有若干方法,这些方法实现了某些 mitmproxy 提供的事件,mitmproxy 会在某个事件发生时调用对应的方法。这些类,称为一个个 addon,比如一个叫 Counter 的 addon:

"""
Created on 2018-08-14 23:54:43
@author: wangzheng
Sys_Env : Windows_AMD64 Python3.6.2
Email:yaoyao12348@126.com
WeChat: hrcl2015 (WeiXin)
Filename: 
Description : 插件
"""
import mitmproxy.http
from mitmproxy import ctx
 
class Counter:
    def __init__(self):
        self.num = 0 
    def request(self, flow: mitmproxy.http.HTTPFlow):
        self.num = self.num + 1
        ctx.log.info("We've seen %d flows" % self.num)
 
class Counter2:
    def __init__(self):
        self.num = 0
    def request(self, flow: mitmproxy.http.HTTPFlow):
        self.num = self.num + 1
        ctx.log.info("secend addons %d flows" % self.num)
 
addons = [ Counter(),Counter2() ]
#这里可以放多个插件

这里强烈建议使用第二种套路,直觉上就会感觉第二种套路更为先进,使用会更方便也更容易管理和拓展。况且这也是官方内置的一些 addon 的实现方式。
对一次 web 请求,我可以理解为“HTTP 请求 -> HTTP 响应”的过程。
由上面的代码可以看出,每发生一个事件,python脚本就执行响应的代码,事实上考虑到 mitmproxy 的实际使用场景,大多数情况下我们只会用到针对 HTTP 生命周期的几个事件。再精简一点,甚至只需要用到 http_connect、request、response 三个事件就能完成大多数需求了。

六、总结

mitmproxy工具最强大的功能莫过于自定义脚本实现数据按需修改的功能。想象一下,安卓手机上termux+mitmproxy+python,可以完成各种各样的功能。比如,有奖答题软件的破解,考试APP软件数据的提取与篡改。有兴趣可联系我。

我的联系方式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342