mitmproxy——中间人攻击的神器

一、前言

http proxy在web渗透上占据着非常重要的地位,这方面的工具也非常多,像burp suite, Fiddler,Charles简直每个搞web的必备神器,还有历史比较久远的paros,webscarab等,实际上每个web漏洞扫描器都有http代理的功能。

而今天要介绍的mitmproxy代理工具,非常棒,特别是对https数据的截获,及可扩展性,bra bra……

之所以选择这款工具,是为了做移动APP的通信分析。我们知道使用http代理的基本条件就是网络要互通,而很多情况下,公司的移动网络与办公网络是隔离的,当然你可以用网络共享(或者买个小度wifi或360wifi)的方法来解决隔离。(记得几年前做移动通信分析时就遇到了网络隔离且没有无线网卡的尴尬情况。)

我的选择是在vps上搭建一个http代理(刚买了vps,正可着劲的折腾呢),这时候就需要命令行的工具了,于是选择了mitmproxy(其实我也用nginx搭建了代理,目前以查看通信为主,待熟练了,或许能用nginx-lua模块写个截获重写的模块,悲催的是nginx不支持https,扯远了)。

二、mitmproxy原理

mitmproxy就是代理,有篡改功能的代理。它支持两种模式,正向代理,与透明代理,支持http通信与https通信。

