एसक्यूएल इंजेक्शन भेद्यता के लिए परीक्षण

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

स्वचालित एसक्यूएल इंजेक्शन स्कैनिंग

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

मैनुअल एसक्यूएल इंजेक्शन टेस्ट

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

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

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike

हम मान सकते हैं कि यह पृष्ठ निम्न के जैसा क्वेरी का उपयोग करके डेटाबेस लुकअप करता है:

निर्देशिका से फोन चुनें जहां अंतिम नाम = 'चैपल' और प्रथम नाम = 'माइक'

आइए इसका थोड़ा सा प्रयोग करें। उपरोक्त हमारी धारणा के साथ, हम यूआरएल में एक साधारण परिवर्तन कर सकते हैं जो एसक्यूएल इंजेक्शन हमलों के लिए परीक्षण करता है:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+%3e0+OR+'1'%3d'1

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

निर्देशिका से फोन चुनें जहां अंतिम नाम = 'चैपल' और प्रथम नाम = 'माइक' और (नकली से गिनती (*) का चयन करें)> 0 या '1' = '1'

आप देखेंगे कि उपरोक्त वाक्यविन्यास मूल URL में उससे थोड़ा अलग है। मैंने उदाहरण के अनुपालन को आसान बनाने के लिए अपने ASCII समकक्षों के लिए URL-encoded चर को परिवर्तित करने की स्वतंत्रता ली। उदाहरण के लिए,% 3 डी '=' वर्ण के लिए यूआरएल-एन्कोडिंग है। मैंने इसी तरह के उद्देश्यों के लिए कुछ लाइन ब्रेक भी जोड़े।

परिणामों का मूल्यांकन

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

त्रुटि: कोई उपयोगकर्ता नाम माइक + और + के साथ नहीं मिला (+ नकली + * + + + नकली +) +% 3e0 + या + 1% 3 डी 1 चैपल!

दूसरी तरफ, यदि एप्लिकेशन एसक्यूएल इंजेक्शन के लिए कमजोर है, तो यह सीधे डेटाबेस में कथन पास करेगा, जिसके परिणामस्वरूप दो संभावनाओं में से एक होगा। सबसे पहले, यदि आपके सर्वर में विस्तृत त्रुटि संदेश सक्षम हैं (जो आपको नहीं करना चाहिए!), तो आप इस तरह कुछ देखेंगे:

ओडीबीसी ड्राइवर्स त्रुटि '80040e37' के लिए माइक्रोसॉफ्ट ओएलई डीबी प्रदाता [माइक्रोसॉफ्ट] [ओडीबीसी एसक्यूएल सर्वर चालक] [एसक्यूएल सर्वर] अवैध ऑब्जेक्ट नाम 'नकली'। /directory.asp, लाइन 13

दूसरी तरफ, यदि आपका वेब सर्वर विस्तृत त्रुटि संदेशों को प्रदर्शित नहीं करता है, तो आपको एक और सामान्य त्रुटि मिल जाएगी, जैसे कि:

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

यदि आप ऊपर दी गई दो त्रुटियों में से एक प्राप्त करते हैं, तो आपका एप्लिकेशन एसक्यूएल इंजेक्शन हमले के लिए कमजोर है! एसक्यूएल इंजेक्शन हमलों के खिलाफ आपके अनुप्रयोगों की सुरक्षा के लिए आप जो कुछ कदम उठा सकते हैं उनमें शामिल हैं: