SQL इंजेक्शन ट्यूटोरियल: उदाहरण के साथ सीखें
⚡ स्मार्ट सारांश
SQL इंजेक्शन एक ऐसा हमला है जो प्रमाणीकरण को दरकिनार करने या डेटा को उजागर करने के लिए गतिशील SQL कथनों को दूषित करता है, और उन वेब अनुप्रयोगों का फायदा उठाता है जो अनधिकृत उपयोगकर्ता इनपुट से क्वेरी बनाते हैं। यह पृष्ठ बताता है कि यह हमला कैसे काम करता है और इससे कैसे बचा जा सकता है।

SQL इंजेक्शन क्या है?
SQL इंजेक्शन एक ऐसा हमला है जो डायनामिक SQL स्टेटमेंट्स को दूषित कर देता है, जिससे स्टेटमेंट के कुछ हिस्से कमेंट आउट हो जाते हैं या एक ऐसी शर्त जुड़ जाती है जो हमेशा सत्य रहती है। यह खराब डिज़ाइन वाले वेब एप्लीकेशन्स में मौजूद खामियों का फायदा उठाकर दुर्भावनापूर्ण SQL कोड को निष्पादित करने के लिए SQL स्टेटमेंट्स का दुरुपयोग करता है।
डेटा सूचना प्रणालियों के सबसे महत्वपूर्ण घटकों में से एक है। डेटाबेस-आधारित वेब एप्लिकेशन का उपयोग संगठन ग्राहकों से डेटा प्राप्त करने के लिए करते हैं। SQL का संक्षिप्त रूप है। संरचित प्रश्न भाषाइसका उपयोग डेटाबेस में मौजूद डेटा को पुनः प्राप्त करने और उसमें हेरफेर करने के लिए किया जाता है।
SQL इंजेक्शन हमला कैसे काम करता है?
SQL इंजेक्शन का उपयोग करके किए जा सकने वाले हमलों के प्रकार डेटाबेस इंजन के प्रकार के आधार पर भिन्न होते हैं। यह हमला डायनामिक SQL स्टेटमेंट पर काम करता है। डायनामिक स्टेटमेंट वह स्टेटमेंट होता है जो वेब फॉर्म या URI क्वेरी स्ट्रिंग से प्राप्त पैरामीटर का उपयोग करके रनटाइम पर जनरेट होता है।
SQL इंजेक्शन उदाहरण
आइए एक लॉगिन फॉर्म वाले एक साधारण वेब एप्लिकेशन पर विचार करें। एचटीएमएल फॉर्म का कोड नीचे दिखाया गया है।
<form action=‘index.php’ method="post"> <input type="email" name="email" required="required"/> <input type="password" name="password"/> <input type="checkbox" name="remember_me" value="Remember me"/> <input type="submit" value="Submit"/> </form>
यहाँ,
- उपरोक्त फॉर्म ईमेल पता और पासवर्ड स्वीकार करता है, फिर उन्हें आगे भेज देता है। PHP index.php नाम की फ़ाइल.
- इसमें लॉगिन सेशन को कुकी में स्टोर करने का विकल्प है। हमने यह जानकारी remember_me चेकबॉक्स से प्राप्त की है। यह डेटा सबमिट करने के लिए पोस्ट विधि का उपयोग करता है। इसका मतलब है कि मान प्रदर्शित नहीं होते हैं। URL.
मान लीजिए कि यूजर आईडी की जांच के लिए बैकएंड में दिया गया स्टेटमेंट इस प्रकार है।
SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);
यहाँ,
- उपरोक्त कथन $_POST[] सरणी के मानों का सीधे उपयोग करता है, उन्हें सैनिटाइज किए बिना।
- पासवर्ड को MD5 एल्गोरिदम का उपयोग करके हैश किया जाता है।
हम SQL इंजेक्शन हमले का उदाहरण देंगे। SQL Fiddle। को खोलो 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 ('m@m.com',md5('abc'));
चरण 2) बिल्ड स्कीमा पर क्लिक करें।
चरण 3) इस कोड को दाईं ओर के फलक में दर्ज करें।
select * from users;
चरण 4) रन एसक्यूएल पर क्लिक करें। आपको निम्नलिखित परिणाम दिखाई देगा।
मान लीजिए कि कोई उपयोगकर्ता admin@admin.sys और पासवर्ड के रूप में 1234 देता है। डेटाबेस के विरुद्ध निष्पादित होने वाला कथन इस प्रकार होगा:
SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');
उपरोक्त कोड में पासवर्ड वाले भाग को कमेंट करके और एक ऐसी शर्त जोड़कर, जो हमेशा सत्य हो, इसका दुरुपयोग किया जा सकता है। मान लीजिए कि हमलावर ईमेल पते वाले फ़ील्ड में निम्नलिखित इनपुट देता है।
xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]
पासवर्ड के लिए xxx.
उत्पन्न गतिशील कथन इस प्रकार होगा।
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');
यहाँ,
- xxx@xxx.xxx अंत में एक सिंगल कोटेशन मार्क होता है जो "कोट" स्ट्रिंग को पूरा करता है।
OR 1 = 1LIMIT 1 एक शर्त है जो हमेशा सत्य होगी और लौटाए गए परिणामों को केवल एक रिकॉर्ड तक सीमित करेगी।- — ' AND … एक SQL टिप्पणी है जो पासवर्ड भाग को समाप्त कर देती है।
ऊपर दिए गए SQL स्टेटमेंट को कॉपी करें और इसे पेस्ट करें। SQL Fiddle नीचे दिखाए गए अनुसार SQL टेक्स्ट बॉक्स चलाएँ।
हैकिंग गतिविधि: SQL वेब एप्लिकेशन को इंजेक्ट करें
हमारे पास एक सरल वेब एप्लीकेशन है http://www.techpanda.org/ यह कोड केवल प्रदर्शन के उद्देश्य से SQL इंजेक्शन हमलों के प्रति संवेदनशील है। ऊपर दिया गया HTML फॉर्म कोड लॉगिन पेज से लिया गया है। एप्लिकेशन ईमेल फ़ील्ड को सैनिटाइज़ करने जैसी बुनियादी सुरक्षा सुविधाएँ प्रदान करता है। इसका मतलब है कि हमारे उपरोक्त कोड का उपयोग लॉगिन को बायपास करने के लिए नहीं किया जा सकता है।
इससे बचने के लिए, हम पासवर्ड फ़ील्ड का उपयोग करते हैं। नीचे दिया गया आरेख इसके लिए आवश्यक चरणों को दर्शाता है।
मान लीजिए कि हमलावर निम्नलिखित इनपुट प्रदान करता है।
- चरण 1: ईमेल पते के रूप में xxx@xxx.xxx दर्ज करें
- चरण 2: xxx' दर्ज करें) या 1 = 1 — ]
- सबमिट बटन पर क्लिक करें।
- आपको डैशबोर्ड पर ले जाया जाएगा।
उत्पन्न होने वाला SQL कथन इस प्रकार होगा।
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');
नीचे दिया गया आरेख दर्शाता है कि यह कथन कैसे उत्पन्न होता है।
यहाँ,
- यह कथन बुद्धिमानी से यह मानकर चलता है कि एमडी5 एन्क्रिप्शन का उपयोग किया जा रहा है।
- सिंगल कोट और क्लोजिंग ब्रैकेट को पूरा करता है।
- यह कथन में एक ऐसी शर्त जोड़ता है जो हमेशा सत्य होगी।
सामान्य तौर पर, एक सफल हमले में ऊपर दिखाए गए कई तरीकों का संयोजन होता है।
अन्य SQL इंजेक्शन हमले के प्रकार
SQL इंजेक्शन लॉगिन एल्गोरिदम को बायपास करने से कहीं अधिक नुकसान पहुंचा सकते हैं। कुछ हमलों में शामिल हैं:
- डेटा हटाना
- डेटा अपडेट किया जा रहा है
- डेटा सम्मिलित करना
- सर्वर पर ऐसे आदेशों का निष्पादन करना जो ट्रोजन जैसे दुर्भावनापूर्ण प्रोग्रामों को डाउनलोड और इंस्टॉल कर सकते हैं
- क्रेडिट कार्ड विवरण, ईमेल और पासवर्ड जैसे मूल्यवान डेटा को हमलावर के दूरस्थ सर्वर पर निर्यात करना
- उपयोगकर्ता लॉगिन विवरण प्राप्त करना, इत्यादि।
- कुकीज़ पर आधारित SQL इंजेक्शन
- त्रुटि आधारित SQL इंजेक्शन
- ब्लाइंड एसक्यूएल इंजेक्शन
ऊपर दी गई सूची संपूर्ण नहीं है; यह केवल आपको इस बात का अंदाजा देती है कि एसक्यूएल इंजेक्शन क्या कर सकता है।
SQL इंजेक्शन के लिए स्वचालन उपकरण
ऊपर दिए गए उदाहरण में, हमने SQL के अपने व्यापक ज्ञान के आधार पर मैन्युअल हमले की तकनीकों का उपयोग किया। ऐसे स्वचालित उपकरण भी उपलब्ध हैं जो आपको हमलों को अधिक कुशलतापूर्वक और कम से कम समय में अंजाम देने में मदद कर सकते हैं। इन उपकरणों में शामिल हैं:
- एसक्यूएलमैप – http://sqlmap.org/
- jSQL इंजेक्शन – https://www.kali.org/tools/jsql/
SQL इंजेक्शन हमलों से कैसे बचाव करें
कोई संगठन SQL इंजेक्शन हमलों से स्वयं को बचाने के लिए निम्नलिखित नीति अपना सकता है।
- उपयोगकर्ता के इनपुट पर कभी भरोसा नहीं करना चाहिए – डायनामिक SQL स्टेटमेंट में इसका उपयोग करने से पहले इसे हमेशा सैनिटाइज किया जाना चाहिए।
- संग्रहित प्रक्रियाएं – ये SQL कथनों को समाहित कर सकते हैं और सभी इनपुट को पैरामीटर के रूप में मान सकते हैं।
- तैयार बयान – प्रिपेयर्ड स्टेटमेंट पहले SQL स्टेटमेंट बनाते हैं, फिर सबमिट किए गए सभी उपयोगकर्ता डेटा को पैरामीटर के रूप में मानते हैं। इसका SQL स्टेटमेंट के सिंटैक्स पर कोई प्रभाव नहीं पड़ता।
- नियमित अभिव्यक्ति इनका उपयोग संभावित रूप से हानिकारक कोड का पता लगाने और SQL स्टेटमेंट को निष्पादित करने से पहले उसे हटाने के लिए किया जा सकता है।
- डेटाबेस कनेक्शन उपयोगकर्ता पहुंच अधिकार – केवल आवश्यक पहुंच अधिकार उन खातों को दिए जाने चाहिए जिनका उपयोग किया जाता है डेटाबेस से कनेक्ट करेंइससे सर्वर पर SQL कथनों के प्रदर्शन को कम करने में मदद मिल सकती है।
- त्रुटि संदेश इनमें संवेदनशील जानकारी या त्रुटि के सटीक स्थान का खुलासा नहीं होना चाहिए। त्रुटि उत्पन्न करने वाले SQL कथनों को प्रदर्शित करने के बजाय, "क्षमा करें, हमें तकनीकी त्रुटि का सामना करना पड़ रहा है। तकनीकी टीम से संपर्क कर लिया गया है। कृपया बाद में पुनः प्रयास करें" जैसे सरल कस्टम त्रुटि संदेशों का उपयोग किया जा सकता है।
हैकिंग गतिविधि: SQL इंजेक्शन के लिए Havij का उपयोग करें
इस व्यावहारिक परिदृश्य में, हम Havij एडवांस्ड SQL इंजेक्शन प्रोग्राम का उपयोग करके एक वेबसाइट में मौजूद कमजोरियों का पता लगाते हैं।
नोट: हविज एक पुराना, अनुरक्षित प्रकाशन है। Windows ऊपर दिया गया SQLMap टूल वर्तमान में ओपन-सोर्स मानक है।
ध्यान दें: इसकी प्रकृति के कारण आपका एंटीवायरस प्रोग्राम इसे चिह्नित कर सकता है। आपको इसे बहिष्करण सूची में जोड़ना चाहिए या अपने एंटीवायरस प्रोग्राम को कुछ समय के लिए रोक देना चाहिए। एंटी-वायरस प्रोग्राम.
नीचे दी गई छवि में हविज की मुख्य विंडो दिखाई गई है।
उपरोक्त टूल का उपयोग किसी वेबसाइट या एप्लिकेशन की सुरक्षा खामियों का आकलन करने के लिए किया जा सकता है।








