
स्वचालित ग्राफ़क्यूएल स्कीमा गणना और डेटा निष्कर्षण उपकरण जो आत्मनिरीक्षण दस्तावेज़ों को पुनरावर्तित करता है, प्रश्नों का पुनर्निर्माण करता है, और पैठ परीक्षण और एपीआई सुरक्षा मूल्यांकन के लिए प्रतिक्रियाओं को सहेजता है।
Graphicator एक GraphQL "स्क्रैपर"/एक्सट्रैक्टर है। यह उपकरण लक्षित GraphQL एंडपॉइंट द्वारा लौटाए गए इंट्रोस्पेक्शन डॉक्यूमेंट पर पुनरावृत्ति करता है, और फिर स्कीमा को एक आंतरिक रूप में पुनर्गठित करता है ताकि वह समर्थित क्वेरीज़ को पुनः बना सके। जब ऐसी क्वेरीज़ बनाई जाती हैं, तो उनका उपयोग एंडपॉइंट को अनुरोध भेजने के लिए किया जाता है और लौटाई गई प्रतिक्रिया को एक फ़ाइल में सहेजता है।
त्रुटिपूर्ण प्रतिक्रियाएँ सहेजी नहीं जाती हैं। डिफ़ॉल्ट रूप से, उपकरण सही प्रतिक्रियाओं को कैश करता है और त्रुटियों को भी कैश करता है, इस प्रकार जब उपकरण को पुनः चलाया जाता है तो वह उसी क्वेरी में फिर से नहीं जाएगा।
इसका बुद्धिमानी से उपयोग करें और केवल उन लक्ष्यों के लिए उपयोग करें जिनके साथ बातचीत करने की आपकी अनुमति है।
हमें उम्मीद है कि यह उपकरण एक पेनिट्रेशन टेस्टर के रूप में आपके स्वयं के परीक्षणों को स्वचालित करेगा और उन लोगों को भी प्रोत्साहित करेगा जो अभी तक GraphQL परीक्षण नहीं कर रहे हैं।
GraphQL एंडपॉइंट्स पर मूल्यांकन करने का तरीका जानने के लिए: https://cybervelia.com/?p=736&preview=true
python3 -m pip install -r requirements.txt
docker run --rm -it -p8005:80 cybervelia/graphicator --target http://the-target:port/graphql --verbose
जब कार्य पूरा हो जाता है तो यह परिणामों को ज़िप करता है और ऐसी ज़िप पोर्ट 8005 पर सेवा प्रदान करने वाले वेबसर्वर के माध्यम से प्रदान की जाती है। कंटेनर को समाप्त करने के लिए CTRL+C दबाएँ। जब कंटेनर रोका जाता है तो डेटा भी हटा दिया जाता है। साथ ही आप अपनी आवश्यकता के अनुसार होस्ट पोर्ट बदल सकते हैं।
python3 graphicator.py [args...]
पहला कदम लक्ष्य को कॉन्फ़िगर करना है। ऐसा करने के लिए आपको या तो --target विकल्प या --file का उपयोग करके एक फ़ाइल प्रदान करनी होगी।
तर्कों के माध्यम से एकल लक्ष्य सेट करना
python3 graphicator.py --target https://subdomain.domain:port/graphql
एकाधिक लक्ष्य सेट करना
python3 graphicator.py --target https://subdomain.domain:port/graphql --target https://target2.tld/graphql
फ़ाइल के माध्यम से लक्ष्य सेट करना
python3 graphicator.py --file file.txt
फ़ाइल में प्रति पंक्ति एक URL होना चाहिए जैसे:
http://target1.tld/graphql
http://sub.target2.tld/graphql
http://subxyz.target3.tld:8080/graphql
आप उपकरण को किसी भी प्रॉक्सी से कनेक्ट कर सकते हैं।
डिफ़ॉल्ट burp सेटिंग्स (पोर्ट 8080) से कनेक्ट करें
python3 graphicator.py --target target --default-burp-proxy
अपने स्वयं के प्रॉक्सी से कनेक्ट करें
python3 graphicator.py --target target --use-proxy
Tor के माध्यम से कनेक्ट करें
python3 graphicator.py --target target --use-tor
python3 graphicator.py --target target --header "x-api-key:60b725f10c9c85c70d97880dfe8191b3"
python3 graphicator.py --target target --verbose
python3 graphicator.py --target target --multi
python3 graphicator.py --target target --insecure
python3 graphicator.py --target target --no-cache
python3 graphicator.py --target http://localhost:8000/graphql --verbose --multi
_____ __ _ __
/ ___/____ ___ _ ___ / / (_)____ ___ _ / /_ ___ ____
/ (_ // __// _ `// _ \ / _ \ / // __// _ `// __// _ \ / __/
\___//_/ \_,_// .__//_//_//_/ \__/ \_,_/ \__/ \___//_/
/_/
By @fand0mas
[-] Targets: 1
[-] Headers: 'Content-Type', 'User-Agent'
[-] Verbose
[-] Using cache: True
************************************************************
0%| | 0/1 [00:00<?, ?it/s][*] Enumerating... http://localhost:8000/graphql
[*] Retrieving... => query {getArticles { id,title,views } }
[*] Retrieving... => query {getUsers { id,username,email,password,level } }
100%|█████████████████████████████████████████████| 1/1 [00:00<00:00, 35.78it/s]
$ cat reqcache/9652f1e7c02639d8f78d1c5263093072fb4fd06c.json
{
"data": {
"getUsers": [
{
"id": 1,
"username": "theo",
"email": "[email protected]",
"password": "1234",
"level": 1
},
{
"id": 2,
"username": "john",
"email": "[email protected]",
"password": "5678",
"level": 1
}
]
}
}
$ cat reqcache-queries/9652f1e7c02639d8f78d1c5263093072fb4fd06c.query
query {getUsers { id,username,email,password,level } }
तीन फ़ोल्डर बनाए गए हैं:
फ़ाइलनाम हैश है जो क्वेरी और URL को ध्यान में रखता है।
कॉपीराइट 2023 Cybervelia Ltd
इसके द्वारा, किसी भी व्यक्ति को, जो इस सॉफ्टवेयर और संबंधित दस्तावेज़ीकरण फ़ाइलों ("सॉफ्टवेयर") की एक प्रति प्राप्त करता है, बिना किसी प्रतिबंध के सॉफ्टवेयर में व्यवहार करने की अनुमति दी जाती है, जिसमें बिना सीमा के, सॉफ्टवेयर की प्रतियों का उपयोग, प्रतिलिपि, संशोधन, विलय, प्रकाशन, वितरण, उप-लाइसेंसिंग और/या बेचने का अधिकार, और उन व्यक्तियों को ऐसा करने की अनुमति देना शामिल है जिन्हें सॉफ्टवेयर प्रदान किया गया है, निम्नलिखित शर्तों के अधीन:
उपरोक्त कॉपीराइट नोटिस और यह अनुमति नोटिस सॉफ्टवेयर की सभी प्रतियों या महत्वपूर्ण भागों में शामिल किए जाएंगे।
सॉफ्टवेयर "जैसा है" प्रदान किया जाता है, बिना किसी प्रकार की वारंटी, स्पष्ट या निहित, जिसमें बिना सीमा के व्यापारिकता, किसी विशिष्ट उद्देश्य के लिए उपयुक्तता और उल्लंघन की वारंटी शामिल है। किसी भी स्थिति में लेखक या कॉपीराइट धारक किसी भी दावे, क्षति या अन्य दायित्व के लिए उत्तरदायी नहीं होंगे, चाहे वह अनुबंध, अपकृत्य या किसी अन्य कार्यवाही में उत्पन्न हो, सॉफ्टवेयर से या सॉफ्टवेयर के उपयोग या अन्य लेन-देन से उत्पन्न, बाहर या संबंध में।
उपकरण (@fand0mas) द्वारा बनाया और अनुरक्षित किया गया है।
योगदान का भी स्वागत है।