SQL इंजेक्शन ट्यूटोरियल: उदाहरण के साथ सीखें

⚡ स्मार्ट सारांश

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

  • 💉 परिभाषा: SQL इंजेक्शन किसी अमान्य इनपुट फ़ील्ड के माध्यम से क्वेरी में दुर्भावनापूर्ण SQL सम्मिलित करता है।
  • 🔓 प्रभाव: एक सफल हमले में लॉगिन को दरकिनार करके रिकॉर्ड को पढ़ा, संशोधित या हटाया जा सकता है।
  • 🧪 उदाहरण: एक सर्वमान्य शर्त और एक टिप्पणी लॉगिन जांच को बाईपास में बदल देती है।
  • उपकरण: SQLMap और jSQL इंजेक्टेबल पैरामीटर का पता लगाने और उनका फायदा उठाने की प्रक्रिया को स्वचालित बनाते हैं।
  • रोकथाम: पैरामीटराइज्ड क्वेरी, इनपुट वैलिडेशन और न्यूनतम विशेषाधिकार वाले खाते इस अंतर को कम करते हैं।
  • 🤖 आधुनिक बढ़त: एआई-संचालित स्कैनर और फ़ायरवॉल उन इंजेक्शन पैटर्न को चिह्नित करते हैं जिन्हें निश्चित हस्ताक्षर पहचानने में विफल रहते हैं।

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 स्टेटमेंट लिखने होंगे।

खाली SQL Fiddle स्कीमा और क्वेरी के लिए विंडो तैयार है

चरण 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) रन एसक्यूएल पर क्लिक करें। आपको निम्नलिखित परिणाम दिखाई देगा।

SQL Fiddle परिणाम में लौटाया गया एकल उपयोगकर्ता रिकॉर्ड दिखाया गया है।

मान लीजिए कि कोई उपयोगकर्ता 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 = 1 LIMIT 1 एक शर्त है जो हमेशा सत्य होगी और लौटाए गए परिणामों को केवल एक रिकॉर्ड तक सीमित करेगी।
  • — ' AND … एक SQL टिप्पणी है जो पासवर्ड भाग को समाप्त कर देती है।

ऊपर दिए गए SQL स्टेटमेंट को कॉपी करें और इसे पेस्ट करें। SQL Fiddle नीचे दिखाए गए अनुसार SQL टेक्स्ट बॉक्स चलाएँ।

SQL Fiddle इंजेक्ट की गई स्थिति चलने के बाद रिकॉर्ड वापस करना

हैकिंग गतिविधि: 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 -- ]');

नीचे दिया गया आरेख दर्शाता है कि यह कथन कैसे उत्पन्न होता है।

इंजेक्ट किए गए SQL स्टेटमेंट को जनरेट करने की प्रक्रिया का विस्तृत विवरण

यहाँ,

  • यह कथन बुद्धिमानी से यह मानकर चलता है कि एमडी5 एन्क्रिप्शन का उपयोग किया जा रहा है।
  • सिंगल कोट और क्लोजिंग ब्रैकेट को पूरा करता है।
  • यह कथन में एक ऐसी शर्त जोड़ता है जो हमेशा सत्य होगी।

सामान्य तौर पर, एक सफल हमले में ऊपर दिखाए गए कई तरीकों का संयोजन होता है।

अन्य SQL इंजेक्शन हमले के प्रकार

SQL इंजेक्शन लॉगिन एल्गोरिदम को बायपास करने से कहीं अधिक नुकसान पहुंचा सकते हैं। कुछ हमलों में शामिल हैं:

  • डेटा हटाना
  • डेटा अपडेट किया जा रहा है
  • डेटा सम्मिलित करना
  • सर्वर पर ऐसे आदेशों का निष्पादन करना जो ट्रोजन जैसे दुर्भावनापूर्ण प्रोग्रामों को डाउनलोड और इंस्टॉल कर सकते हैं
  • क्रेडिट कार्ड विवरण, ईमेल और पासवर्ड जैसे मूल्यवान डेटा को हमलावर के दूरस्थ सर्वर पर निर्यात करना
  • उपयोगकर्ता लॉगिन विवरण प्राप्त करना, इत्यादि।
  • कुकीज़ पर आधारित SQL इंजेक्शन
  • त्रुटि आधारित SQL इंजेक्शन
  • ब्लाइंड एसक्यूएल इंजेक्शन

