基于mitmproxy的被动扫描代理

摘要: 基于mitmproxy的被动扫描代理

前言

Web代理服务器是网络的中间实体,代理位于客户端和服务器之间,扮演中间人的角色,在各端点之间来回传输HTTP报文,而其具体实现有诸如Goproxy,mitmproxy等等开源项目,其中的mitmproxy是Python编写的一款功能完善的代理工具,mitmproxy是一款支持拦截HTTP和HTTPS请求和响应并即时修改它们的交互式中间人代理工具。同时它提供了Python API给开发者编写插件用来自定义对流量进行处理和修改。

本章会使用mitmproxy去实现一个简单的被动扫描代理,以供思路参考。

概述

git clone https://github.com/mitmproxy/mitmproxy.git
cd mitmproxy
./dev.sh

版本 5.0.0.dev

1.png

设置完代理之后,mitmdump爬取效果如下:

2.jpg

mitmproxy的被动扫描代理思路

mitmprxoy 0.16以下的版本是提供libmproxy库给开发者进行拓展的,目前使用的mitmproxy 5.0.5 Dev,已经没有对libmproxy模块进行维护了,其官方文档推荐的是使用mitmproxy的addons插件模块(内联脚本)进行拓展。内联脚本可以使用mitmdump进行执行,以 > mitmdump -s ./anatomy.py 的方式进行调用。官方文档对于addons插件模块的内联脚本格式如下:如上所示,插件中的request和response函数可以用于分别处理对应的请求参数,其函数接受的flow参数为mitmporxy/http.py中的HTTPflow 数据流类,其类中包含HTTPrequest和HTTPresponse等属性。

image.png

如上所示,插件中的request和response函数可以用于分别处理对应的请求参数,其函数接受的flow参数为mitmporxy/http.py中的HTTPflow 数据流类,其类中包含HTTPrequest和HTTPresponse等属性。

3.jpg

对于数据流的请求对象调用,则使用flow.request的方式调用,其数据对象为HTTPrequest对象 ,对象的内容和属性如下所示。

4.jpg

本章被动扫描代理的为被动代理(获取数据流) -> 扫描器扫描的思路。   通过被动扫描器获取数据流然后将数据流导入到扫描进程中,扫描进程进行扫描,输出结果的方式,下面会以demo进行实例。demo将会分别启用扫描和代理两个进程,通过接受代理请求流导入到扫描进程中进行扫描,双进程间主要使用queue来进行进程间的通信。

官方文档介绍的插件运行是以mitmdump -s ./anatomy.py控制终端执行的方式,但为了方便扫描器进行集成,这里采用直接调用mitmproxy模块的方式进行调用。

调用mitmproxy模块的方式主要是通过模拟mitmdump的启动模式进行插件的调用。代码如下,mitmproxy.tools._main将会调用DumpMaster,DumpMaster是master.Master的子类,master.Master是mitmproxy的主线程处理的核心类。

image.png

DumpMaster代码如下,通过self.addons.add(HandleRequest(request_queue))的方式添加我们的数据处理插件HandleRequest(),然后使用with_handle_request=True的方式进行启用。

image.png

下面的代码为数据流处理实例,数据流处理后的结果将会通过queue的方式传给扫描器进程。

image.png

下面代码为扫描器进程demo的代码。它会以Queue接受代理线程传递过来的数据,然后对数据处理,并进程扫描。

image.png

最后以多线程的方式启动代理进程和扫描器进程。

image.png

详细代码myproxy.py

image.png

image.png

插件代码handlerequest.py

image.png

启动代理后效果如下。python3 myproxy.py 启动

5.png

mitmproxy插件化Fastjson漏洞扫描思路

mitmproxy的支持的addons插件模块允许开发者其自定义对流量进行处理和修改,对于XXE,Fastjson,等基于交互流量的漏洞检测就可以通过mitmptoxy的插件模块进行实现,下面会以fastjson检测脚本进行测试。插件的功能为通过识别application/json数据,然后使用fastjson payload进行发送,通过判断dnslog的的日志结果存在与否来判断漏洞的存在,具体代码如下代码如下:

image.png

image.png

image.png

image.png

结果如下:

6.jpg

参考

GitHub–w-digital-scanner/w13scan: Passive Security Scanner (被动安全扫描器)

mitmproxy官方文档

《HTTP权威指南》

原文链接:https://www.freebuf.com/articles/web/216301.html



上一篇:HFish:企业安全测试主动...
下一篇:开源蜜罐T-pot 19.0...