
GraphQLスキーマの列挙とデータ抽出を自動化するツール。イントロスペクションドキュメントを反復処理し、クエリを再構築し、レスポンスを保存して、ペネトレーションテストやAPIセキュリティ評価に利用します。
Graphicator は、GraphQL の「スクレイパー」/抽出ツールです。このツールは、対象の GraphQL エンドポイントが返すイントロスペクションドキュメントを反復処理し、スキーマを内部形式に再構築して、サポートされているクエリを再作成します。作成されたクエリを使用してエンドポイントにリクエストを送信し、返されたレスポンスをファイルに保存します。
エラーレスポンスは保存されません。デフォルトでは、ツールは正しいレスポンスとエラーの両方をキャッシュするため、再実行時に同じクエリに対して再度アクセスすることはありません。
賢明に使用し、操作する許可を得たターゲットに対してのみ使用してください。
このツールが、ペネトレーションテスターとしての自身のテストを自動化し、まだ GraphQL テストを行っていない人にも後押しを与えることを願っています。
GraphQL エンドポイントの評価方法を学ぶには: https://cybervelia.com/?p=736&preview=true
python3 -m pip install -r requirements.txt
docker run --rm -it -p8005:80 cybervelia/graphicator --target http://the-target:port/graphql --verbose
タスクが完了すると、結果が zip ファイルに圧縮され、ポート 8005 で提供される Web サーバーを介して提供されます。コンテナを停止するには、CTRL+C を押します。コンテナが停止されると、データも削除されます。また、必要に応じてホストポートを変更することもできます。
python3 graphicator.py [args...]
最初のステップはターゲットを設定することです。そのためには、--target オプションまたは --file を使用したファイルのいずれかを指定する必要があります。
引数で単一のターゲットを設定
python3 graphicator.py --target https://subdomain.domain:port/graphql
複数のターゲットを設定
python3 graphicator.py --target https://subdomain.domain:port/graphql --target https://target2.tld/graphql
ファイルでターゲットを設定
python3 graphicator.py --file file.txt
ファイルには、次のように 1 行に 1 つの URL を含める必要があります。
http://target1.tld/graphql
http://sub.target2.tld/graphql
http://subxyz.target3.tld:8080/graphql
ツールを任意のプロキシに接続できます。
デフォルトの Burp 設定 (ポート 8080) に接続
python3 graphicator.py --target target --default-burp-proxy
独自のプロキシに接続
python3 graphicator.py --target target --use-proxy
Tor 経由で接続
python3 graphicator.py --target target --use-tor
python3 graphicator.py --target target --header "x-api-key:60b725f10c9c85c70d97880dfe8191b3"
python3 graphicator.py --target target --verbose
python3 graphicator.py --target target --multi
python3 graphicator.py --target target --insecure
python3 graphicator.py --target target --no-cache
python3 graphicator.py --target http://localhost:8000/graphql --verbose --multi
_____ __ _ __
/ ___/____ ___ _ ___ / / (_)____ ___ _ / /_ ___ ____
/ (_ // __// _ `// _ \ / _ \ / // __// _ `// __// _ \ / __/
\___//_/ \_,_// .__//_//_//_/ \__/ \_,_/ \__/ \___//_/
/_/
By @fand0mas
[-] Targets: 1
[-] Headers: 'Content-Type', 'User-Agent'
[-] Verbose
[-] Using cache: True
************************************************************
0%| | 0/1 [00:00<?, ?it/s][*] Enumerating... http://localhost:8000/graphql
[*] Retrieving... => query {getArticles { id,title,views } }
[*] Retrieving... => query {getUsers { id,username,email,password,level } }
100%|█████████████████████████████████████████████| 1/1 [00:00<00:00, 35.78it/s]
$ cat reqcache/9652f1e7c02639d8f78d1c5263093072fb4fd06c.json
{
"data": {
"getUsers": [
{
"id": 1,
"username": "theo",
"email": "[email protected]",
"password": "1234",
"level": 1
},
{
"id": 2,
"username": "john",
"email": "[email protected]",
"password": "5678",
"level": 1
}
]
}
}
$ cat reqcache-queries/9652f1e7c02639d8f78d1c5263093072fb4fd06c.query
query {getUsers { id,username,email,password,level } }
3 つのフォルダが作成されます。
ファイル名は、クエリと URL を考慮したハッシュです。
Copyright 2023 Cybervelia Ltd
本ソフトウェアおよび関連文書ファイル(以下「ソフトウェア」)の複製を入手する者に対して、ソフトウェアを制限なく扱う権利(使用、複製、変更、統合、公開、頒布、サブライセンス、および/または販売する権利を含むがこれらに限定されない)を無償で許可します。また、ソフトウェアが提供されるすべての者に対しても、同様の権利を許可します。ただし、以下の条件に従うものとします。
上記の著作権表示およびこの許可表示は、ソフトウェアのすべての複製または重要な部分に含まれるものとします。
ソフトウェアは「現状のまま」提供され、明示的または黙示的を問わず、いかなる種類の保証も行われません。これには、商品性、特定目的への適合性、および権利非侵害に関する保証が含まれますが、これらに限定されません。いかなる場合も、著作権者または著作権保持者は、契約行為、不法行為、またはそれ以外の行為に基づく、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因または関連するいかなる請求、損害、またはその他の責任も負いません。
このツールは (@fand0mas) によって作成および保守されています。
コントリビューションも歓迎します。