ऊपर दी गई सूची संपूर्ण नहीं है; यह केवल आपको इस बात का अंदाजा देती है कि एसक्यूएल इंजेक्शन क्या कर सकता है।

SQL इंजेक्शन के लिए स्वचालन उपकरण

ऊपर दिए गए उदाहरण में, हमने SQL के अपने व्यापक ज्ञान के आधार पर मैन्युअल हमले की तकनीकों का उपयोग किया। ऐसे स्वचालित उपकरण भी उपलब्ध हैं जो आपको हमलों को अधिक कुशलतापूर्वक और कम से कम समय में अंजाम देने में मदद कर सकते हैं। इन उपकरणों में शामिल हैं:

SQL इंजेक्शन हमलों से कैसे बचाव करें

कोई संगठन SQL इंजेक्शन हमलों से स्वयं को बचाने के लिए निम्नलिखित नीति अपना सकता है।

  • उपयोगकर्ता के इनपुट पर कभी भरोसा नहीं करना चाहिए – डायनामिक SQL स्टेटमेंट में इसका उपयोग करने से पहले इसे हमेशा सैनिटाइज किया जाना चाहिए।
  • संग्रहित प्रक्रियाएं – ये SQL कथनों को समाहित कर सकते हैं और सभी इनपुट को पैरामीटर के रूप में मान सकते हैं।
  • तैयार बयान – प्रिपेयर्ड स्टेटमेंट पहले SQL स्टेटमेंट बनाते हैं, फिर सबमिट किए गए सभी उपयोगकर्ता डेटा को पैरामीटर के रूप में मानते हैं। इसका SQL स्टेटमेंट के सिंटैक्स पर कोई प्रभाव नहीं पड़ता।
  • नियमित अभिव्यक्ति इनका उपयोग संभावित रूप से हानिकारक कोड का पता लगाने और SQL स्टेटमेंट को निष्पादित करने से पहले उसे हटाने के लिए किया जा सकता है।
  • डेटाबेस कनेक्शन उपयोगकर्ता पहुंच अधिकार – केवल आवश्यक पहुंच अधिकार उन खातों को दिए जाने चाहिए जिनका उपयोग किया जाता है डेटाबेस से कनेक्ट करेंइससे सर्वर पर SQL कथनों के प्रदर्शन को कम करने में मदद मिल सकती है।
  • त्रुटि संदेश इनमें संवेदनशील जानकारी या त्रुटि के सटीक स्थान का खुलासा नहीं होना चाहिए। त्रुटि उत्पन्न करने वाले SQL कथनों को प्रदर्शित करने के बजाय, "क्षमा करें, हमें तकनीकी त्रुटि का सामना करना पड़ रहा है। तकनीकी टीम से संपर्क कर लिया गया है। कृपया बाद में पुनः प्रयास करें" जैसे सरल कस्टम त्रुटि संदेशों का उपयोग किया जा सकता है।

हैकिंग गतिविधि: SQL इंजेक्शन के लिए Havij का उपयोग करें

इस व्यावहारिक परिदृश्य में, हम Havij एडवांस्ड SQL इंजेक्शन प्रोग्राम का उपयोग करके एक वेबसाइट में मौजूद कमजोरियों का पता लगाते हैं।

नोट: हविज एक पुराना, अनुरक्षित प्रकाशन है। Windows ऊपर दिया गया SQLMap टूल वर्तमान में ओपन-सोर्स मानक है।

ध्यान दें: इसकी प्रकृति के कारण आपका एंटीवायरस प्रोग्राम इसे चिह्नित कर सकता है। आपको इसे बहिष्करण सूची में जोड़ना चाहिए या अपने एंटीवायरस प्रोग्राम को कुछ समय के लिए रोक देना चाहिए। एंटी-वायरस प्रोग्राम.

