
Herramienta de pruebas de penetración de GraphQL que explota límites de tasa débiles y análisis de costos para realizar fuerza bruta de credenciales, eludir 2FA, enumerar usuarios y realizar fuzzing de operaciones mediante consultas de alias por lotes.
CrackQL es una utilidad de fuzzing y fuerza bruta de contraseñas para GraphQL.
CrackQL es una herramienta versátil de pruebas de penetración para GraphQL que explota controles deficientes de limitación de velocidad y análisis de costos para realizar ataques de fuerza bruta a credenciales y fuzzing de operaciones.
CrackQL funciona agrupando automáticamente una única consulta o mutación GraphQL en varias operaciones con alias. Determina el número de alias a utilizar basándose en las variables de entrada CSV. Después de generar programáticamente el documento GraphQL agrupado, CrackQL envía el/los payload(s) a la API GraphQL objetivo y analiza los resultados y errores.
CrackQL se puede utilizar para una amplia gama de ataques GraphQL, ya que genera programáticamente payloads basados en una lista de entradas dinámicas.
A diferencia de Burp Intruder, que envía una solicitud por cada payload único, CrackQL evade las defensas tradicionales de monitoreo de límite de tasa HTTP de la API utilizando múltiples consultas con alias para introducir grandes conjuntos de credenciales en una sola solicitud HTTP. Para evadir las defensas de análisis de costos de consultas, CrackQL se puede optimizar utilizando una serie de operaciones agrupadas más pequeñas (-b) así como un retardo de tiempo (-D).
CrackQL es perfecto contra implementaciones GraphQL que aprovechan operaciones de autenticación GraphQL en banda (como el Módulo de Autenticación GraphQL). El siguiente ejemplo de pulverización de contraseñas funciona contra DVGA con el diccionario sample-inputs/users-and-passwords.csv.
mutation {
login(username: {{username|str}}, password: {{password|str}}) {
accessToken
}
}
Es posible usar CrackQL para evitar la autenticación de dos factores enviando todos los tokens OTP (contraseña de un solo uso).
sample-queries/otp-bypass.graphql
mutation {
twoFactor(otp: {{otp|int}}) {
accessToken
}
}
CrackQL también se puede utilizar para ataques de enumeración con el fin de descubrir identificadores de usuario, nombres de usuario y direcciones de correo electrónico válidos.
sample-queries/enumeration.graphql
query {
signup(email: {{email|str}}, password: {{password|str}}) {
user {
email
}
}
}
CrackQL podría utilizarse para iterar sobre un gran número de posibles identificadores únicos con el fin de filtrar información de objetos.
query {
profile(uuid: {{uuid|int}}) {
name
email
picture
}
}
CrackQL se puede utilizar para operaciones generales de fuzzing de entrada, como el envío de posibles payloads de SQLi y XSS.
CrackQL generará payloads basados en variables de entrada definidas por un archivo CSV. CrackQL requiere que el encabezado del CSV coincida con el nombre de la entrada.
sample-inputs/usernames_and_passwords.csv
username, password admin, admin admin, password admin, pass admin, pass123 admin, password123 operator, operator operator, password operator, pass operator, pass123 operator, password123
strintfloatgit clone [email protected]:nicholasaleks/CrackQL.git
pip install -r requirements.txt
python3 CrackQL.py -h
Usage: python3 CrackQL.py -t http://example.com/graphql -q sample-queries/login.graphql -i sample-inputs/usernames_and_passwords.csv
Options:
-h, --help show this help message and exit
-t URL, --target=URL URL de destino con la ruta al endpoint GraphQL
-q QUERY, --query=QUERY
Consulta o mutación de entrada con marcadores de
variable de payload
-i INPUT_CSV, --input-csv=INPUT_CSV
Ruta a una lista CSV de argumentos (por ejemplo,
nombres de usuario, correos electrónicos, IDs,
contraseñas, tokens OTP, etc.)
-d DELIMITER, --delimiter=DELIMITER
Delimitador de entrada CSV (por defecto: ",")
-o OUTPUT_DIRECTORY, --output-directory=OUTPUT_DIRECTORY
Directorio de salida para almacenar resultados (por
defecto: ./results/[domain]_[uuid]/
-b BATCH_SIZE, --batch-size=BATCH_SIZE
Número de operaciones por lote por solicitud de
documento GraphQL (por defecto: 100)
-D DELAY, --delay=DELAY
Retardo en segundos entre solicitudes por lote (por
defecto: 0)
--verbose Muestra mensajes detallados
-v, --version Muestra la versión actual y sale.
Utilice config.py para establecer cookies HTTP, cabeceras o proxies si el endpoint requiere autenticación.