
OpenSIS SQLi इंजेक्शन
OpenSIS प्रमाणित SQL इंजेक्शन
Ajax.php, ForWindow.php, ForExport.php, Modules.php, functions/HackingLogFnc.php में SQL इंजेक्शन की कमजोरी मौजूद है। यह खोज OpenSis Community Edition 9.1 से 8.0 और संभवतः इससे निचले संस्करणों को प्रभावित करती है।
उदाहरणों में से एक, Ajax.php में, यह देखा जा सकता है कि यदि दुर्भावनापूर्ण गतिविधियाँ पाई जाती हैं तो IP को लॉग किया जा सकता है और डेटाबेस में डाला जा सकता है। ध्यान देने वाली बात यह है कि यदि “X-Forwarded-For” हेडर भेजा जाता है, तो एप्लिकेशन $_SERVER['REMOTE_ADDR'] के मान के बजाय उस मान को ले लेगा। चूँकि $ip को बिना किसी सैनिटाइजेशन के सीधे SQL स्टेटमेंट में जोड़ा जाता है, इसलिए SQL इंजेक्शन करना संभव है।

नीचे दिए गए प्रूफ ऑफ कॉन्सेप्ट में, पेलोड ' AND SLEEP(7) AND '1'='1 इंजेक्ट करने से एप्लिकेशन 7 सेकंड के लिए सो गया, जो दर्शाता है कि SQL इंजेक्शन सफल रहा।

डेटाबेस लॉग की जाँच करने से इस कमजोरी का और प्रमाण मिलता है।

अंत में, SQLMap, एक स्वचालित SQL इंजेक्शन उपकरण, का उपयोग करके कमजोरी की पुष्टि हुई।

प्रभावित कोड की पंक्तियाँ पाई गईं जो सीधे $_SERVER['HTTP_X_FORWARDED_FOR'] से मान को SQL स्टेटमेंट में जोड़ती हैं।
• Ajax.php (Line 260 to 275)
• Modules.php (Line 1005 to 1023)
• ForExport.php (Line 135 to 147)
• ForWindow.php (Line 124 to 136)
• functions/HackingLogFnc.php (Line 47 to 68)
• SQL स्टेटमेंट में उपयोगकर्ता इनपुट को सीधे जोड़कर SQL क्वेरी को गतिशील रूप से बनाने के बजाय, पैरामीटराइज्ड क्वेरी (जिन्हें प्रिपेयर्ड स्टेटमेंट भी कहा जाता है) का उपयोग करें। पैरामीटराइज्ड क्वेरी SQL कोड को उपयोगकर्ता इनपुट से अलग करती हैं, जिससे SQL इंजेक्शन हमलों का जोखिम काफी कम हो जाता है।
• मजबूत इनपुट सत्यापन और सैनिटाइजेशन तकनीकों को लागू करें ताकि यह सुनिश्चित हो सके कि उपयोगकर्ता द्वारा प्रदान किया गया डेटा अपेक्षित स्वरूपों के अनुरूप हो और इसमें दुर्भावनापूर्ण SQL कोड न हो। इनपुट डेटा प्रकार, लंबाई और स्वरूप को सत्यापित करें, और विशेष वर्णों को एस्केप करके या केवल विशिष्ट वर्णों या पैटर्न की अनुमति देने के लिए व्हाइटलिस्ट का उपयोग करके इनपुट को सैनिटाइज़ करें।
• IP लॉग करने के लिए $_SERVER[‘HTTP_X_FORWARDED_FOR’] का उपयोग न करें।