البرنامج التعليمي لحقن SQL: تعلم باستخدام المثال
⚡ ملخص ذكي
يُعدّ هجوم حقن SQL هجومًا يُفسد استعلامات SQL الديناميكية لتجاوز المصادقة أو كشف البيانات، مستغلًا تطبيقات الويب التي تُنشئ استعلامات من مدخلات المستخدم غير المُعالجة. توضح هذه الصفحة آلية عمل هذا الهجوم وكيفية الوقاية منه.

ما هو حقن SQL؟
يُعدّ هجوم حقن SQL هجومًا يُفسد عبارات SQL الديناميكية عن طريق تعطيل أجزاء معينة منها أو إضافة شرط يكون صحيحًا دائمًا. ويستغل هذا الهجوم عيوب التصميم في تطبيقات الويب سيئة التصميم لاستغلال عبارات SQL وتنفيذ تعليمات برمجية خبيثة.
تُعدّ البيانات أحد أهمّ عناصر نظم المعلومات. وتستخدم المؤسسات تطبيقات الويب التي تعتمد على قواعد البيانات للحصول على البيانات من عملائها. SQL هو اختصار لـ لغة الاستعلام الهيكلية. يتم استخدامه لاسترجاع البيانات ومعالجتها في قاعدة البيانات.
كيف يعمل هجوم حقن SQL؟
تختلف أنواع الهجمات التي يمكن تنفيذها باستخدام حقن SQL باختلاف نوع محرك قاعدة البيانات. وتستهدف هذه الهجمات عبارات SQL الديناميكية، وهي عبارات تُنشأ أثناء التشغيل باستخدام معلمات مُمررة من نموذج ويب أو سلسلة استعلام URI.
مثال حقن SQL
لنفترض وجود تطبيق ويب بسيط يحتوي على نموذج تسجيل دخول. يظهر رمز نموذج HTML أدناه.
<form action=‘index.php’ method="post"> <input type="email" name="email" required="required"/> <input type="password" name="password"/> <input type="checkbox" name="remember_me" value="Remember me"/> <input type="submit" value="Submit"/> </form>
هنا،
- يقبل النموذج أعلاه عنوان البريد الإلكتروني وكلمة المرور، ثم يرسلهما إلى PHP الملف المسمى Index.php.
- يحتوي على خيار لتخزين جلسة تسجيل الدخول في ملف تعريف ارتباط. استنتجنا ذلك من خانة اختيار "تذكرني". يستخدم طريقة POST لإرسال البيانات. هذا يعني أن القيم لا تُعرض في URL.
لنفترض أن العبارة الموجودة في الواجهة الخلفية للتحقق من معرف المستخدم هي كما يلي.
SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);
هنا،
- يستخدم البيان أعلاه قيم مصفوفة $_POST[] مباشرة دون تنظيفها.
- يتم تشفير كلمة المرور باستخدام خوارزمية MD5.
سنوضح هجوم حقن SQL باستخدام SQL Fiddle. افتح ال URL http://sqlfiddle.com/ في متصفح الويب الخاص بك، ستظهر لك النافذة التالية.
ملاحظة: سيتعين عليك كتابة عبارات SQL.
الخطوة 1) أدخل هذا الرمز في الجزء الأيسر.
CREATE TABLE `users` ( `id` INT NOT NULL AUTO_INCREMENT, `email` VARCHAR(45) NULL, `password` VARCHAR(45) NULL, PRIMARY KEY (`id`)); insert into users (email,password) values ('m@m.com',md5('abc'));
الخطوة 2) انقر فوق "إنشاء المخطط".
الخطوة 3) أدخل هذا الرمز في الجزء الأيمن.
select * from users;
الخطوة 4) انقر فوق تشغيل SQL. سترى النتيجة التالية.
لنفترض أن المستخدم أدخل admin@admin.sys وكلمة المرور 1234. ستكون العبارة التي يتم تنفيذها على قاعدة البيانات كالتالي:
SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');
يمكن استغلال الكود أعلاه عن طريق حذف جزء كلمة المرور وإضافة شرط يكون صحيحًا دائمًا. لنفترض أن المهاجم أدخل البيانات التالية في حقل عنوان البريد الإلكتروني.
xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]
xxx لكلمة المرور.
سيكون البيان الديناميكي الذي تم إنشاؤه كما يلي.
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');
هنا،
- xxx@xxx.xxx وينتهي بعلامة اقتباس مفردة تُكمل سلسلة الاقتباس.
OR 1 = 1الحد 1 هو الشرط الذي سيكون صحيحًا دائمًا ويحدد النتائج التي يتم إرجاعها بسجل واحد فقط.- - 'و... هو تعليق SQL الذي يلغي جزء كلمة المرور.
انسخ عبارة SQL المذكورة أعلاه والصقها في SQL Fiddle قم بتشغيل مربع نص SQL كما هو موضح أدناه.
نشاط القرصنة: حقن SQL لتطبيق ويب
لدينا تطبيق ويب بسيط في http://www.techpanda.org/ هذا النموذج عرضة لهجمات حقن SQL لأغراض التوضيح فقط. تم استخراج كود نموذج HTML أعلاه من صفحة تسجيل الدخول. يوفر التطبيق إجراءات أمان أساسية مثل تنظيف حقل البريد الإلكتروني. هذا يعني أنه لا يمكن استخدام الكود المذكور أعلاه لتجاوز عملية تسجيل الدخول.
ولتجاوز ذلك، نستغل حقل كلمة المرور بدلاً من ذلك. يوضح الرسم البياني أدناه الخطوات التي يجب اتباعها.
لنفترض أن المهاجم قدم المدخلات التالية.
- الخطوة 1: أدخل xxx@xxx.xxx كعنوان البريد الإلكتروني
- الخطوة 2: أدخل xxx') أو 1 = 1 — ]
- انقر فوق الزر إرسال.
- سيتم توجيهك إلى لوحة المعلومات.
ستكون عبارة SQL المُنشأة كما يلي.
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');
يوضح الرسم البياني أدناه كيفية إنشاء البيان.
هنا،
- يفترض البيان بذكاء استخدام تشفير MD5.
- أكمل علامة الاقتباس المفردة والقوس الختامي.
- يُلحق شرطًا بالعبارة التي ستكون صحيحة دائمًا.
بشكل عام، يجمع الهجوم الناجح بين عدة تقنيات مثل تلك الموضحة أعلاه.
أنواع أخرى من هجمات حقن SQL
يمكن أن تتسبب هجمات حقن SQL في أضرار تتجاوز مجرد تجاوز خوارزميات تسجيل الدخول. ومن بين هذه الهجمات:
- حذف البيانات
- تحديث البيانات
- إدخال البيانات
- تنفيذ الأوامر على الخادم التي يمكنها تنزيل وتثبيت البرامج الضارة مثل أحصنة طروادة
- تصدير البيانات القيمة مثل تفاصيل بطاقة الائتمان والبريد الإلكتروني وكلمات المرور إلى الخادم البعيد للمهاجم
- الحصول على تفاصيل تسجيل دخول المستخدم، وما إلى ذلك.
- حقن SQL بناءً على ملفات تعريف الارتباط
- حقن SQL على أساس الخطأ
- حقن SQL الأعمى
القائمة أعلاه ليست شاملة؛ إنها فقط تعطيك فكرة عما يمكن أن يفعله حقن SQL.
أدوات الأتمتة لحقن SQL
في المثال أعلاه، استخدمنا أساليب هجوم يدوية استنادًا إلى معرفتنا الواسعة بلغة SQL. توجد أدوات آلية تساعدك على تنفيذ الهجمات بكفاءة أكبر وفي أقصر وقت ممكن. تشمل هذه الأدوات ما يلي:
- SQLMap – http://sqlmap.org/
- حقن جافا سكريبت - https://www.kali.org/tools/jsql/
كيفية منع هجمات حقن SQL
يمكن للمؤسسة اعتماد السياسة التالية لحماية نفسها من هجمات حقن SQL.
- لا ينبغي الوثوق أبدًا بمدخلات المستخدم – يجب دائمًا تنظيفها قبل استخدامها في عبارات SQL الديناميكية.
- الإجراءات المخزنة – يمكن لهذه الأدوات أن تغلف عبارات SQL وتتعامل مع جميع المدخلات كمعلمات.
- البيانات المعدة – تعمل العبارات المُجهزة عن طريق إنشاء عبارة SQL أولاً، ثم التعامل مع جميع بيانات المستخدم المُرسلة كمعاملات. وهذا لا يؤثر على بنية عبارة SQL.
- التعبيرات العادية – يمكن استخدام هذه الأدوات للكشف عن التعليمات البرمجية الضارة المحتملة وإزالتها قبل تنفيذ عبارات SQL.
- حقوق وصول المستخدم إلى اتصال قاعدة البيانات – يجب منح حقوق الوصول الضرورية فقط للحسابات المستخدمة في الاتصال بقاعدة البيانات. يمكن أن يساعد هذا في تقليل ما يمكن أن تؤديه عبارات SQL على الخادم.
- رسائل الخطأ – يجب ألا تكشف هذه الرسائل عن معلومات حساسة أو عن مكان حدوث الخطأ بالتحديد. يمكن استخدام رسائل خطأ مخصصة بسيطة مثل "عذرًا، نواجه بعض المشاكل التقنية. تم التواصل مع الفريق التقني. يرجى المحاولة مرة أخرى لاحقًا" بدلاً من عرض عبارات SQL التي تسببت في الخطأ.
نشاط القرصنة: استخدم Havij لحقن SQL
في هذا السيناريو العملي، نستخدم برنامج Havij Advanced SQL Injection لفحص موقع ويب بحثًا عن الثغرات الأمنية.
ملاحظة: هافيج قديم وغير مُحدّث Windows الأداة — SQLMap المذكورة أعلاه هي المعيار الحالي مفتوح المصدر.
ملاحظة: قد يقوم برنامج مكافحة الفيروسات لديك بتصنيفه كملف غير مرغوب فيه نظرًا لطبيعته. يجب عليك إضافته إلى قائمة الاستثناءات أو إيقاف برنامج مكافحة الفيروسات مؤقتًا. برنامج مضاد للفيروسات.
تُظهر الصورة أدناه النافذة الرئيسية لبرنامج هافيج.
يمكن استخدام الأداة المذكورة أعلاه لتقييم مدى ثغرات موقع ويب أو تطبيق.








