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扩展:
- 下载最新的Jython Jar
- 下载最新版本的InQL扫描器
- 启动Burp Suite
- Extender标签 > Options > Python Environment > 设置Jython独立JAR的位置
- Extender标签 > Extension > Add > Extension Type > 选择Python
- Extension File > 设置inql_burp.py的位置 > Next
- 输出窗口应显示以下消息:InQL Scanner Started!
未来我们可能会考虑将扩展集成到Burp的BApp商店中。
InQL演示
鉴于InQL的公开发布,我们完全重构了命令行界面。该界面保留了大部分Burp插件功能。现在可以通过pip安装工具并通过您喜欢的CLI运行它。
查看所有支持的选项,请查看命令行帮助:
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日