
Outil de fingerprinting de moteur de serveur GraphQL qui envoie des requêtes bénignes et malformées pour identifier la technologie back-end et évaluer les défenses de sécurité via la GraphQL Threat Matrix.
graphw00f (inspiré par wafw00f) est l'outil d'empreinte numérique pour les endpoints GQL. Il envoie un mélange de requêtes bénignes et malformées pour déterminer le moteur GraphQL qui s'exécute en arrière-plan. graphw00f utilise le projet GraphQL Threat Matrix pour fournir un aperçu des défenses de sécurité que chaque technologie offre par défaut, et si elles sont activées ou désactivées par défaut.
Des requêtes spécialement conçues provoquent des réponses uniques de différentes implémentations de serveur GraphQL aux requêtes, mutations et abonnements, ce qui rend triviale l'empreinte du moteur backend et la distinction entre les diverses implémentations GraphQL. (CWE : CWE-200)
graphw00f prend en charge la détection et l'empreinte des serveurs GraphQL qui utilisent des requêtes basées sur GET ou POST.
graphw00f tente actuellement de découvrir les moteurs GraphQL suivants :
Le projet graphw00f utilise le GraphQL Threat Matrix Project comme base de données de matrice de sécurité technologique. Lorsque graphw00f identifie avec succès un endpoint GraphQL, il affiche le document de matrice de menaces. Ce document aide les ingénieurs en sécurité à évaluer la maturité de la technologie, les fonctionnalités de sécurité qu'elle offre et si elle contient des CVE.

git clone https://github.com/dolevf/graphw00f.git
Usage: main.py -d -f -t http://example.com
Options:
-h, --help affiche ce message d'aide et quitte
-r, --noredirect Ne pas suivre les redirections données par les réponses 3xx
-t URL, --target=URL URL cible avec le chemin
-f, --fingerprint mode empreinte
-d, --detect mode détection
-p PROXY, --proxy=PROXY
URL du proxy HTTP(S) sous la forme
http://user:pass@host:port
-T TIMEOUT, --timeout=TIMEOUT
Délai d'attente de la requête en secondes
-o OUTPUT_FILE, --output-file=OUTPUT_FILE
Écrire les résultats dans un fichier (CSV)
-l, --list Lister toutes les technologies GraphQL que graphw00f peut
détecter
-u USERAGENT, --user-agent=USERAGENT
User-agent personnalisé à utiliser (remplace celui de la
configuration des en-têtes)
-H HEADER, --header=HEADER
En-têtes personnalisés à envoyer (par ex. "Authorization: Bearer
ey...").
-w WORDLIST, --wordlist=WORDLIST
Chemin vers une liste d'endpoints GraphQL personnalisés
-v, --version Affiche la version actuelle et quitte.
Il n'y a pas beaucoup de configurations requises pour graphw00f. Mais, si vous avez besoin d'en-têtes d'autorisation ou de cookies définis pour un endpoint particulier, utilisez le fichier conf.py.
# En-têtes personnalisés
HEADERS = {'User-Agent':'graphw00f'}
# Cookies personnalisés
COOKIES = {"PHPSESS":"DEADBEEF"}
L'utilisation de --user-agent ajoute la clé User-Agent indépendamment de sa présence dans le fichier conf.py ; si le fichier en contient déjà une, le paramètre de ligne de commande la remplace.
Voici un exemple d'empreinte (-f) d'un endpoint dont l'emplacement de GraphQL est connu à l'avance (/graphql)
python3 main.py -f -t https://demo.hypergraphql.org:8484/graphql
+-------------------+
| graphw00f |
+-------------------+
*** ***
** ***
** **
+--------------+ +--------------+
| Node X | | Node Y |
+--------------+ +--------------+
*** ***
** **
** **
+------------+
| Node Z |
+------------+
graphw00f - v1.0.7
L'outil d'empreinte pour GraphQL
Dolev Farhi <[email protected]>
[*] Vérification de la disponibilité de GraphQL à https://demo.hypergraphql.org:8484/graphql...
[*] GraphQL trouvé...
[*] Tentative d'empreinte...
[*] Moteur GraphQL découvert : (HyperGraphQL)
[!] Matrice de surface d'attaque : https://github.com/dolevf/graphw00f/blob/main/docs/hypergraphql.md
[!] Technologies : Java
[!] Page d'accueil : https://www.hypergraphql.org
[*] Terminé.
Voici un exemple de la façon dont graphw00f peut détecter (-d) où se trouve GraphQL puis exécuter le processus d'empreinte (-f).
python3 main.py -f -d -t http://localhost:5000
+-------------------+
| graphw00f |
+-------------------+
*** ***
** ***
** **
+--------------+ +--------------+
| Node X | | Node Y |
+--------------+ +--------------+
*** ***
** **
** **
+------------+
| Node Z |
+------------+
graphw00f - v1.1.2
L'outil d'empreinte pour GraphQL
Dolev Farhi <[email protected]>
[*] Vérification de http://dvga.example.local:5000/graphql
[!] GraphQL trouvé à http://dvga.example.local:5000/graphql
[*] Tentative d'empreinte...
[*] Moteur GraphQL découvert : (Graphene)
[!] Matrice de surface d'attaque : https://github.com/nicholasaleks/graphql-threat-matrix/blob/master/implementations/graphene.md
[!] Technologies : Python
[!] Page d'accueil : https://graphene-python.org
[*] Terminé.
Pour tout problème avec graphw00f tel que des faux positifs, des détections inexactes, des bugs, etc., veuillez créer un ticket GitHub avec les détails de l'environnement.
Vous voulez en savoir plus sur GraphQL ? Rendez-vous sur mon autre projet et pirater GraphQL : Damn Vulnerable GraphQL Application