InQL扫描器:高效GraphQL安全测试工具

InQL是一款专为GraphQL安全测试设计的工具,可作为独立脚本或Burp Suite扩展使用。它通过内省查询自动生成API文档和查询模板,大幅提升漏洞挖掘效率,支持HTML/JSON输出和代理配置。

InQL扫描器

2020年3月26日 - 作者:Andrea Brancaleoni

InQL现已公开!作为我们持续安全研究的一部分,我们开发了这款内部工具来加速GraphQL安全测试工作。我们兴奋地宣布,InQL已在Github上可用。

InQL可作为独立脚本或Burp Suite扩展使用(支持专业版和社区版)。该工具利用GraphQL内置的内省查询来转储查询、变更、订阅、字段和参数,并检索默认及自定义对象。收集的信息会被处理成HTML和JSON模式的API端点文档。InQL还能为所有已知类型生成查询模板。扫描器能够识别基本查询类型并用占位符替换它们,使查询准备好被远程API端点接收。

我们相信,这一功能结合将查询模板发送到Burp Repeater的能力,将减少利用GraphQL端点漏洞的时间,并大幅降低针对GraphQL技术栈的安全研究门槛。

InQL扫描器Burp Suite扩展

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

  • 搜索已知的GraphQL URL路径;工具将通过grep匹配已知值以检测目标网站中的GraphQL端点
  • 搜索暴露的GraphQL开发控制台(GraphiQL、GraphQL Playground和其他常见工具)
  • 在每个包含GraphQL的HTTP请求/响应上使用自定义GraphQL标签
  • 通过将请求发送到Burp的Repeater工具来利用模板生成功能
  • 使用自定义设置标签配置工具
1
<video>您的浏览器不支持视频标签。</video>

在Burp中启用InQL扫描器扩展

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

  1. 下载最新的Jython Jar
  2. 下载最新版本的InQL扫描器
  3. 启动Burp Suite
  4. Extender标签 > Options > Python Environment > 设置Jython独立JAR的位置
  5. Extender标签 > Extension > Add > Extension Type > 选择Python
  6. Extension File > 设置inql_burp.py的位置 > Next
  7. 输出窗口应显示以下消息:InQL Scanner Started!

未来我们可能会考虑将扩展集成到Burp的BApp商店中。

InQL演示

鉴于InQL的公开发布,我们完全重构了命令行界面。该界面保留了大部分Burp插件功能。现在可以通过pip安装工具并通过您喜欢的CLI运行它。

1
pip install inql

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
usage: inql [-h] [-t TARGET] [-f SCHEMA_JSON_FILE] [-k KEY] [-p PROXY]
            [--header HEADERS HEADERS] [-d] [--generate-html]
            [--generate-schema] [--generate-queries] [--insecure]
            [-o OUTPUT_DIRECTORY]

InQL扫描器

可选参数:
  -h, --help            显示帮助信息
  -t TARGET             远程GraphQL端点(https://<目标IP>/graphql)
  -f SCHEMA_JSON_FILE   JSON格式的模式文件
  -k KEY                API认证密钥
  -p PROXY              通过的Web代理IP(http://127.0.0.1:8080)
  --header HEADERS HEADERS
  -d                    用占位符值替换已知的GraphQL参数类型(对Burp Suite有用)
  --generate-html       生成HTML文档
  --generate-schema     生成JSON模式文档
  --generate-queries    生成查询
  --insecure            接受任何SSL/TLS证书
  -o OUTPUT_DIRECTORY   输出目录

可以在众多暴露的API上执行示例查询,例如anilist.co端点:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
$ inql -t https://anilist.co/graphql
[+] 写入查询模板
 |  Page
 |  Media
 |  MediaTrend
 |  AiringSchedule
 |  Character
 |  Staff
 |  MediaList
 |  MediaListCollection
 |  GenreCollection
 |  MediaTagCollection
 |  User
 |  Viewer
 |  Notification
 |  Studio
 |  Review
 |  Activity
 |  ActivityReply
 |  Following
 |  Follower
 |  Thread
 |  ThreadComment
 |  Recommendation
 |  Like
 |  Markdown
 |  AniChartUser
 |  SiteStatistics
[+] 写入查询模板
 |  UpdateUser
 |  SaveMediaListEntry
 |  UpdateMediaListEntries
 |  DeleteMediaListEntry
 |  DeleteCustomList
 |  SaveTextActivity
 |  SaveMessageActivity
 |  SaveListActivity
 |  DeleteActivity
 |  ToggleActivitySubscription
 |  SaveActivityReply
 |  DeleteActivityReply
 |  ToggleLike
 |  ToggleLikeV2
 |  ToggleFollow
 |  ToggleFavourite
 |  UpdateFavouriteOrder
 |  SaveReview
 |  DeleteReview
 |  RateReview
 |  SaveRecommendation
 |  SaveThread
 |  DeleteThread
 |  ToggleThreadSubscription
 |  SaveThreadComment
 |  DeleteThreadComment
 |  UpdateAniChartSettings
 |  UpdateAniChartHighlights
[+] 写入查询模板
[+] 写入查询模板

生成的HTML文档页面将包含所有可用查询、变更和订阅的详细信息。

保持关注!

早在2018年5月,我们发布了一篇关于GraphQL安全的博客文章,重点关注漏洞和错误配置。作为那项研究工作的一部分,我们开发了一个简单的脚本来查询GraphQL端点。发布后,我们收到了大量积极反馈,激发了进一步开发这一概念的更多兴趣。从那时起,我们改进了GraphQL测试方法和工具。作为标准客户 engagements 的一部分,我们经常对GraphQL技术进行测试,因此我们期望继续在这一领域进行研究工作。未来,我们将继续改进检测并使工具更加稳定。

这个项目是在Doyensec研究岛上用心制作的。

其他相关文章:

  • InQL v5:技术深度探讨 - 2023年8月17日
  • 介绍代理增强序列图(PESD) - 2023年2月14日
  • 那个你一直忽略的单一GraphQL问题 - 2021年5月20日
  • InQL扫描器v3 - 刚刚发布! - 2020年11月19日
  • InQL扫描器v2发布! - 2020年6月11日
  • 介绍burp-rest-api v2 - 2018年11月5日
  • GraphQL - 安全概述和测试技巧 - 2018年5月17日
  • 开发Burp Suite扩展培训 - 2017年3月2日
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计