mobile software repiar course Software repiar course Available All mobile software Box & Dongles Whatsapp Me +91 9923050420 ( PAN - INDIA Services )

Social Media Icons

test

Breaking

Post Top Ad

Your Ad Spot

Saturday 29 July 2023

SQL इंजेक्शन (SQLi) क्या है

 

                SQL इंजेक्शन (SQLi) क्या है 



SQL इंजेक्शन (SQLi) क्या है 

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

SQL इंजेक्शन भेद्यता किसी भी वेबसाइट या वेब एप्लिकेशन को प्रभावित कर सकती है जो MySQL, Oracle, SQL सर्वर या अन्य जैसे SQL डेटाबेस का उपयोग करती है। अपराधी इसका उपयोग आपके संवेदनशील डेटा तक अनधिकृत पहुंच प्राप्त करने के लिए कर सकते हैं: ग्राहक जानकारी, व्यक्तिगत डेटा, व्यापार रहस्य, बौद्धिक संपदा, और बहुत कुछ। SQL इंजेक्शन हमले सबसे पुराने, सबसे प्रचलित और सबसे खतरनाक वेब एप्लिकेशन कमजोरियों में से एक हैं। 

 

SQL इंजेक्शन हमला कैसे और क्यों किया जाता है

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

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

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

SQL इंजेक्शन हमले कई प्रकार के होते हैं: इन-बैंड SQLi (डेटाबेस त्रुटियों या UNION कमांड का उपयोग करके), ब्लाइंड SQLi, और आउट-ऑफ़-बैंड SQLi। आप निम्नलिखित लेखों में उनके बारे में अधिक पढ़ सकते हैं: ब्लाइंड SQL इंजेक्शन: यह क्या है।

 

सरल SQL इंजेक्शन उदाहरण

पहला उदाहरण बहुत सरल है. यह दिखाता है कि कैसे एक हमलावर एप्लिकेशन सुरक्षा से बचने और व्यवस्थापक के रूप में प्रमाणित करने के लिए SQL इंजेक्शन भेद्यता का उपयोग कर सकता है।

निम्नलिखित स्क्रिप्ट एक वेब सर्वर पर निष्पादित छद्मकोड है। यह उपयोगकर्ता नाम और पासवर्ड से प्रमाणित करने का एक सरल उदाहरण है। उदाहरण डेटाबेस में  users निम्नलिखित कॉलमों के साथ नामित एक तालिका है:  username और  password

# Define POST variables
uname = request.POST['username']
passwd = request.POST['password']

# SQL query vulnerable to SQLi
sql = “SELECT id FROM users WHERE username=’” + uname + “’ AND password=’” + passwd + “’”

# Execute the SQL statement
database.execute(sql)

ये इनपुट फ़ील्ड SQL इंजेक्शन के प्रति संवेदनशील हैं। एक हमलावर इनपुट में SQL कमांड का उपयोग इस तरह से कर सकता है जो डेटाबेस सर्वर द्वारा निष्पादित SQL स्टेटमेंट को बदल देगा। उदाहरण के लिए, वे एक एकल उद्धरण वाली युक्ति का उपयोग कर सकते हैं और  passwd फ़ील्ड को यहां सेट कर सकते हैं:

password' OR 1=1

परिणामस्वरूप, डेटाबेस सर्वर निम्न SQL क्वेरी चलाता है:

SELECT id FROM users WHERE username='username' AND password='password' OR 1=1'

कथन के कारण  OR 1=1 ,  खंड तालिका  से  WHERE पहला लौटाता है,   इससे कोई फर्क नहीं पड़ता कि   और  क्या  हैं। डेटाबेस में पहला उपयोगकर्ता   अक्सर प्रशासक होता है। इस तरह, हमलावर न केवल प्रमाणीकरण को दरकिनार कर देता है बल्कि प्रशासकीय विशेषाधिकार भी प्राप्त कर लेता है। वे SQL क्वेरी के निष्पादन को और अधिक नियंत्रित करने के लिए शेष SQL कथन पर भी टिप्पणी कर सकते हैं:idusersusernamepasswordid

-- MySQL, MSSQL, Oracle, PostgreSQL, SQLite
' OR '1'='1' --
' OR '1'='1' /*
-- MySQL
' OR '1'='1' #
-- Access (using null characters)
' OR '1'='1' %00
' OR '1'='1' %16

यूनियन-आधारित SQL इंजेक्शन का उदाहरण

SQL इंजेक्शन के सबसे सामान्य प्रकारों में से एक UNION ऑपरेटर का उपयोग करता है। यह हमलावर को दो या दो से अधिक SELECT कथनों के परिणामों को एक ही परिणाम में संयोजित करने की अनुमति देता है। तकनीक को  यूनियन -आधारित SQL इंजेक्शन कहा जाता है।

निम्नलिखित इस तकनीक का एक उदाहरण है. यह वेब पेज  testphp.volnweb.com का उपयोग करता है , जो एक्यूनेटिक्स द्वारा होस्ट की गई एक जानबूझकर कमजोर वेबसाइट है।

निम्नलिखित HTTP अनुरोध एक सामान्य अनुरोध है जो एक वैध उपयोगकर्ता भेजेगा:

GET http://testphp.vulnweb.com/artists.php?artist=1 HTTP/1.1
Host: testphp.vulnweb.com

 

 

SQL इंजेक्शन को कैसे रोकें

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

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

PHP भाषा में SQL इंजेक्शन हमलों को रोकने का तरीका जानने के लिए, देखें: PHP अनुप्रयोगों में SQL इंजेक्शन कमजोरियों को रोकना और उन्हें ठीक करना। यह जानने के लिए कि इसे कई अन्य विभिन्न प्रोग्रामिंग भाषाओं में कैसे किया जाए, SQL इंजेक्शन को रोकने के लिए बॉबी टेबल्स गाइड देखें।

 

No comments:

Post Top Ad

Your Ad Spot

Pages