
SQL इंजेक्शन शोषण उपकरण
#BBQSQL# एक ब्लाइंड SQL इंजेक्शन शोषण उपकरण
ब्लाइंड SQL इंजेक्शन का शोषण करना एक परेशानी हो सकती है। जब उपलब्ध उपकरण काम करते हैं, तो वे अच्छा काम करते हैं, लेकिन जब वे काम नहीं करते, तो आपको कुछ कस्टम लिखना पड़ता है। यह समय लेने वाला और थकाऊ है। BBQSQL उन समस्याओं को हल करने में आपकी मदद कर सकता है।
BBQSQL एक ब्लाइंड SQL इंजेक्शन फ्रेमवर्क है जो Python में लिखा गया है। यह तब अत्यंत उपयोगी होता है जब ट्रिकी SQL इंजेक्शन कमजोरियों पर हमला किया जाता है। BBQSQL एक अर्ध-स्वचालित उपकरण भी है, जो उन SQL इंजेक्शन खोजों के लिए काफी अनुकूलन की अनुमति देता है जिन्हें ट्रिगर करना कठिन होता है। यह उपकरण डेटाबेस-अज्ञेयवादी और अत्यंत बहुमुखी है। इसके अलावा, इसमें एक सहज UI है जो हमलों को सेट करना बहुत आसान बनाता है। Python gevent भी लागू किया गया है, जो BBQSQL को अत्यंत तेज़ बनाता है।
हमने उपकरण को इस प्रकार लिखने का प्रयास किया है कि UI में हमला सेट करते समय यह अत्यधिक स्वयं-व्याख्यात्मक हो। हालांकि, पूर्णता के लिए हमने एक विस्तृत Readme शामिल किया है जो आपको प्रत्येक कॉन्फ़िगरेशन विकल्प की बारीकियों पर अतिरिक्त जानकारी प्रदान करेगा। एक बात ध्यान देने योग्य है कि UI में प्रत्येक कॉन्फ़िगरेशन विकल्प के साथ एक विवरण जुड़ा हुआ है, इसलिए यदि आप इस पृष्ठ को पढ़े बिना उपकरण चालू करने का निर्णय लेते हैं, तो आप एक हमले के माध्यम से अपना रास्ता निकाल सकते हैं।
अन्य SQL इंजेक्शन उपकरणों की तरह, आप कुछ अनुरोध जानकारी प्रदान करते हैं।
निम्नलिखित सामान्य जानकारी प्रदान करनी होगी:
फिर निर्दिष्ट करें कि इंजेक्शन कहाँ जा रहा है और हम किस सिंटैक्स को इंजेक्ट कर रहे हैं। विवरण के लिए आगे पढ़ें।
यह सीधा होना चाहिए, लेकिन क्या वास्तव में है। निम्नलिखित चलाने का प्रयास करें:
sudo pip install bbqsql
यदि यह आपके लिए काम नहीं करता है, तो आप स्रोत से स्थापित कर सकते हैं। उपकरण को gevent, requests की आवश्यकता है।
मेनू में आप BBQSQL विकल्पों के लिए एक स्थान देखेंगे। यहाँ आप निम्नलिखित विकल्प निर्दिष्ट करते हैं:
इसका नीचे विस्तार से वर्णन किया गया है क्वेरी सिंटैक्स अवलोकन।
एक फ़ाइल का नाम जिसमें परिणाम आउटपुट किए जाएंगे। यदि आप फ़ाइल में आउटपुट नहीं चाहते हैं तो इसे खाली छोड़ दें।
BBQSQL ब्लाइंड SQL इंजेक्शन हमला करते समय दो तकनीकों का उपयोग करता है। पहली और डिफ़ॉल्ट तकनीक binary_search है। अधिक जानकारी के लिए Wikipedia देखें।
दूसरी तकनीक जिसका आप उपयोग कर सकते हैं वह frequency_search है। फ्रीक्वेंसी सर्चिंग अंग्रेजी भाषा के विश्लेषण पर आधारित है ताकि यह निर्धारित किया जा सके कि कोई अक्षर कितनी बार आएगा। यह खोज विधि गैर-एन्ट्रॉपिक डेटा के खिलाफ बहुत तेज़ है, लेकिन गैर-अंग्रेजी या अस्पष्ट डेटा के खिलाफ धीमी हो सकती है।
आप इस पैरामीटर के मान के रूप में binary_search या frequency_search निर्दिष्ट कर सकते हैं।
यह उस प्रकार के SQL इंजेक्शन को निर्दिष्ट करता है जिसे आपने खोजा है। यहाँ आप सेट कर सकते हैं कि सही/गलत निर्धारित करने के लिए bbqsql को HTTP प्रतिक्रिया की किस विशेषता को देखना चाहिए।
आप निर्दिष्ट कर सकते हैं: status_code, url, time, size, text, content, encoding, cookies, headers, या history
यदि आपने SQL इंजेक्शन की पहचान की है जिसके परिणामस्वरूप एक अलग सर्वर स्थिति कोड होता है, तो यहाँ 'status_code' सेट करें। यदि कुकी अलग है, तो 'cookie' सेट करें। यदि प्रतिक्रिया का आकार अलग है, तो 'size' सेट करें। आप समझ गए होंगे।
समवर्तीता Python में gevent लाइब्रेरी पर आधारित है। कार्यात्मक रूप से, यह थ्रेडिंग की तरह दिखता है लेकिन यह कैसे काम करता है इसकी बारीकियों को हमारे DefCon वार्ता में देखा जा सकता है [लिंक यहाँ डालें]। यह सेटिंग हमले को चलाने के लिए समवर्तीता की मात्रा को नियंत्रित करती है। यह अनुरोधों को थ्रॉटल करने और हमले के समय को तेज़ करने के लिए उपयोगी है। वास्तव में उच्च प्रदर्शन वाले वेब-सर्वर जैसे nginx के लिए, हम समवर्तीता को 75 पर सेट करने में सक्षम रहे हैं। डिफ़ॉल्ट रूप से इसे '30' पर सेट किया गया है।
यदि आप किसी SQL इंजेक्शन कमजोरी पर ठोकर खाते हैं जिसमें कुछ अजीब quirks हैं (जैसे कि कुछ वर्ण शामिल नहीं किए जा सकते या ASCII/CHAR जैसे फ़ंक्शन काम नहीं करते), तो आपने शायद अपने आप को एक स्क्रिप्ट लिखते हुए पाया होगा जिसमें आपका कस्टम इंजेक्शन सिंटैक्स है। BBQSQL स्क्रिप्टिंग भाग को हटा देता है और आपको अपने कस्टम क्वेरी सिंटैक्स को चिपकाने और आसानी से शोषण करने का एक तरीका प्रदान करता है।
क्वेरी इनपुट वह जगह है जहाँ आप डेटाबेस से जानकारी निकालने के लिए उपयोग की जाने वाली अपनी क्वेरी का निर्माण करेंगे। यह मान लिया गया है कि आपने पहले से ही एक कमजोर पैरामीटर पर SQL इंजेक्शन की पहचान की है, और एक क्वेरी का परीक्षण किया है जो सफल है।
नीचे एक उदाहरण क्वेरी है जिसका उपयोग आप अपनी क्वेरी बनाने के लिए कर सकते हैं।
इस उदाहरण में, हमलावर डेटाबेस संस्करण का चयन करना चाहता है:
vulnerable_parameter'; if(ASCII(SUBSTRING((SELECT @@version LIMIT 1 OFFSET ${row_index}) , ${char_index} ,1))) ${comparator:>}ASCII(${char_val}) WAITFOR DELAY '0\:0\:0${sleep}'; --
क्वेरी सिंटैक्स प्लेसहोल्डर पर आधारित है जो BBQSQL को बताते हैं कि हमले को कैसे निष्पादित किया जाए।
हमले के लिए काम करने के लिए आपको निम्नलिखित प्लेसहोल्डर जानकारी प्रदान करनी होगी। एक बार जब आप इन्हें अपनी क्वेरी में डाल देते हैं, तो bbqSQL बाकी काम करेगा:
${row_index}: यह bbqSQL को बताता है कि यहाँ पंक्तियों को iterrate करना है। चूंकि हम LIMIT का उपयोग कर रहे हैं, हम ${row_index} मान के आधार पर n संख्या में पंक्तियाँ देख सकते हैं।
${char_index}: यह bbqSQL को बताता है कि उप-चयन से कौन सा वर्ण क्वेरी करना है।
${char_val}: यह bbqSQL को बताता है कि परिणाम को मान्य करने के लिए उप-चयन से परिणामों की तुलना कहाँ करनी है।
${comparator}: यह है कि आप BBQSQL को कैसे बताते हैं कि प्रतिक्रियाओं की तुलना करके यह निर्धारित करें कि परिणाम सत्य है या नहीं। डिफ़ॉल्ट रूप से, > प्रतीक का उपयोग किया जाता है।
${sleep}: यह वैकल्पिक है लेकिन bbqSQL को बताता है कि समय-आधारित SQL इंजेक्शन करते समय सोने के लिए सेकंड की संख्या कहाँ डालनी है।
इन सभी प्लेसहोल्डर की आवश्यकता नहीं है। उदाहरण के लिए, यदि आपने अर्ध-ब्लाइंड बूलियन-आधारित SQL इंजेक्शन की खोज की है, तो आप ${sleep} पैरामीटर को छोड़ सकते हैं।
BBQSQL में कई HTTP पैरामीटर हैं जिन्हें आप अपना हमला सेट करते समय कॉन्फ़िगर कर सकते हैं। कम से कम आपको URL प्रदान करना होगा, जहाँ आप इंजेक्शन क्वेरी चलाना चाहते हैं, और विधि। निम्नलिखित विकल्प सेट किए जा सकते हैं:
आप टेम्पलेट ${injection} का उपयोग करके निर्दिष्ट करते हैं कि इंजेक्शन क्वेरी कहाँ डाली जानी चाहिए। इंजेक्शन टेम्पलेट के बिना उपकरण को पता नहीं चलेगा कि क्वेरी कहाँ डालनी है।
अनुरोध के साथ भेजी जाने वाली फ़ाइलें प्रदान करें। मान को पथ पर सेट करें और BBQSQL फ़ाइल को खोलने/शामिल करने का ध्यान रखेगा।
अनुरोधों के साथ भेजे जाने वाले HTTP हेडर। यह एक स्ट्रिंग या शब्दकोश हो सकता है। उदाहरण के लिए:
{"User-Agent":"bbqsql"}
या
"User-Agent: bbqsql"
अनुरोध के साथ भेजी जाने वाली कुकीज़ का एक शब्दकोश या स्ट्रिंग। उदाहरण के लिए:
{"PHPSESSIONID":"123123"}
या
PHPSESSIONID=123123;JSESSIONID=foobar
एक URL निर्दिष्ट करें जिसमें अनुरोध भेजे जाने चाहिए।
यह एक बूलियन है जो निर्धारित करता है कि अनुरोध करते समय HTTP रीडायरेक्ट का पालन किया जाएगा या नहीं।
अनुरोध के लिए उपयोग किए जाने वाले HTTP प्रॉक्सी को एक शब्दकोश के रूप में निर्दिष्ट करें। उदाहरण के लिए:
{"http": "10.10.1.10:3128","https": "10.10.1.10:1080"}