(正向代理,反向代理,透明代理的科普可以看http://z00w00.blog./515114/1031287这篇文章,很容易懂)

mitmproxy官网上也有介绍原理,这里附上好心人的翻译http://www.oschina.net/translate/how-mitmproxy-works

对代理很了解的同学,看看下面四幅图,就能知道是咋回事了。

1. http正向代理

 

 

2. https正向代理

 

 

3. http透明代理

 

 

4. https透明代理

 

 

三、mitmproxy安装

接下来我要在vps上安装mitmproxy了,该工具使用python编写,现在非常多的工具都是python编写的,都有专门的python黑客培训机构了,话说不会python的程序员不是好程序员。

python是跨平台的,因此mitmproxy也是跨平台的。

接下来以linux(debian 7)上安装为例,其他平台非常类似(mac上安装包用homebrew就好)

1. 首先安装python环境,了解python的可以不用看

#python及python依赖包apt-get install build-essential python-dev python-setuptools#安装pip,很好的python包管理器,类似于aptitude,apt-getwget https://pypi.python.org/packages/source/p/pip/pip-1.4.1.tar.gzpython setup.py install

2. 安装mitmproxy依赖包

sudo pip install netlib pyopenssl pyasn1 urwid pil lxml flask#下面是可选(为了解码用)sudo pip install pyamf protobuf#下面是可选(为了测试用)sudo pip install nose pathod countershape

3. 安装mitmproxy

sudo pip install mitmproxy

安装成功后会在生成两个工具/usr/local/bin/mitmproxy与/usr/local/bin/mitmdump

本人是个开源工具杀手,总会遇到问题

安装问题解决:

如果使用pip安装时,出现pkg_resources.DistributionNotFound:(刚升级了os x Mavericks版本就出现了这个问题),可以先更新pip

sudo easy_install –upgrade distributesudo easy_install –upgrade pip

四、CA证书的安装

要捕获https证书,就得解决证书认证的问题,因此需要在通信发生的客户端安装证书,并且设置为受信任的根证书颁布机构。下面介绍6种客户端的安装方法。

当我们初次运行mitmproxy或mitmdump时,

会在当前目录下生成 ~/.mitmproxy文件夹,其中该文件下包含4个文件,这就是我们要的证书了。

mitmproxy-ca.pem 私钥

mitmproxy-ca-cert.pem 非windows平台使用

mitmproxy-ca-cert.p12 windows上使用

mitmproxy-ca-cert.cer 与mitmproxy-ca-cert.pem相同,android上使用

1. Firefox上安装

preferences-Advanced-Encryption-View Certificates-Import (mitmproxy-ca-cert.pem)-trust this CA to identify web sites

2. chrome上安装

设置-高级设置-HTTPS/SSL-管理证书-受信任的根证书颁发机构-导入mitmproxy-ca-cert.pem

2. osx上安装

双击mitmproxy-ca-cert.pem – always trust

3.windows7上安装

双击mitmproxy-ca-cert.p12-next-next-将所有的证书放入下列存储-受信任的根证书发布机构

4.iOS上安装

将mitmproxy-ca-cert.pem发送到iphone邮箱里,通过浏览器访问/邮件附件

我将证书放在了vps上以供下载

http://tanjiti.com/crt/mitmproxy-ca-cert.pem mitmproxy iOS

http://tanjiti.com/crt/mitmproxy-ca-cert.cer mitmproxy android

http://tanjiti.com/crt/mitmproxy-ca-cert.p12 windows

http://tanjiti.com/crt/PortSwigger.cer BurpSuite (burpsuite的证书,随便附上)

5.iOS模拟器上安装

git clone https://github.com/ADVTOOLS/ADVTrustStore.gitcd ADVTrustStore/

DANI-LEE-2:ADVTrustStore danqingdani$ python iosCertTrustManager.py -a ~/iostools/mitmproxy-ca-cert.pem

subject= CN = mitmproxy, O = mitmproxyImport certificate to iPhone/iPad simulator v5.1 [y/N] yImporting to /Users/danqingdani/Library/Application Support/iPhone Simulator/5.1/Library/Keychains/TrustStore.sqlite3 Certificate added

实际上上面的操作就是给 ~/Library/Application\ Support/iPhone\ Simulator/5.1/Library/Keychains/TrustStore.sqlite3 数据库中表tsettings表中插入证书数据

6.Android上安装

将mitmproxy-ca-cert.cer 放到sdcard根目录下

选择设置-安全和隐私-从存储设备安装证书

五、工具使用

在vps上装好了mitmproxy代理,在客户端也装好了CA证书,接下来就可以使用了。

第一步:在vps上启动mitmproxy

mitmproxy -b xxx.xxx.xxx(指定监听的接口) -p xxx(指定端口)

果然我是开源工具杀手,运行时又报错了。

运行错误问题解决:

当运行mitmproxy报错:

Error: mitmproxy requires a UTF console environment.

Set your LANG enviroment variable to something like en_US.UTF-8

你可以先运行locale查看当前的语言环境,我的vps就是POSIX环境

root@www:/# locale

LANG=

LANGUAGE=

LC_CTYPE=”POSIX”

LC_NUMERIC=”POSIX”

LC_TIME=”POSIX”

LC_COLLATE=”POSIX”

LC_MONETARY=”POSIX”

LC_MESSAGES=”POSIX”

LC_PAPER=”POSIX”

LC_NAME=”POSIX”

LC_ADDRESS=”POSIX”

LC_TELEPHONE=”POSIX”

LC_MEASUREMENT=”POSIX”

LC_IDENTIFICATION=”POSIX”

LC_ALL=

现在我们需要的是把其修改为en_US.UTF-8

方法参考http://jrs-s.net/2010/11/18/setting-locale-to-utf-8-in-debian/

vim /etc/default/localeLANG=en_US.UTF-8. locale-gen#编辑/etc/profile,与/etc/bash.bashrc,增加 export LANG=en_US.UTF-8echo “export LANG=en_US.UTF-8” > /etc/profileecho “export LANG=en_US.UTF-8” > /etc/bash.bashrc source /etc/profilesource /etc/bash.bashrc

现在再运行locale,可以看到语言修改过来了

root@www:/# locale

LANG=en_US.UTF-8

LANGUAGE=

LC_CTYPE=”en_US.UTF-8″

LC_NUMERIC=”en_US.UTF-8″

LC_TIME=”en_US.UTF-8″

LC_COLLATE=”en_US.UTF-8″

LC_MONETARY=”en_US.UTF-8″

LC_MESSAGES=”en_US.UTF-8″

LC_PAPER=”en_US.UTF-8″

LC_NAME=”en_US.UTF-8″

LC_ADDRESS=”en_US.UTF-8″

LC_TELEPHONE=”en_US.UTF-8″

LC_MEASUREMENT=”en_US.UTF-8″

LC_IDENTIFICATION=”en_US.UTF-8″

LC_ALL=

然后就可以正常的运行了!

第二步:在手机或PC或浏览器上选择使用该http代理

第三步:使用客户端访问,现在就可以操作通信数据了

六、常见操作

1. mitmproxy

就介绍最常用到的修改请求,并回放请求的方法吧

(1)方向键定位请求

 

 

(2)当黄色箭头>>定位到指定请求时,按回车enter进入请求中

 

 

(3)按e进入编辑状态,然后按对应的蓝色字体来选择修改的部分

 

 

可以修改query,查询字符串;path,路径;url ;header 请求头;form 表单;raw body 请求正文;method 请求方法。

(4)a 增加一行,tab键切换编辑字段,回车enter开始编辑,esc保存,q返回上一级

(5)修改完后,按r就可以重放请求,然后查看修改结果了

2. mitmdump

别忘了,mitmproxy还有个内向的双胞胎叫mitmdump(很像tcpdump),它是不交互版的mitmproxy。可以非实时的处理通信包。

我们可以在mitmproxy中按w,将通信数据保存到指定文件中后,然后用mitmdump来操作。接下来简单介绍一个例子,从mitmproxy中捕获到的数据包中,筛选出来自微博的数据包,然后重放这个数据包(其实也可以修改后再重放)

-n 表示不启用代理, -r表示从文件中读取数据包, -w表示将数据包存储到文件中,-c表示重放客户端请求包

mitmdump -nr all.data -w weibo.data “~u weibo”

mitmdump -nc weibo.data[replay] POST http://api.weibo.cn/2/client/addlog_batch?s=2edc0cfa7&gsid=4ubed3V0QehBa8KoNp4AA75J&c=android&wm=20005_0002&ua=Xiaomi-MI+2S__weibo__4.0.1__android__android4.1.1&oldwm=9975_0001&from=1040195010&skin=default&i=8764056d2&isgzip=&lang=zh_CN<< 200 OK 32B

3. mitmproxy API

开源精神最赞的是,可以像小时候玩积木一样,用大牛们提供的各种精巧工具,搭建自己合适的武器。

mitmproxy提供了libmproxy以供调用扩展。

我们可以查看一下libmproxy的详细说明,了解主要的API接口调用

pydoc libmproxy

官网给了一个自己编写脚本,来操纵数据包的例子,很简单,人人都能看懂

如下所示,就是在响应包中增加一个自定义头

def response(context, flow): flow.response.headers[“newheader”] = [“foo”]

我们可以在mitmdump 中使用这个脚本

-s表示从读取自定义脚本来处理数据包

mitmdump -ns examples/add_header.py -r infile -w outfile

好了,就介绍到这了。

七、希望交流

我在运行mitmdump重放http响应功能时候

mitmdump -S outfile

卡死了,到目前还没有找到原因,希望知道的大牛告之,万分感谢

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/144060.html<

(0)
运维的头像运维
上一篇2025-03-09 23:58
下一篇 2025-03-09 23:59

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注