नीचे दी गई छवि में हविज की मुख्य विंडो दिखाई गई है।

Havij SQL इंजेक्शन टूल की मुख्य विंडो

उपरोक्त टूल का उपयोग किसी वेबसाइट या एप्लिकेशन की सुरक्षा खामियों का आकलन करने के लिए किया जा सकता है।

अक्सर पूछे जाने वाले प्रश्न

केवल साइट के मालिक की लिखित अनुमति से ही परीक्षण करें। किसी ऐसे एप्लिकेशन का परीक्षण करना जो आपका नहीं है, अमेरिकी कंप्यूटर धोखाधड़ी और दुरुपयोग अधिनियम जैसे कानूनों के तहत अवैध है। बग-बाउंटी के दायरे में यह परिभाषित किया गया है कि क्या अनुमति है।

जी हां। OWASP टॉप 10:2025 में, इंजेक्शन को A05 रैंक मिली है, और परीक्षण में अभी भी लगभग हर एप्लिकेशन में इंजेक्शन पाया जाता है। प्रति वर्ष हजारों नए SQL इंजेक्शन CVE के साथ, यह वेब के लिए एक प्रमुख जोखिम बना हुआ है।

MD5 एक तेज़ हैश है, एन्क्रिप्शन नहीं, और हमलावर रेनबो टेबल और GPU का उपयोग करके इसे आसानी से क्रैक कर लेते हैं। इसके बजाय पासवर्ड के लिए bcrypt या Argon2 जैसे धीमे, सॉल्टेड एल्गोरिदम का उपयोग करें।

किसी भी डेटाबेस से गतिशील रूप से निर्मित SQL के माध्यम से क्वेरी की जाती है — MySQL, PostgreSQL, Microsoft SQL Server, Oracle, तथा SQLiteयह खामी डेटाबेस इंजन में नहीं, बल्कि एप्लिकेशन द्वारा उपयोगकर्ता इनपुट को क्वेरी में संयोजित करने के तरीके में निहित है।

कृत्रिम बुद्धिमत्ता (AI) से संचालित फ़ायरवॉल और स्कैनर सामान्य ट्रैफ़िक पैटर्न को सीखते हैं, और फिर वास्तविक समय में इंजेक्ट की गई स्थितियों या टिप्पणियों जैसे असामान्य इनपुट को चिह्नित करते हैं। मशीन-लर्निंग मॉडल उन अस्पष्ट पेलोड को पकड़ लेते हैं जिन्हें निश्चित सिग्नेचर नहीं पकड़ पाते।

एआई सहायक जैसे गिटहब कोपिलॉट ये पैरामीटराइज़्ड क्वेरी और इनपुट वैलिडेशन का सुझाव दे सकते हैं, लेकिन ये असुरक्षित पैटर्न भी दोहराते हैं। प्रत्येक सुझाव को ड्राफ्ट के रूप में मानें और इसे सुरक्षा लिंटर के साथ मिलाकर समीक्षा करें।

SQL इंजेक्शन सर्वर-साइड क्वेरी में SQL इंजेक्ट करके डेटाबेस को निशाना बनाता है। क्रॉस-साइट स्क्रिप्टिंग ब्राउज़र में चलने वाली स्क्रिप्ट इंजेक्ट करके अन्य उपयोगकर्ताओं को निशाना बनाती है। एक से डेटा लीक होता है, जबकि दूसरा सेशन को हाईजैक करता है।

एक ORM (ऑब्जेक्ट-रिलेशनल मैपर) डिफ़ॉल्ट रूप से पैरामीटराइज़ेशन के साथ कोड ऑब्जेक्ट से क्वेरी बनाता है, जिससे अधिकांश SQL इंजेक्शन को रोका जा सकता है। यह पूरी तरह से सुरक्षित नहीं है - कच्ची क्वेरी और असुरक्षित मेथड से अभी भी डेटा लीक हो सकता है, इसलिए सत्यापन अभी भी महत्वपूर्ण है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: