图文 用于 GraphQL 安全测试的 Burp 扩展

课程时长 13秒

学习期限 36个月 退款期限 不支持

优惠价格 免费 会员价格 免费

难度级别 初级 学习人次 50 综合评分 5.0

内容实用 5.0分

简洁易懂 5.0分

逻辑清晰 5.0分

50
0
0
  • 详情
  • 目录

InQL 扫描仪

⚠️ 需要帮助! ⚠️

目前已知 InQL 会错误地解析某些 GraphQL 模式和内省查询结果。

请在此处报告这些问题,帮助我们改进 InQL 。我们将创建一个测试套件,并确保 InQL 在下一个主要版本之前正确解析所有边缘情况。


一种安全测试工具,可促进GraphQL技术安全审计工作。

InQL 可以用作独立脚本或用作Burp Suite扩展。

InQL 打嗝套件扩展

从该工具的 1.0.0 版本开始,InQL 被扩展为在 Burp Suite 中运行。在这种模式下,该工具将保留所有独立脚本功能,并添加一个方便的用户界面来处理查询。

使用 inql Burp Suite 的扩展,您可以:

  • 搜索已知的 GraphQL URL 路径;该工具将 grep 并匹配已知值以检测目标网站内的 GraphQL 端点
  • 搜索公开的 GraphQL 开发控制台(​GraphiQL​、GraphQL Playground 和其他标准控制台)
  • 使用显示在每个包含 GraphQL 的 HTTP 请求/响应上的自定义 GraphQL 选项卡
  • 通过将这些请求发送到 Burp 的转发器工具(“发送到转发器”)来利用模板生成
  • 通过将这些请求发送到嵌入式 GraphIQL(“发送到 GraphiQL”)来利用模板生成和编辑器支持
  • 使用自定义设置选项卡配置该工具

InQL BURP 预览

inql 在 Burp Suite 中使用,请导入 Python 扩展:

  • 下载Jython Jar
  • 启动 Burp Suite
  • Extender 选项卡 > 选项 > Python 环境 > 设置 Jython 独立 JAR 的位置
  • Extender 选项卡 > 扩展 > 添加 > 扩展类型 > 选择 Python
  • 在此处下载最新 inql_burp.py 版本
  • 扩展文件 > 设置位置 inql_burp.py> 下一步
  • 输出现在应显示以下消息:InQL Scanner Started!

打嗝扩展使用

开始使用 inql Burp 扩展很简单:

  1. 在顶部输入字段中加载 GraphQL 端点或 JSON 模式文件位置
  2. 按“加载”按钮
  3. 几秒钟后,左侧面板将刷新,加载所选端点的目录结构,如下例所示:
  • 网址
    • 询问
      • 时间戳 1
        • query1.查询
        • query2.查询
      • 时间戳 2
        • query1.查询
        • query2.查询
    • 突变
    • 订阅
  1. 选择任何​查询​/​变异​/订阅将在主文本区域加载相应的模板

特征

Burp GraphQL 查询定时器

从 3.0.0 版本开始,InQL 有一个集成的查询定时器。这个 Query Timer 是 Request Timer的重新构想,它可以过滤查询名称和正文。

Query Timer 默认启用,与 Cycles 检测器结合使用特别有用。测试人员可以在 graphql 编辑器模式(Repeater 和 GraphIQL)之间切换以识别DoS 查询。Query Timer 展示了通过计算每个查询的执行时间来攻击此类易受攻击的 graphql 端点的能力。

定时器

InQL 文档生成器

在 BURP 或独立模式下,InQL 可以为可用的 GraphQL 实体生成有意义的文档。结果以 HTML 页面或查询模板的形式提供。

生成的 HTML 文档页面将包含所有可用 QueriesMutations 和的详细信息 Subscriptions,如下所示:

预览

下面的截图展示了模板生成的使用:

预览

InQL 精确查询

基于 InQL 的内省中间表示 (IIR),该工具能够生成任意嵌套的查询,支持任何标量类型、枚举、数组和对象。

query {
  Character(
    id_not_in: [1334]
    sort: [ROLE_DESC]
    search: "code"
    id_not: 1334
    id: 1334
    id_in: [1334]
  ) {
    image {
      large
    }
    siteUrl
    favourites
    modNotes
    description(asHtml: true)
    media(sort: [TITLE_ROMAJI], type: ANIME, perPage: 1334, page: 1334) {
      edges {
        isMainStudio
      }
    }
    name {
      last
    }
    id
    isFavourite
    updatedAt
  }
}

