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>


分享到:


相關文章: