
GraphQL-Server-Engine-Fingerprinting-Tool, das wohlgeformte und fehlerhafte Abfragen sendet, um die Backend-Technologie zu identifizieren und Sicherheitsmaßnahmen anhand der GraphQL Threat Matrix zu bewerten.
graphw00f (inspiriert von wafw00f) ist das GraphQL-Fingerprinting-Tool für GQL-Endpoints. Es sendet eine Mischung aus harmlosen und fehlerhaften Abfragen, um die dahinterliegende GraphQL-Engine zu bestimmen. graphw00f nutzt das GraphQL Threat Matrix-Projekt, um Einblicke zu geben, welche Sicherheitsabwehr jede Technologie standardmäßig bietet und ob diese standardmäßig aktiviert oder deaktiviert sind.
Speziell erstellte Abfragen führen dazu, dass verschiedene GraphQL-Server-Implementierungen unterschiedlich auf Abfragen, Mutationen und Subscriptions reagieren. Dies macht es trivial, die Backend-Engine zu identifizieren und zwischen den verschiedenen GraphQL-Implementierungen zu unterscheiden. (CWE: CWE-200)
graphw00f unterstützt die Erkennung und das Fingerprinting von GraphQL-Servern, die entweder GET- oder POST-basierte Abfragen verwenden.
graphw00f versucht derzeit, die folgenden GraphQL-Engines zu erkennen:
Das graphw00f-Projekt verwendet das GraphQL Threat Matrix Project als seine Technologiesicherheits-Matrix-Datenbank. Wenn graphw00f erfolgreich einen GraphQL-Endpoint identifiziert, wird das Threat-Matrix-Dokument ausgegeben. Dieses Dokument hilft Sicherheitsingenieuren dabei, den Reifegrad der Technologie, die angebotenen Sicherheitsfunktionen und das Vorhandensein von CVEs zu identifizieren.

git clone https://github.com/dolevf/graphw00f.git
Usage: main.py -d -f -t http://example.com
Options:
-h, --help show this help message and exit
-r, --noredirect Do not follow redirections given by 3xx responses
-t URL, --target=URL target url with the path
-f, --fingerprint fingerprint mode
-d, --detect detect mode
-p PROXY, --proxy=PROXY
HTTP(S) proxy URL in the form
http://user:pass@host:port
-T TIMEOUT, --timeout=TIMEOUT
Request timeout in seconds
-o OUTPUT_FILE, --output-file=OUTPUT_FILE
Output results to a file (CSV)
-l, --list List all GraphQL technologies graphw00f is able to
detect
-u USERAGENT, --user-agent=USERAGENT
Custom user-agent to use (overrides the one from
headers configuration)
-H HEADER, --header=HEADER
Custom headers to send (e.g. "Authorization: Bearer
ey...").
-w WORDLIST, --wordlist=WORDLIST
Path to a list of custom GraphQL endpoints
-v, --version Print out the current version and exit.
Für graphw00f sind nicht viele Konfigurationen erforderlich. Wenn Sie jedoch z. B. Authorization-Header oder Cookies für einen bestimmten Endpoint setzen müssen, verwenden Sie die Datei conf.py.
# Custom Headers
HEADERS = {'User-Agent':'graphw00f'}
# Custom Cookies
COOKIES = {"PHPSESS":"DEADBEEF"}
Die Verwendung von --user-agent fügt den Schlüssel User-Agent hinzu, unabhängig davon, ob die Datei conf.py ihn enthält. Wenn die Datei bereits einen enthält, überschreibt der Befehlszeilenparameter diesen.
Dies ist ein Beispiel, wie man einen Endpoint identifiziert (-f), dessen GraphQL-Pfad bereits bekannt ist (/graphql).
python3 main.py -f -t https://demo.hypergraphql.org:8484/graphql
+-------------------+
| graphw00f |
+-------------------+
*** ***
** ***
** **
+--------------+ +--------------+
| Node X | | Node Y |
+--------------+ +--------------+
*** ***
** **
** **
+------------+
| Node Z |
+------------+
graphw00f - v1.0.7
The fingerprinting tool for GraphQL
Dolev Farhi <[email protected]>
[*] Checking if GraphQL is available at https://demo.hypergraphql.org:8484/graphql...
[*] Found GraphQL...
[*] Attempting to fingerprint...
[*] Discovered GraphQL Engine: (HyperGraphQL)
[!] Attack Surface Matrix: https://github.com/dolevf/graphw00f/blob/main/docs/hypergraphql.md
[!] Technologies: Java
[!] Homepage: https://www.hypergraphql.org
[*] Completed.
Dies ist ein Beispiel, wie graphw00f erkennen kann (-d), wo sich GraphQL befindet, und dann den Fingerprinting-Prozess ausführt (-f).
python3 main.py -f -d -t http://localhost:5000
+-------------------+
| graphw00f |
+-------------------+
*** ***
** ***
** **
+--------------+ +--------------+
| Node X | | Node Y |
+--------------+ +--------------+
*** ***
** **
** **
+------------+
| Node Z |
+------------+
graphw00f - v1.1.2
The fingerprinting tool for GraphQL
Dolev Farhi <[email protected]>
[*] Checking http://dvga.example.local:5000/graphql
[!] Found GraphQL at http://dvga.example.local:5000/graphql
[*] Attempting to fingerprint...
[*] Discovered GraphQL Engine: (Graphene)
[!] Attack Surface Matrix: https://github.com/nicholasaleks/graphql-threat-matrix/blob/master/implementations/graphene.md
[!] Technologies: Python
[!] Homepage: https://graphene-python.org
[*] Completed.
Bei Problemen mit graphw00f, wie z. B. Fehlalarmen, ungenauen Erkennungen, Bugs usw., erstellen Sie bitte ein GitHub-Issue mit den Umgebungsdetails.
Möchten Sie mehr über GraphQL erfahren? Besuchen Sie mein anderes Projekt und hacken Sie GraphQL: Damn Vulnerable GraphQL Application