Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल सर्वर में एसक्यूएल इंजेक्शन द्वारा सिंगल कोट्स से बचने वाली स्वच्छता को कैसे हराया जा सकता है?

ऐसे कुछ मामले हैं जहां यह भागने का कार्य विफल हो जाएगा। सबसे स्पष्ट तब होता है जब किसी एक उद्धरण का उपयोग नहीं किया जाता है:

string table= "\"" + table.Replace("'", "''") + "\""
string var= "`" + var.Replace("'", "''") + "`"
string index= " " + index.Replace("'", "''") + " "
string query = "select * from `"+table+"` where name=\""+var+"\" or id="+index

इस मामले में, आप डबल-कोट, बैक-टिक का उपयोग करके "ब्रेक आउट" कर सकते हैं। आखिरी मामले में "ब्रेक आउट" करने के लिए कुछ भी नहीं है, इसलिए आप केवल 1 union select password from users-- या जो भी एसक्यूएल पेलोड हमलावर चाहता है।

अगली शर्त जहां यह एस्केप फ़ंक्शन विफल हो जाएगा, यदि स्ट्रिंग से बचने के बाद उप-स्ट्रिंग ली जाती है (और हां मुझे जंगली में इस तरह की कमजोरियां मिली हैं):

string userPassword= userPassword.Replace("'", "''")
string userName= userInput.Replace("'", "''")
userName = substr(userName,0,10)
string query = "select * from users where name='"+userName+"' and password='"+userPassword+"'";

इस मामले में abcdefgji' . का उपयोगकर्ता नाम abcdefgji'' . में बदल दिया जाएगा एस्केप फ़ंक्शन द्वारा और फिर वापस abcdefgji' . में बदल गया उप-स्ट्रिंग लेकर। किसी भी sql स्टेटमेंट में पासवर्ड वैल्यू सेट करके इसका फायदा उठाया जा सकता है, इस मामले में or 1=1-- sql के रूप में व्याख्या की जाएगी और उपयोगकर्ता नाम की व्याख्या abcdefgji'' and password= के रूप में की जाएगी . परिणामी क्वेरी इस प्रकार है:

select * from users where name='abcdefgji'' and password=' or 1=1-- 

टी-एसक्यूएल और अन्य उन्नत एसक्यूएल इंजेक्शन तकनीक जहां पहले ही उल्लेख किया गया है। SQL सर्वर अनुप्रयोगों में उन्नत SQL इंजेक्शन एक बेहतरीन पेपर है और यदि आपने पहले से नहीं किया है तो आपको इसे पढ़ना चाहिए।

अंतिम मुद्दा यूनिकोड हमले है। कमजोरियों का यह वर्ग उत्पन्न होता है क्योंकि एस्केप फ़ंक्शन को मल्टी-बाइट एन्कोडिंग के बारे में पता नहीं होता है, और इसका उपयोग एक हमलावर द्वारा भागने वाले चरित्र को "उपभोग" करने के लिए किया जा सकता है। स्ट्रिंग में "N" जोड़ने से मदद नहीं मिलेगी, क्योंकि यह बाद में स्ट्रिंग में मल्टी-बाइट वर्णों के मान को प्रभावित नहीं करता है। हालाँकि, इस प्रकार का हमला बहुत ही असामान्य है क्योंकि डेटाबेस को GBK यूनिकोड स्ट्रिंग्स को स्वीकार करने के लिए कॉन्फ़िगर किया जाना चाहिए (और मुझे यकीन नहीं है कि MS-SQL ऐसा कर सकता है)।

सेकंड-ऑर्डर कोड इंजेक्शन अभी भी संभव है, यह अटैक पैटर्न हमलावर-नियंत्रित डेटा स्रोतों पर भरोसा करके बनाया गया है। एस्केपिंग का उपयोग नियंत्रण वर्णों को उनके वर्ण शाब्दिक के रूप में दर्शाने के लिए किया जाता है। यदि डेवलपर select . से प्राप्त मान से बचना भूल जाता है और फिर इस मान का उपयोग किसी अन्य क्वेरी में करता है फिर bam हमलावर के पास उनके निपटान में एक चरित्र शाब्दिक एकल उद्धरण होगा।

सब कुछ जांचें, कुछ भी भरोसा न करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MS SQL सर्वर डेटाबेस में स्वचालित अनुक्रमणिका डीफ़्रेग्मेंटेशन

  2. स्क्रिप्ट संपूर्ण डेटाबेस SQL-सर्वर

  3. SQL डिफ़ॉल्ट बाधा को उसका नाम जाने बिना कैसे छोड़ें?

  4. अजगर का उपयोग करके SQL सर्वर डेटाबेस में एक csv फ़ाइल लिखना

  5. SQL सर्वर 2008 स्थानिक:बहुभुज में एक बिंदु खोजें