虽然这可以实现从扫描器到其他工具组件(Repeater 和 GraphiQL 控制台)的无缝“发送到中继器”功能,但该工具仍然无法为GraphQL 自定义标量推断占位符。

InQL 循环检测器

新的自省中间表示 (IIR) 允许通过仅要求访问启用 graphql 自省的端点来检查定义的 graphql 模式中的循环。

此功能特别有用,可以自动执行使用图形求解算法的麻烦测试实践。在我们的测试中,该工具能够在几分钟内找到数百万个周期。

InQL 批量攻击者

新的“InQL Attacker”选项卡引入了批量攻击功能:

预览

用占位符替换查询参数,InQL 将生成批量攻击请求。例如这个请求:

query {
  Character(id: $[INT:1:2]) {
    uname {
      first
      last
    }
    gender
    age
  }
}

将转换为:

query {
  op1: Character(id: 1) {
    name {
      first
      last
    }
    gender
    age
  }
  op2: Character(id: 2) {
    name {
      first
      last
    }
    gender
    age
  }
}

支持多参数、限速检测和绕过,GraphQL 变量计划在以后的 InQL 版本中。欢迎提出其他想法和功能要求!

InQL 单机版

可以通过两种方式在没有 Burp 的情况下使用 InQL:

  1. CLI 版本,不需要 Jython,应该与 CPython / PyPy 一起工作
  2. GUI 版本,需要 Jython

独立 CLI

从 Python 运行 inql 将向目标 GraphQL 端点发出内省查询,以便获取元数据信息:

  • 查询、变更、订阅
  • 它的字段和参数
  • 对象和自定义对象类型
  • graphql 定义中的循环

InQL 可以检查内省查询结果并生成不同格式(如 HTML 和 JSON 模式)的干净文档。InQL 还能够为所有已知的基本数据类型生成模板(带有可选的占位符)。

对于所有支持的选项,请查看命令行帮助:

usage: inql [-h] [-t TARGET] [-f SCHEMA_JSON_FILE] [-k KEY] [-p PROXY]
            [--header HEADERS HEADERS] [-d] [--no-generate-html]
            [--no-generate-schema] [--no-generate-queries] [--generate-cycles]
            [--cycles-timeout CYCLES_TIMEOUT] [--cycles-streaming]
            [--generate-tsv] [--insecure] [-o OUTPUT_DIRECTORY]

InQL Scanner

optional arguments:
  -h, --help            show this help message and exit
  -t TARGET             Remote GraphQL Endpoint (https://<Target_IP>/graphql)
  -f SCHEMA_JSON_FILE   Schema file in JSON format
  -k KEY                API Authentication Key
  -p PROXY              IP of a web proxy to go through
                        (http://127.0.0.1:8080)
  --header HEADERS HEADERS
  -d                    Replace known GraphQL arguments types with placeholder
                        values (useful for Burp Suite)
  --no-generate-html    Generate HTML Documentation
  --no-generate-schema  Generate JSON Schema Documentation
  --no-generate-queries
                        Generate Queries
  --generate-cycles     Generate Cycles Report
  --cycles-timeout CYCLES_TIMEOUT
                        Cycles Report Timeout (in seconds)
  --cycles-streaming    Some graph are too complex to generate cycles in
                        reasonable time, stream to stdout
  --generate-tsv        Generate TSV representation of query templates. It may
                        be useful to quickly search for vulnerable I/O.
  --insecure            Accept any SSL/TLS certificate
  -o OUTPUT_DIRECTORY   Output Directory

独立图形用户界面

从 2.0.0 版本开始,InQL UI 无需 BURP 即可运行。现在可以为 jython 扫描仪 UI 安装独立的 InQL 并运行它。

在这种模式下,InQL 保留了大部分 Burp Scanner 功能,除了高级交互,例如“发送到中继器”和自动授权标头生成,可通过 BURP 获得。

要使用 inql 独立 UI:

  • 下载并安装Jython。Jython 可以在 macOS 上通过 brew 获得 brew install jython,或者在 Ubuntu 衍生版上通过 apt-get install -y jython
  • 下载 inql git clone https://github.com/doyensec/inql
  • 将目录更改为 inql cd inql
  • 通过 jython 启动 UI jython -m inql

NDR:在当前阶段,Jython 不支持 HTTP/2。对 HTTP/2 服务器的任何请求都将静默失败。我们建议使用 Burp 暂时绕过此限制。

贡献

有关如何为项目做出贡献的说明和指南,请参阅贡献指南。

第一章 下载方法