
حقن SQLi في OpenSIS
حقن SQL بعد المصادقة في OpenSIS
توجد ثغرة حقن SQL في Ajax.php وForWindow.php وForExport.php وModules.php وfunctions/HackingLogFnc.php. يؤثر هذا الاكتشاف على 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 (الأسطر 260 إلى 275)
• Modules.php (الأسطر 1005 إلى 1023)
• ForExport.php (الأسطر 135 إلى 147)
• ForWindow.php (الأسطر 124 إلى 136)
• functions/HackingLogFnc.php (الأسطر 47 إلى 68)
• بدلاً من إنشاء استعلامات SQL ديناميكيًا من خلال دمج إدخال المستخدم مباشرةً في عبارة SQL، استخدم الاستعلامات ذات المعاملات (المعروفة أيضًا باسم prepared statements). تفصل الاستعلامات ذات المعاملات بين كود SQL وإدخال المستخدم، مما يقلل بشكل كبير من خطر هجمات حقن SQL.
• نفّذ تقنيات قوية للتحقق من صحة الإدخال وتعقيمه لضمان توافق البيانات المقدمة من المستخدم مع التنسيقات المتوقعة وخلوها من كود SQL ضار. تحقق من أنواع بيانات الإدخال وطوله وتنسيقه، وعقّم الإدخالات عن طريق ترميز الأحرف الخاصة أو استخدام القوائم البيضاء للسماح بأحرف أو أنماط محددة فقط.
• لا تستخدم $_SERVER[‘HTTP_X_FORWARDED_FOR’] لتسجيل عناوين IP.