0x00
不知道各位师傅们在使用BurpSuite时有没有这样的困扰,原生自带的修改请求响应包的功能太难用了,或者根本不支持,比如:
-
我希望在匹配某些请求PATH的时候,才修改对应的响应包
-
对于一些加密请求,我希望在请求前自动加密,响应后自动解密
-
有一些网站会带一个时间戳,我希望每次请求都自动更新它,不要让我手动去改
-
......
等等,还有一个最难受的地方,这个功能的UI实在是太烂了,太难用了!!
这个ui你能忍?藏得又深,又不好编辑
0x01 mimtproxy
mimtproxy这个工具可能很多人都听过,但是我还是要再墙裂推荐一下,简直太好用了!先看两个例子。
根据请求路径修改响应包
这是一个获取用户信息的接口,正常是返回异常:
但是我们需要绕过前端的判断,所以需要使用mimtproxy修改响应包,在匹配路径为/user的请求时,才将它替换:
效果如下,匹配到/user的请求响应被替换了:
请求自动签名
这算是一个比较常见的需求了。比如网站,都会有一个签名请求头,是根据请求参数计算出来的,如果签名不对,那么请求就会异常,我们就可以使用mimtproxy来实现自动签名。
原请求是id=1,我们将id修改为2之后,服务端报错:非法的签名,因为请求头Sign还是id=1的:
使用mimtproxy的脚本实现自动签名:
效果如下,可以看到我们在BurpSuite的签名没变,但是请求成功了,因为mimtproxy那里自动对参数进行了签名并且修改了Sign请求头:
配置与使用
安装
下载和安装不多说,直接去官网下载即可:https://www.mitmproxy.org
但是如果需要使用python脚本,则需要再使用pip安装mimtproxy的库,如下:
pipx install mitmproxy
官网的安装教程很详细,可以直接参考:https://docs.mitmproxy.org/stable/overview-installation/
上下游代理区别
安装成功之后,我们可以将mimtproxy作为BurpSuite的上游代理或者下游代理来使用。它们的区别在于,请求是先经过mimtproxy,还是先经过BurpSuite:
BurpSuite代理监听的端口是8080,mimtproxy监听的端口是9091
我一般喜欢将mimtproxy配置为BurpSuite的上游代理,也就是数据先经过BurpSuite,再经过mimtproxy,因为这样才可以方便我们在repeat模块中去修改请求包。
但是这也有一个坏处,就是我们如果在mimtproxy中配置了修改响应包,那么我们在BP中就看不到原始响应包了,因为已经被修改了。
配置
然后在BP中搜索upstream,然后增加一个9091的上游代理配置即可(假设我们mimtproxy监听的端口是9091),如下:
如果我们之前浏览器的代理配置是走BurpSuite,那么浏览器的代理配置不变,还是配置为8080(假设我们的BurpSuite代理监听的8080),因为我们的请求还是先经过BP。
使用
我们先启动mimtproxy,命令如下:
mitmdump -p 9091 -s mimt_response_test.py --ssl-insecure
9091是代理端口,-s是指定python脚本,--ssl-insecure是忽略证书校验
启动成功之后,那么mimtporxy则会开始监听9091端口了,并且也加载了我们的脚本文件mimt_response_test.py
:
此时我们就配置完成了,我们从浏览器发起的请求,会先经过BurpSuite,再经过mimtproxy,最后到达目标服务器。
脚本
最后我们可以写脚本了,其实很简单,脚本里面只需要实现2个方法就可以修改对应的请求响应数据了,分别是request
和response
:
def request(flow: http.HTTPFlow):
"""
这个方法修改请求数据
"""
pass
def response(flow: http.HTTPFlow):
"""
这个方法修改响应数据
"""
pass
比如我们实现一个简单的根据请求路径来修改响应数据的功能:
实现起来十分简单,我们从mimt_config.json里面读取文件,根据文件里面配置来修改响应数据,mimt_config.json文件如下:
如果请求路径里面包含/user
,则根据配置文件将响应数据修改为/user
对应的value。
为什么不直接写在脚本里面?还要再写一个配置文件这么麻烦?
主要是为了复用,因为这样如果我们后面还需要增加根据什么路径来替换响应体的话,只需要在配置文件里面增加对应的内容就可以了。
0x02
有了mimtproxy之后,我们可以很容易的去实现一些半自动化的功能了,比如上面提到的自动签名、加密解等操作。而且实现也非常简单,希望能给师傅们带来一点新的思路吧~
如果需要文章中的根据路径自动替换响应包的代码,也可以后台回复mimt获取相关的代码。自己实现也可以,就那么几行代码,超简单~
欢迎关注我的公众号“混入安全圈的程序猿”,更多原创文章第一时间推送!