InQL Scanner:GraphQL安全测试插件

作为我们团队安全研究的一部分,近期开发了一个加快GraphQL安全测试的工具。现在我们正式将它——InQL——在Github上开源。

InQL Scanner:GraphQL安全测试插件

InQL可以作为独立的脚本使用,也可以作为BurpSuite的插件使用(适用于专业版和社区版)。该工具利用GraphQL内置的introspection query来转储queries、mutations、subscriptions、字段、参数和检索默认和自定义对象。该工具会先收集这些信息,然后再处理这些信息,以HTML和JSON模式的形式构造出API端点文档。InQL还可以为所有已知类型生成查询模板。扫描器能够识别基本的查询类型,并将它们替换为占位符,使查询准备好被远程API端点接收。

我们相信以上特性,配合将查询模板发送到Burp中Repeater的能力,将减少研究GraphQL端点中的漏洞的时间,并大大降低针对GraphQL安全技术研究的门槛。

InQL扫描器Burp套件扩展

使用inql的Burp插件,你可以:

1.搜索已知的GraphQL URL路径,该工具将使用grep和匹配已知值来检测目标网站中的GraphQL端点

2.搜索公开的GraphQL开发控制台(GraphiQL、GraphQL Playground和其他公开程序)

3.使用在每个包含GraphQL的HTTP请求/响应上显示的自定义GraphQL选项卡

4.通过将这些请求发送到Burp的Repeater来影响模板生成

5.通过使用自定义设置选项卡配置工具

<code>演示视频地址:https://blog.doyensec.com/public/images/inql_demo.mp4
/<code>
InQL Scanner:GraphQL安全测试插件

在Burp中启用InQL扫描扩展

要在BurpSuite中使用inql,需导入Python扩展:

  • 下载最新的Jython Jar
  • 下载最新版本的InQL扫描器
  • 打开BurpSuite
  • Extender Tab > Options > Python Enviroment >设置Jython JAR的位置
  • Extender Tab > Extension > Add > Extension Type > 选择Python
  • Extension File > 设置inql_burp.py的位置 > Next
  • 相关输出窗口会显示以下消息:InQL扫描器启动!

在未来,我们可能会考虑在Burp的BApp Store中上架扩展。

InQL演示

根据InQL的公开版本中,我们完全修改了命令行界面,保留了Burp插件的大部分功能。

现在可以使用pip安装该工具,并通过CLI运行它。

<code>pip install inql
/<code>

所有支持的选项可通过help显示:

<code>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 Scanner

optional arguments:
-h, --help show this help message and exit
-t TARGET Remote GraphQL Endpoint (https://<target>/graphql)
-f SCHEMA_JSON_FILE Schema file in JSON format
-k KEY API Authentication Key
-p PROXY IP of 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)
--generate-html Generate HTML Documentation
--generate-schema Generate JSON Schema Documentation
--generate-queries Generate Queries
--insecure Accept any SSL/TLS certificate
-o OUTPUT_DIRECTORY Output Directory
/<target>/<code>

查询示例如下(可通过众多公开的api进行测试,例如anilist.co):

<code>$ $ inql -t https://anilist.co/graphql
[+] Writing Queries Templates
| 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
[+] Writing Queries Templates
| UpdateUser
| SaveMediaListEntry
| UpdateMediaListEntries
| DeleteMediaListEntry
| DeleteCustomList
| SaveTextActivity
| SaveMessageActivity
| SaveListActivity
| DeleteActivity
| ToggleActivitySubsc ription
| SaveActivityReply
| DeleteActivityReply
| ToggleLike
| ToggleLikeV2
| ToggleFollow
| ToggleFavourite
| UpdateFavouriteOrder
| SaveReview
| DeleteReview
| RateReview
| SaveRecommendation
| SaveThread
| DeleteThread
| ToggleThreadSubsc ription
| SaveThreadComment
| DeleteThreadComment
| UpdateAniChartSettings
| UpdateAniChartHighlights
[+] Writing Queries Templates
[+] Writing Queries Templates
/<code>

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

后续

在2018年5月,我们发布了一篇关于GraphQL安全性的文章,其中我们重点介绍了相关漏洞和错误配置。而作为研究工作的一部分,我们早期开发了一个用于查询GraphQL端点的简单脚本,很快就收到了很多积极的反馈,激发了我们更多的兴趣,于是我们不断改进GraphQL测试方法和工具。希望今后我们能开发出更强大,更稳定的工具。

<code>本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://blog.doyensec.com/2020/03/26/graphql-scanner.html/<code>


分享到:


相關文章: