
Инструмент для определения версии движка GraphQL-сервера, который отправляет безвредные и некорректные запросы для идентификации серверной технологии и оценки средств безопасности с помощью GraphQL Threat Matrix.
graphw00f (вдохновлён wafw00f) — это инструмент для определения GraphQL по конечным точкам GQL. Он отправляет смесь безобидных и искажённых запросов, чтобы определить, какой GraphQL-движок работает за кулисами. graphw00f использует проект Матрица угроз GraphQL, чтобы предоставить информацию о том, какие средства безопасности каждая технология предоставляет «из коробки» и включены ли они по умолчанию.
Специально подготовленные запросы заставляют разные реализации GraphQL-серверов по-разному реагировать на запросы, мутации и подписки, что позволяет легко определить бэкенд-движок и различить различные реализации GraphQL. (CWE: CWE-200)
graphw00f поддерживает обнаружение и определение GraphQL-серверов, использующих запросы как на основе GET, так и POST.
В настоящее время graphw00f пытается обнаружить следующие GraphQL-движки:
Проект graphw00f использует Проект матрицы угроз GraphQL в качестве базы данных матрицы безопасности технологий. Когда graphw00f успешно определяет конечную точку GraphQL, он выводит документ матрицы угроз. Этот документ помогает инженерам по безопасности определить, насколько зрелая технология, какие функции безопасности она предлагает и содержит ли она какие-либо CVE.

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.
Для graphw00f не требуется много настроек. Но если вам нужны такие вещи, как заголовки авторизации или куки для конкретной конечной точки, используйте файл conf.py.
# Custom Headers
HEADERS = {'User-Agent':'graphw00f'}
# Custom Cookies
COOKIES = {"PHPSESS":"DEADBEEF"}
Использование --user-agent добавляет ключ User-Agent независимо от того, есть ли он в файле conf.py; если в файле уже есть заголовок, параметр командной строки переопределяет его.
Это пример определения (-f) конечной точки, где расположение GraphQL известно заранее (/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.
Это пример того, как graphw00f может обнаружить (-d), где находится GraphQL, а затем выполнить процесс определения (-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.
Если возникают какие-либо проблемы с graphw00f, такие как ложные срабатывания, неточные определения, ошибки и т.д., пожалуйста, создайте issue на GitHub с подробным описанием окружения.
Хотите узнать больше о GraphQL? Переходите к моему другому проекту и взламывайте GraphQL: Damn Vulnerable GraphQL Application