- 详情
- 目录
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 Suite 中使用,请导入 Python 扩展:
- 下载Jython Jar
- 启动 Burp Suite
- Extender 选项卡 > 选项 > Python 环境 > 设置 Jython 独立 JAR 的位置
- Extender 选项卡 > 扩展 > 添加 > 扩展类型 > 选择 Python
- 在此处下载最新
inql_burp.py版本 - 扩展文件 > 设置位置
inql_burp.py> 下一步 - 输出现在应显示以下消息:
InQL Scanner Started!
打嗝扩展使用
开始使用 inql Burp 扩展很简单:
- 在顶部输入字段中加载 GraphQL 端点或 JSON 模式文件位置
- 按“加载”按钮
- 几秒钟后,左侧面板将刷新,加载所选端点的目录结构,如下例所示:
- 网址
-
- 询问
-
-
- 时间戳 1
-
-
-
-
- query1.查询
-
-
-
-
-
- query2.查询
-
-
-
-
- 时间戳 2
-
-
-
-
- query1.查询
-
-
-
-
-
- query2.查询
-
-
-
- 突变
-
- 订阅
- 选择任何查询/变异/订阅将在主文本区域加载相应的模板
特征
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 文档页面将包含所有可用 Queries、Mutations 和的详细信息 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:
- CLI 版本,不需要 Jython,应该与 CPython / PyPy 一起工作
- 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 暂时绕过此限制。
贡献
有关如何为项目做出贡献的说明和指南,请参阅贡献指南。





