通过捕获流量自动逆向工程REST API
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/bbhunter/mitmproxy2swagger
小编推荐
mitmproxy2swagger是一个自动将mitmproxy捕捉到的流量转换为OpenAPI 3.0规范的工具,可用于自动反向工程REST API。
相关技术点
- mitmproxy: 一个开源的代理软件,可以截取和修改HTTP和HTTPS流量。
- OpenAPI 3.0规范: 一种描述RESTful API的语言,提供了一种基于JSON和YAML的语言来描述API功能、请求和响应,以及如何使用API。
项目用途
- 自动将mitmproxy捕捉到的流量转换为OpenAPI 3.0规范。
- 可用于自动反向工程REST API,提供了API的描述、请求和响应的详细信息,以及如何使用API的说明。
mitmproxy2swagger
这是一个自动将mitmproxy捕获转换为OpenAPI 3.0规范的工具。这意味着您只需运行应用程序并捕获流量,就可以自动反向工程REST API。
🆕 新!
增加了支持处理从浏览器DevTools导出的HAR。有关更多详细信息,请参见使用-HAR。
安装
首先,您需要python3和pip3。
$ pip install mitmproxy2swagger
# ... 或者 ...
$ pip3 install mitmproxy2swagger
# ... 或者 ...
$ git clone git@github.com:alufers/mitmproxy2swagger.git
$ cd mitmproxy2swagger
$ docker build -t mitmproxy2swagger .
然后克隆存储库并根据以下示例运行mitmproxy2swagger。
用法
Mitmproxy使用 mitmproxy 工具检查 HTTP 流量并创建规范需要执行以下步骤:
-
使用内置于 mitmproxy 中的 mitmweb 工具捕获流量。个人推荐使用 mitmweb。
$ mitmweb Web server listening at http://127.0.0.1:8081/ Proxy server listening at http://*:9999 ...重要提示
要配置您的客户端使用 mitmproxy 提供的代理,请参考 mitmproxy 文档 以获取更多信息。
-
将流量保存到一个流文件中。
在 mitmweb 中,您可以通过使用“文件”菜单并选择“保存”来完成:

-
运行 mitmproxy2swagger 的第一遍:
$ mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix> # ... 或 ... $ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix>请注意,您可以使用现有模式,此时现有模式将通过新数据进行扩展。您还可以多次运行它并使用不同的流捕获,捕获的数据会被安全合并。
<api_prefix>是您希望逆向工程的 API 的基本 URL。您需要通过观察 mitmproxy 中的请求来获得它。例如,如果应用程序进行了以下请求:
https://api.example.com/v1/login https://api.example.com/v1/users/2 https://api.example.com/v1/users/2/profile可能的前缀是
https://api.example.com/v1。 -
运行第一遍应该已经在模式文件中创建了一个类似于以下的部分:
x-path-templates: # 删除 ignore: 前缀以生成带有其 URL 的终端节点 # 与顶部更接近的行优先级更高,匹配是贪婪的 - ignore:/addresses - ignore:/basket - ignore:/basket/add - ignore:/basket/checkouts - ignore:/basket/coupons/attach/{id} - ignore:/basket/coupons/attach/104754您应该使用文本编辑器编辑模式文件,并从您希望生成的路径中删除
ignore:前缀。您还可以调整出现在路径中的参数。 -
运行 mitmproxy2swagger 的第二遍:
$ mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix> [--examples] # ... 或 ... $ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix> [--examples]第二次运行命令(使用相同的模式文件)将捕获已编辑的行并生成终端节点描述。
请注意,mitmproxy2swagger 不会覆盖现有的终端节点描述,如果要覆盖它们,则可以在运行第二遍之前将其删除。
传递
--examples将向请求和响应添加示例数据。使用此选项时要小心,因为它可能向模式中添加敏感数据(令牌、密码、个人信息等)。 传递--headers将向请求和响应添加头数据。使用此选项时要小心,因为它可能向模式中添加敏感数据(令牌、密码、个人信息等)。
HAR
-
捕获并从浏览器 DevTools 导出流量。
在浏览器 DevTools 中,转到 Network 标签,并单击“导出 HAR”按钮。

-
以与 mitmproxy 转储相同的方式继续操作。
mitmproxy2swagger将自动检测 HAR 文件并处理它。
示例输出请参见示例。您可以在那里找到一个生成的模式和一个包含生成文档的html文件(通过 redoc-cli)。
点击此处查看生成的html文件。
开发和贡献
该项目使用:
- poetry 用于依赖管理
- pre-commit 用于代码格式化和校验
- pytest 用于单元测试
要安装依赖项:
poetry install
运行校验器:
pre-commit run --all-files
安装预提交钩子:
pre-commit install
运行测试:
poetry run pytest
运行覆盖测试:
poetry run pytest --cov=mitmproxy2swagger