डेटा सूचना प्रणालियों के सबसे महत्वपूर्ण घटकों में से एक है। डेटाबेस संचालित वेब एप्लिकेशन का उपयोग संगठन द्वारा ग्राहकों से डेटा प्राप्त करने के लिए किया जाता है। एसक्यूएल स्ट्रक्चर्ड क्वेरी लैंग्वेज के लिए संक्षिप्त रूप है। इसका उपयोग डेटाबेस में डेटा को पुनः प्राप्त करने और हेरफेर करने के लिए किया जाता है।
SQL इंजेक्शन क्या है?
SQL इंजेक्शन एक ऐसा हमला है जो डायनेमिक SQL स्टेटमेंट को स्टेटमेंट के कुछ हिस्सों पर टिप्पणी करने या ऐसी स्थिति को जोड़ने के लिए कहता है जो हमेशा सच होगी। दुर्भावनापूर्ण SQL कोड को निष्पादित करने के लिए SQL कथनों का दोहन करने के लिए खराब डिज़ाइन किए गए वेब अनुप्रयोगों में डिज़ाइन दोषों का लाभ उठाता है।
इस ट्यूटोरियल में, आप SQL इंजेक्शन तकनीक सीखेंगे और इस तरह के हमलों से वेब एप्लिकेशन की सुरक्षा कर सकते हैं।
- SQL इंजेक्शन कैसे काम करता है
- हैकिंग गतिविधि: एसक्यूएल इंजेक्षन एक वेब अनुप्रयोग
- अन्य SQL इंजेक्शन हमले के प्रकार
- SQL इंजेक्शन के लिए स्वचालन उपकरण
- SQL इंजेक्शन हमलों के खिलाफ कैसे रोकें
- हैकिंग गतिविधि: SQL इंजेक्शन के लिए हवजी का उपयोग करें
SQL इंजेक्शन कैसे काम करता है
SQL इंजेक्शन का उपयोग करके किए जाने वाले हमलों के प्रकार डेटाबेस इंजन के प्रकार के आधार पर भिन्न हो सकते हैं। हमला डायनेमिक SQL स्टेटमेंट पर काम करता है । एक डायनेमिक स्टेटमेंट एक स्टेटमेंट है जो वेब फॉर्म या यूआरआई क्वेरी स्ट्रिंग से पैरामीटर पासवर्ड का उपयोग करके रन टाइम पर उत्पन्न होता है।
आइए एक लॉगिन फॉर्म के साथ एक साधारण वेब एप्लिकेशन पर विचार करें। HTML फॉर्म के लिए कोड नीचे दिखाया गया है।
यहां,
- उपरोक्त फ़ॉर्म ईमेल पते और पासवर्ड को स्वीकार करता है, फिर उन्हें एक PHP फ़ाइल में सूचीबद्ध करता है, जिसे index.php नाम दिया गया है।
- इसमें एक कुकी में लॉगिन सत्र को संग्रहीत करने का एक विकल्प है। हमने इसे याद_मे चेकबॉक्स से घटा दिया है। यह डेटा जमा करने के लिए पोस्ट विधि का उपयोग करता है। इसका अर्थ है कि मान URL में प्रदर्शित नहीं होते हैं।
मान लें कि यूजर आईडी की जांच के लिए बैकएंड पर स्टेटमेंट निम्नानुसार है
चयन करें * उपयोगकर्ताओं से जहां ईमेल = $ _POST ['ईमेल'] और पासवर्ड = md5 ($ _ POST ['पासवर्ड']);
यहां,
- उपरोक्त कथन $ _POST के मूल्यों का उपयोग करता है [] सरणी सीधे उन्हें sanitizing बिना।
- एमडी 5 एल्गोरिथ्म का उपयोग करके पासवर्ड एन्क्रिप्ट किया गया है।
हम sqlfiddle का उपयोग करके SQL इंजेक्शन हमले का वर्णन करेंगे। अपने वेब ब्राउज़र में URL http://sqlfiddle.com/ खोलें। आपको निम्न विंडो मिलेगी।
नोट: आपको SQL स्टेटमेंट लिखना होगा
चरण 1) इस कोड को बाएँ फलक में दर्ज करें
CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT,`email` VARCHAR(45) NULL,`password` VARCHAR(45) NULL,PRIMARY KEY (`id`));insert into users (email,password) values ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));
चरण 2) बिल्ड स्कीमा पर क्लिक करें
स्टेप 3) इस कोड को राइट पेन में एंटर करें
उपयोगकर्ताओं से * का चयन करें;
चरण 4) रन एसक्यूएल पर क्लिक करें। आप निम्न परिणाम देखेंगे
मान लीजिए कि उपयोगकर्ता आपूर्ति करता है यह ईमेल पता spambots से संरक्षित किया जा रहा है। इसे देखने के लिए आपको जावास्क्रिप्ट सक्षम करना होगा। और पासवर्ड के रूप में 1234 । डेटाबेस के खिलाफ निष्पादित किया जाने वाला बयान होगा
चयन करें * उपयोगकर्ताओं से जहां ईमेल = ' इस ईमेल पते spambots से संरक्षित किया जा रहा है। इसे देखने के लिए आपको जावास्क्रिप्ट सक्षम करना होगा।' और पासवर्ड = md5 ('1234');
उपरोक्त कोड का उपयोग पासवर्ड भाग को टिप्पणी करके किया जा सकता है और ऐसी स्थिति को जोड़ा जा सकता है जो हमेशा सच होगी। मान लीजिए कि एक हमलावर ईमेल पता क्षेत्र में निम्नलिखित इनपुट प्रदान करता है।
इस ईमेल पते की सुरक्षा स्पैममबोट से की जा रही है। इसे देखने के लिए आपको जावास्क्रिप्ट सक्षम करना होगा।' या 1 = 1 सीमा 1 - ']
पासवर्ड के लिए xxx
उत्पन्न गतिशील कथन इस प्रकार होगा।
चयन करें * उपयोगकर्ताओं से जहां ईमेल = ' इस ईमेल पते spambots से संरक्षित किया जा रहा है। इसे देखने के लिए आपको जावास्क्रिप्ट सक्षम करना होगा।' या 1 = 1 सीमा 1 - '] और पासवर्ड = md5 (' 1234 ');
यहां,
- इस ईमेल पते की सुरक्षा स्पैममबोट से की जा रही है। इसे देखने के लिए आपको जावास्क्रिप्ट सक्षम करना होगा। एक एकल उद्धरण के साथ समाप्त होता है जो स्ट्रिंग उद्धरण को पूरा करता है
- या 1 = 1 लिमिट 1 एक ऐसी स्थिति है जो हमेशा सच होगी और लौटे परिणामों को केवल एक रिकॉर्ड तक सीमित करती है।
- - 'AND ... एक SQL कमेंट है जो पासवर्ड वाले हिस्से को खत्म करता है।
उपरोक्त SQL स्टेटमेंट को कॉपी करें और नीचे दिखाए गए अनुसार SQL FiddleRun SQL टेक्स्ट बॉक्स में पेस्ट करें
हैकिंग गतिविधि: एसक्यूएल इंजेक्षन एक वेब अनुप्रयोग
हमारे पास http://www.techpanda.org/ पर एक साधारण वेब एप्लिकेशन है जो केवल प्रदर्शन प्रयोजनों के लिए SQL इंजेक्शन के हमलों के लिए असुरक्षित है। ऊपर HTML फॉर्म का कोड लॉगिन पेज से लिया गया है। आवेदन बुनियादी सुरक्षा प्रदान करता है जैसे कि ईमेल क्षेत्र को साफ करना। इसका मतलब है कि लॉगिन को बायपास करने के लिए हमारे उपरोक्त कोड का उपयोग नहीं किया जा सकता है।
उस दौर को पाने के लिए, हम पासवर्ड फ़ील्ड का फायदा उठा सकते हैं। नीचे दिए गए आरेख में उन चरणों को दिखाया गया है जिनका आपको पालन करना चाहिए
मान लीजिए कि एक हमलावर निम्नलिखित इनपुट प्रदान करता है
- चरण 1: दर्ज करें यह ईमेल पता spambots से संरक्षित किया जा रहा है। इसे देखने के लिए आपको जावास्क्रिप्ट सक्षम करना होगा। ईमेल पते के रूप में
- चरण 2: xxx दर्ज करें) या 1 = 1 -]
- सबमिट बटन पर क्लिक करें
- आपको डैशबोर्ड पर निर्देशित किया जाएगा
उत्पन्न SQL स्टेटमेंट निम्नानुसार होगा
चयन करें * उपयोगकर्ताओं से जहां ईमेल = ' इस ईमेल पते spambots से संरक्षित किया जा रहा है। इसे देखने के लिए आपको जावास्क्रिप्ट सक्षम करना होगा।' और पासवर्ड = md5 ('xxx') या 1 = 1 -] ');
नीचे दिए गए आरेख में स्टेटमेंट दिखाया गया है।
यहां,
- बयान समझदारी से md5 एन्क्रिप्शन का उपयोग किया जाता है
- एकल उद्धरण और समापन ब्रैकेट को पूरा करता है
- हमेशा सही होगा कथन को एक शर्त लागू करता है
सामान्य तौर पर, एक सफल एसक्यूएल इंजेक्शन हमला कई अलग-अलग तकनीकों का प्रयास करता है जैसे कि एक सफल हमले को करने के लिए ऊपर दिखाए गए।
अन्य SQL इंजेक्शन हमले के प्रकार
एसक्यूएल इंजेक्शन केवल लॉगिन एल्गोरिदम को पारित करने की तुलना में अधिक नुकसान पहुंचा सकता है। कुछ हमलों में शामिल हैं
- डेटा हटाना
- डेटा अपडेट कर रहा है
- डेटा सम्मिलित करना
- सर्वर पर कार्यकारी आदेश जो ट्रोजन जैसे दुर्भावनापूर्ण प्रोग्राम को डाउनलोड और इंस्टॉल कर सकते हैं
- हमलावर के रिमोट सर्वर पर क्रेडिट कार्ड विवरण, ईमेल और पासवर्ड जैसे मूल्यवान डेटा का निर्यात करना
- उपयोगकर्ता लॉगिन विवरण आदि प्राप्त करना
उपरोक्त सूची संपूर्ण नहीं है; यह आपको केवल एसक्यूएल इंजेक्शन का एक विचार देता है
SQL इंजेक्शन के लिए स्वचालन उपकरण
उपरोक्त उदाहरण में, हमने SQL के अपने विशाल ज्ञान के आधार पर मैनुअल अटैक तकनीकों का उपयोग किया। स्वचालित उपकरण हैं जो हमलों को अधिक कुशलता से और कम से कम समय के भीतर करने में आपकी सहायता कर सकते हैं। इन उपकरणों में शामिल हैं
- SQLSmack - https://securiteam.com/tools/5GP081P75C
- SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
- SQLMap - http://sqlmap.org/
SQL इंजेक्शन हमलों के खिलाफ कैसे रोकें
एक संगठन SQL इंजेक्शन के हमलों से खुद को बचाने के लिए निम्न नीति अपना सकता है।
- उपयोगकर्ता इनपुट पर कभी भी भरोसा नहीं किया जाना चाहिए - डायनेमिक SQL स्टेटमेंट में उपयोग करने से पहले इसे हमेशा sanitized होना चाहिए।
- संग्रहीत कार्यविधियाँ - ये SQL कथनों को अलग कर सकती हैं और सभी इनपुट को मापदंडों के रूप में मान सकती हैं।
- तैयार किए गए बयान - पहले एसक्यूएल स्टेटमेंट बनाकर काम करने के लिए तैयार किए गए बयान फिर सभी सबमिट किए गए उपयोगकर्ता डेटा को मापदंडों के रूप में मानते हैं। SQL कथन के सिंटैक्स पर इसका कोई प्रभाव नहीं पड़ता है।
- नियमित अभिव्यक्ति - इनका उपयोग संभावित हानिकारक कोड का पता लगाने और SQL कथनों को निष्पादित करने से पहले इसे हटाने के लिए किया जा सकता है।
- डेटाबेस कनेक्शन उपयोगकर्ता एक्सेस अधिकार - डेटाबेस से कनेक्ट करने के लिए उपयोग किए जाने वाले खातों को केवल आवश्यक एक्सेस अधिकार दिए जाने चाहिए। यह कम कर सकता है कि SQL स्टेटमेंट सर्वर पर क्या कर सकता है।
- त्रुटि संदेश - इनमें संवेदनशील जानकारी नहीं होनी चाहिए और वास्तव में त्रुटि कहां हुई है। सरल कस्टम त्रुटि संदेश जैसे "क्षमा करें, हम तकनीकी त्रुटियों का सामना कर रहे हैं। तकनीकी टीम से संपर्क किया गया है। कृपया बाद में पुनः प्रयास करें ”त्रुटि के कारण SQL कथन प्रदर्शित करने के बजाय उपयोग किया जा सकता है।
हैकिंग गतिविधि: SQL इंजेक्शन के लिए हविज का उपयोग करें
इस व्यावहारिक परिदृश्य में, हम कमजोरियों के लिए एक वेबसाइट को स्कैन करने के लिए हविज एडवांस्ड एसक्यूएल इंजेक्शन प्रोग्राम का उपयोग करने जा रहे हैं।
नोट: आपका एंटी-वायरस प्रोग्राम इसकी प्रकृति के कारण इसे ध्वजांकित कर सकता है। आपको इसे बहिष्करण सूची में जोड़ना चाहिए या अपने एंटी-वायरस सॉफ़्टवेयर को रोकना चाहिए।
नीचे दी गई छवि हविज के लिए मुख्य विंडो दिखाती है
उपरोक्त टूल का उपयोग किसी वेब साइट / एप्लिकेशन की भेद्यता का आकलन करने के लिए किया जा सकता है।
सारांश
- SQL इंजेक्शन एक हमला प्रकार है जो खराब SQL बयानों का शोषण करता है
- SQL इंजेक्शन का उपयोग लॉगिन एल्गोरिदम को बायपास करने, पुनः प्राप्त करने, सम्मिलित करने और अद्यतन करने और डेटा को हटाने के लिए किया जा सकता है।
- SQL इंजेक्शन टूल में SQLMap, SQLPing और SQLSmack आदि शामिल हैं।
- SQL कथन लिखते समय एक अच्छी सुरक्षा नीति SQL इंजेक्शन के हमलों को कम करने में मदद कर सकती है।