InQL Scanner:GraphQL安全测试插件

iso60001  184天前

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

22.jpg

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.通过使用自定义设置选项卡配置工具

演示视频地址:https://blog.doyensec.com/public/images/inql_demo.mp4

33.png

在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运行它。

pip install inql

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

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_IP>/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

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

$ $ 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

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

后续

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

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

最新评论

昵称
邮箱
提交评论