SQL इंजेक्शन ट्यूटोरियल: उदाहरण के साथ कैसे सीखें
SQL इंजेक्शन क्या है?
SQL इंजेक्शन एक ऐसा हमला है जो डायनेमिक SQL स्टेटमेंट को ज़हरीला बनाता है ताकि स्टेटमेंट के कुछ हिस्सों पर टिप्पणी की जा सके या ऐसी शर्त जोड़ी जा सके जो हमेशा सत्य होगी। यह खराब तरीके से डिज़ाइन किए गए वेब एप्लिकेशन में डिज़ाइन दोषों का फ़ायदा उठाकर दुर्भावनापूर्ण SQL कोड निष्पादित करने के लिए SQL स्टेटमेंट का फ़ायदा उठाता है।
डेटा सूचना प्रणालियों के सबसे महत्वपूर्ण घटकों में से एक है। ग्राहकों से डेटा प्राप्त करने के लिए संगठन द्वारा डेटाबेस संचालित वेब एप्लिकेशन का उपयोग किया जाता है। एसक्यूएल स्ट्रक्चर्ड क्वेरी लैंग्वेज का संक्षिप्त नाम है। इसका उपयोग डेटाबेस में डेटा को पुनः प्राप्त करने और उसमें हेरफेर करने के लिए किया जाता है।
SQL इंजेक्शन हमला कैसे काम करता है?
SQL इंजेक्शन का उपयोग करके किए जाने वाले हमलों के प्रकार डेटाबेस इंजन के प्रकार पर निर्भर करते हैं। यह हमला गतिशील SQL कथनों पर काम करता हैडायनामिक स्टेटमेंट एक स्टेटमेंट है जो वेब फॉर्म या URI क्वेरी स्ट्रिंग से पैरामीटर पासवर्ड का उपयोग करके रन टाइम पर उत्पन्न होता है।
SQL इंजेक्शन उदाहरण
आइए एक सरल वेब एप्लीकेशन पर विचार करें जिसमें लॉगिन फॉर्म है। HTML फॉर्म का कोड नीचे दिखाया गया है।
<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 एल्गोरिथ्म का उपयोग करके एन्क्रिप्ट किया गया है।
हम 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 ('m@m.com',md5('abc'));
चरण 2) बिल्ड स्कीमा पर क्लिक करें
चरण 3) दाएँ फलक में यह कोड दर्ज करें
select * from users;
चरण 4) Run SQL पर क्लिक करें। आपको निम्न परिणाम दिखाई देंगे
मान लीजिए उपयोगकर्ता आपूर्ति 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 -- ]');
नीचे दिया गया चित्र यह दर्शाता है कि कथन तैयार किया गया है।
यहाँ,
- यह कथन समझदारी से मानता है कि md5 एन्क्रिप्शन का उपयोग किया गया है
- एकल उद्धरण और समापन ब्रैकेट को पूरा करता है
- कथन में एक शर्त जोड़ता है जो हमेशा सत्य होगी
सामान्यतः, एक सफल SQL इंजेक्शन हमला कई अलग-अलग तकनीकों का प्रयास करता है, जैसे कि ऊपर प्रदर्शित तकनीकें, सफल हमले को अंजाम देने के लिए।
अन्य SQL इंजेक्शन हमले के प्रकार
SQL इंजेक्शन सिर्फ़ लॉगिन एल्गोरिदम को पास करने से ज़्यादा नुकसान पहुंचा सकता है। कुछ हमलों में शामिल हैं
- डेटा हटाना
- डेटा अपडेट किया जा रहा है
- डेटा सम्मिलित करना
- सर्वर पर ऐसे आदेशों का निष्पादन करना जो ट्रोजन जैसे दुर्भावनापूर्ण प्रोग्रामों को डाउनलोड और इंस्टॉल कर सकते हैं
- क्रेडिट कार्ड विवरण, ईमेल और पासवर्ड जैसे मूल्यवान डेटा को हमलावर के दूरस्थ सर्वर पर निर्यात करना
- उपयोगकर्ता लॉगिन विवरण आदि प्राप्त करना
- कुकीज़ पर आधारित SQL इंजेक्शन
- त्रुटि आधारित SQL इंजेक्शन
- ब्लाइंड एसक्यूएल इंजेक्शन
उपरोक्त सूची संपूर्ण नहीं है; यह आपको केवल SQL इंजेक्शन के बारे में एक विचार देती है
SQL इंजेक्शन के लिए स्वचालन उपकरण
उपरोक्त उदाहरण में, हमने SQL के अपने विशाल ज्ञान के आधार पर मैन्युअल हमले की तकनीकों का उपयोग किया है। ऐसे स्वचालित उपकरण हैं जो आपको हमलों को अधिक कुशलता से और कम से कम समय में करने में मदद कर सकते हैं। इन उपकरणों में शामिल हैं
- एसक्यूएलमैप – http://sqlmap.org/
- जेएसक्यूएल इंजेक्शन – https://tools.kali.org/vulnerability-analysis/jsql
SQL इंजेक्शन हमलों से कैसे बचें
कोई संगठन SQL इंजेक्शन हमलों से स्वयं को बचाने के लिए निम्नलिखित नीति अपना सकता है।
- उपयोगकर्ता इनपुट पर कभी भी भरोसा नहीं किया जाना चाहिए – गतिशील SQL कथनों में उपयोग करने से पहले इसे हमेशा स्वच्छ किया जाना चाहिए।
- संग्रहित प्रक्रियाएँ – ये SQL कथनों को समाहित कर सकते हैं और सभी इनपुट को पैरामीटर के रूप में मान सकते हैं।
- तैयार बयान – तैयार कथनों को काम करने के लिए पहले SQL कथन बनाना होगा और फिर सभी सबमिट किए गए उपयोगकर्ता डेटा को पैरामीटर के रूप में मानना होगा। इसका SQL कथन के सिंटैक्स पर कोई प्रभाव नहीं पड़ता है।
- नियमित अभिव्यक्तियाँ – इनका उपयोग संभावित हानिकारक कोड का पता लगाने और SQL कथनों को निष्पादित करने से पहले उसे हटाने के लिए किया जा सकता है।
- डेटाबेस कनेक्शन उपयोगकर्ता पहुँच अधिकार – केवल आवश्यक पहुँच अधिकार ही उन खातों को दिए जाने चाहिए जिनका उपयोग डेटाबेस से कनेक्ट करेंइससे सर्वर पर SQL कथनों के प्रदर्शन को कम करने में मदद मिल सकती है।
- त्रुटि संदेश – इनसे संवेदनशील जानकारी का खुलासा नहीं होना चाहिए और यह भी नहीं पता होना चाहिए कि वास्तव में त्रुटि कहां हुई। सरल कस्टम त्रुटि संदेश जैसे कि "क्षमा करें, हम तकनीकी त्रुटियों का सामना कर रहे हैं। तकनीकी टीम से संपर्क किया गया है। कृपया बाद में पुनः प्रयास करें" का उपयोग त्रुटि उत्पन्न करने वाले SQL कथनों को प्रदर्शित करने के बजाय किया जा सकता है।
हैकिंग गतिविधि: SQL इंजेक्शन के लिए Havij का उपयोग करें
इस व्यावहारिक परिदृश्य में, हम किसी वेबसाइट की कमजोरियों को स्कैन करने के लिए हैविज एडवांस्ड एसक्यूएल इंजेक्शन प्रोग्राम का उपयोग करने जा रहे हैं।
ध्यान दें: आपका एंटी-वायरस प्रोग्राम इसकी प्रकृति के कारण इसे फ़्लैग किया जा सकता है। आपको इसे बहिष्कृत सूची में जोड़ना चाहिए या अपने एंटी-वायरस सॉफ़्टवेयर को रोक देना चाहिए।
नीचे दी गई छवि हैविज के लिए मुख्य विंडो दिखाती है
उपरोक्त टूल का उपयोग किसी वेब साइट/एप्लिकेशन की भेद्यता का आकलन करने के लिए किया जा सकता है।
सारांश
- SQL इंजेक्शन एक प्रकार का हमला है जो खराब SQL कथनों का फायदा उठाता है
- SQL इंजेक्शन का उपयोग लॉगिन एल्गोरिदम को बायपास करने, डेटा को पुनः प्राप्त करने, सम्मिलित करने, अद्यतन करने और हटाने के लिए किया जा सकता है।
- SQL इंजेक्शन टूल में SQLMap, SQLPing और SQLSmack आदि शामिल हैं।
- SQL कथन लिखते समय एक अच्छी सुरक्षा नीति SQL इंजेक्शन हमलों को कम करने में मदद कर सकती है।








