通过捕获流量自动逆向工程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 流量并创建规范需要执行以下步骤:

  1. 使用内置于 mitmproxy 中的 mitmweb 工具捕获流量。个人推荐使用 mitmweb。

    $ mitmweb
    Web server listening at http://127.0.0.1:8081/
    Proxy server listening at http://*:9999
    ...
    

    重要提示

    要配置您的客户端使用 mitmproxy 提供的代理,请参考 mitmproxy 文档 以获取更多信息。

  2. 将流量保存到一个流文件中。

    在 mitmweb 中,您可以通过使用“文件”菜单并选择“保存”来完成:

    ad1a1b7183093728

  3. 运行 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

  4. 运行第一遍应该已经在模式文件中创建了一个类似于以下的部分:

    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: 前缀。您还可以调整出现在路径中的参数。

  5. 运行 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

  1. 捕获并从浏览器 DevTools 导出流量。

    在浏览器 DevTools 中,转到 Network 标签,并单击“导出 HAR”按钮。

    ad1a1b7183093746

  2. 以与 mitmproxy 转储相同的方式继续操作。 mitmproxy2swagger 将自动检测 HAR 文件并处理它。

示例输出请参见示例。您可以在那里找到一个生成的模式和一个包含生成文档的html文件(通过 redoc-cli)。

点击此处查看生成的html文件。

开发和贡献

该项目使用:

要安装依赖项:

poetry install

运行校验器:

pre-commit run --all-files

安装预提交钩子:

pre-commit install

运行测试:

poetry run pytest

运行覆盖测试:

poetry run pytest --cov=mitmproxy2swagger
标签:工具分享, 思路分享, 学习笔记