Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CrackQL — GraphQL penetration testing tool that exploits weak rate limits and cost analysis to brute-force credentials, bypass 2FA, enumerate users, and fuzz operations via batched alias queries. | Kitploit
Tools/GitHubGitHub/nicholasaleks/crackql
Password AttacksWeb Application ExploitationAPI Security TestingFuzzingPenetration Testing
GitHubnicholasaleks/crackql

CrackQL

GraphQL penetration testing tool that exploits weak rate limits and cost analysis to brute-force credentials, bypass 2FA, enumerate users, and fuzz operations via batched alias queries.

View Repository
349343 years agoReviewed by Kitploit

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CrackQL

CrackQL is a GraphQL password brute-force and fuzzing utility.

CrackQL

CrackQL is a versatile GraphQL penetration testing tool that exploits poor rate-limit and cost analysis controls to brute-force credentials and fuzz operations.

Table of Contents

  • How it works
  • Attack Use Cases
    • Defense Evasion
    • Password Spraying Brute-forcing
    • Two-factor Authentication OTP Bypass
    • User Account Enumeration
    • Insecure Direct Object Reference
    • General Fuzzing
  • Inputs
  • Installation
  • Configurations
  • Maintainers
  • Mentions

How it works?

CrackQL works by automatically batching a single GraphQL query or mutation into several alias operations. It determines the number of aliases to use based on the CSV input variables. After programmatically generating the batched GraphQL document, CrackQL then batches and sends the payload(s) to the target GraphQL API and parses the results and errors.

Attack Use Cases

CrackQL can be used for a wide range of GraphQL attacks since it programmatically generates payloads based on a list of dynamic inputs.

Defense Evasion

Unlike Burp Intruder which sends a request for each unique payload, CrackQL evades traditional API HTTP rate-limit monitoring defenses by using multiple alias queries to stuff large sets of credentials into single HTTP requests. To bypass query cost analysis defenses, CrackQL can be optimized into using a series of smaller batched operations (-b) as well as a time delay (-D).

Password Spraying Brute-forcing

CrackQL is perfect against GraphQL deployments that leverage in-band GraphQL authentication operations (such as the GraphQL Authentication Module). The below password spraying example works against DVGA with the sample-inputs/users-and-passwords.csv dictionary.

sample-queries/login.graphql

root@kitploit:~
mutation {
  login(username: {{username|str}}, password: {{password|str}}) {
    accessToken
  }
}

Two-factor Authentication OTP Bypass

It is possible to use CrackQL to bypass two-factor authentication by sending all OTP (One Time Password) tokens

sample-queries/otp-bypass.graphql

root@kitploit:~
mutation {
  twoFactor(otp: {{otp|int}}) {
    accessToken
  }
}

User Account Enumeration

CrackQL can also be used for enumeration attacks to discover valid user ids, usernames and email addresses

sample-queries/enumeration.graphql

root@kitploit:~
query {
  signup(email: {{email|str}}, password: {{password|str}}) {
    user {
      email
    }
  }
}

Insecure Direct Object Reference

CrackQL could be used to iterate over a large number of potential unique identifiers in order to leak object information

sample-queries/idor.graphql

root@kitploit:~
query {
  profile(uuid: {{uuid|int}}) {
    name
    email
    picture
  }
}

General Fuzzing

CrackQL can be used for general input fuzzing operations, such as sending potential SQLi and XSS payloads.

Inputs

CrackQL will generate payloads based on input variables defined by a CSV file. CrackQL requires the CSV header to match the input name.

sample-inputs/usernames_and_passwords.csv

root@kitploit:~
username, password
admin, admin
admin, password
admin, pass
admin, pass123
admin, password123
operator, operator
operator, password
operator, pass
operator, pass123
operator, password123

Valid input types

  • str
  • int
  • float

Installation

Requirements

  • Python3
  • Requests
  • GraphQL
  • Jinja

Clone Repository

root@kitploit:~
git clone [email protected]:nicholasaleks/CrackQL.git

Get Dependencies

pip install -r requirements.txt

Run CrackQL

python3 CrackQL.py -h

root@kitploit:~
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.

Configuration

Use config.py to set HTTP cookies, headers or proxies if the endpoint requires authentication.

Maintainers

  • Nick Aleks
  • Dolev Farhi

Mentions

  • Kitploit
Download Tool