
Automatisiertes GraphQL-Schema-Enumeration- und Datenextraktionstool, das Introspectationsdokumente durchläuft, Abfragen rekonstruiert und Antworten für Penetrationstests und API-Sicherheitsbewertungen speichert.
Graphicator ist ein GraphQL-"Scraper" / Extraktor. Das Tool durchläuft das vom anvisierten GraphQL-Endpunkt zurückgegebene Introspections-Dokument, strukturiert das Schema dann in eine interne Form um, sodass es die unterstützten Abfragen neu erstellen kann. Sobald solche Abfragen erstellt sind, werden sie verwendet, um Anfragen an den Endpunkt zu senden, und die zurückgegebene Antwort wird in einer Datei gespeichert.
Fehlerhafte Antworten werden nicht gespeichert. Standardmäßig speichert das Tool die korrekten Antworten im Cache und ebenfalls die Fehler. Wenn das Tool erneut ausgeführt wird, werden dieselben Abfragen nicht noch einmal durchlaufen.
Verwenden Sie es weise und nur für Ziele, für die Sie die Berechtigung zur Interaktion haben.
Wir hoffen, dass das Tool Ihre eigenen Tests als Penetrationstester automatisiert und auch denjenigen einen Anstoß gibt, die noch keine GraphQL-Tests durchführen.
So führen Sie Bewertungen von GraphQL-Endpunkten durch: 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
Wenn die Aufgabe abgeschlossen ist, werden die Ergebnisse gezippt und das ZIP wird über einen Webserver bereitgestellt, der auf Port 8005 läuft. Um den Container zu beenden, drücken Sie STRG+C. Wenn der Container gestoppt wird, werden die Daten ebenfalls gelöscht. Sie können den Host-Port nach Ihren Bedürfnissen ändern.
python3 graphicator.py [Argumente...]
Der erste Schritt ist die Konfiguration des Ziels. Dazu müssen Sie entweder eine Option --target oder eine Datei mit --file angeben.
Ein einzelnes Ziel über Argumente festlegen
python3 graphicator.py --target https://subdomain.domain:port/graphql
Mehrere Ziele festlegen
python3 graphicator.py --target https://subdomain.domain:port/graphql --target https://target2.tld/graphql
Ziele über eine Datei festlegen
python3 graphicator.py --file datei.txt
Die Datei sollte eine URL pro Zeile enthalten:
http://target1.tld/graphql
http://sub.target2.tld/graphql
http://subxyz.target3.tld:8080/graphql
Sie können das Tool mit einem beliebigen Proxy verbinden.
Mit den Standard-Burp-Einstellungen (Port 8080) verbinden
python3 graphicator.py --target target --default-burp-proxy
Mit Ihrem eigenen Proxy verbinden
python3 graphicator.py --target target --use-proxy
Über Tor verbinden
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 } }
Es werden drei Ordner erstellt:
Der Dateiname ist der Hash, der die Abfrage und die URL berücksichtigt.
Copyright 2023 Cybervelia Ltd
Jeder, der eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die „Software") erhält, wird hiermit kostenlos die Erlaubnis erteilt, die Software ohne Einschränkung zu nutzen, einschließlich und ohne Beschränkung der Rechte zur Verwendung, Vervielfältigung, Änderung, Zusammenführung, Veröffentlichung, Verbreitung, Unterlizenzierung und/oder zum Verkauf von Kopien der Software, und Personen, denen die Software zur Verfügung gestellt wird, dies unter den folgenden Bedingungen zu gestatten:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD OHNE MÄNGELGEWÄHR GELIEFERT, OHNE IRGENDEINE AUSDRÜCKLICHE ODER IMPLIZITE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND DER NICHTVERLETZUNG VON RECHTEN DRITTER. IN KEINEM FALL SIND DIE AUTOREN ODER URHEBERRECHTSINHABER HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE VERPFLICHTUNGEN, EGAL OB AUS VERTRAG, UNERLAUBTER HANDLUNG ODER ANDERWEITIG, DIE AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN GESCHÄFTEN MIT DER SOFTWARE ENTSTEHEN.
Das Tool wurde erstellt und wird gepflegt von (@fand0mas).
Beiträge sind ebenfalls willkommen.