البرنامج التعليمي لحقن 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.
- يحتوي على خيار تخزين جلسة تسجيل الدخول في ملف تعريف ارتباط. وقد استنتجنا ذلك من مربع الاختيار Remember_Me. ويستخدم طريقة النشر لإرسال البيانات. وهذا يعني أن القيم لا يتم عرضها في عنوان URL.
لنفترض أن العبارة الموجودة في الواجهة الخلفية للتحقق من معرف المستخدم هي كما يلي
SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);
هنا،
- يستخدم البيان أعلاه قيم
$_POST[]
صفيف مباشرة دون تعقيمها. - يتم تشفير كلمة المرور باستخدام خوارزمية MD5.
سنوضح هجوم حقن SQL باستخدام sqlfiddle. افتح عنوان 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
في المثال أعلاه، استخدمنا تقنيات الهجوم اليدوية بناءً على معرفتنا الواسعة بـ SQL. هناك أدوات تلقائية يمكنها مساعدتك في تنفيذ الهجمات بشكل أكثر كفاءة وفي أقصر وقت ممكن. وتشمل هذه الأدوات
- SQLMap – http://sqlmap.org/
- حقن JSQL – https://tools.kali.org/vulnerability-analysis/jsql
كيفية الوقاية من هجمات حقن SQL
يمكن للمؤسسة اعتماد السياسة التالية لحماية نفسها من هجمات حقن SQL.
- لا ينبغي أبدًا الوثوق بإدخال المستخدم - يجب دائمًا تطهيرها قبل استخدامها في عبارات SQL الديناميكية.
- الإجراءات المخزنة - يمكن أن تقوم هذه بتغليف عبارات SQL ومعاملة جميع المدخلات كمعلمات.
- تصريحات جاهزة – البيانات المعدة للعمل من خلال إنشاء عبارة SQL أولاً ثم التعامل مع جميع بيانات المستخدم المقدمة كمعلمات. وهذا ليس له أي تأثير على بناء جملة عبارة SQL.
- التعبيرات العادية – يمكن استخدامها للكشف عن التعليمات البرمجية الضارة المحتملة وإزالتها قبل تنفيذ عبارات SQL.
- حقوق وصول مستخدم اتصال قاعدة البيانات – يجب منح حقوق الوصول الضرورية فقط للحسابات المستخدمة الاتصال بقاعدة البيانات. يمكن أن يساعد هذا في تقليل ما يمكن أن تؤديه عبارات SQL على الخادم.
- رسائل خاطئة - لا ينبغي أن تكشف هذه المعلومات الحساسة والمكان الدقيق الذي حدث فيه الخطأ. يمكن استخدام رسائل خطأ مخصصة بسيطة مثل "نأسف، نحن نواجه أخطاء فنية. تم الاتصال بالفريق الفني. يرجى المحاولة مرة أخرى لاحقًا" بدلاً من عرض عبارات SQL التي تسببت في الخطأ.
نشاط القرصنة: استخدم Havij لحقن SQL
في هذا السيناريو العملي، سنستخدم برنامج Havij Advanced SQL حقن لفحص موقع الويب بحثًا عن نقاط الضعف.
ملحوظة: الخاص بك برنامج مضاد للفيروسات يجوز العلم عليه نظرا لطبيعته. يجب عليك إضافته إلى قائمة الاستثناءات أو إيقاف برنامج مكافحة الفيروسات الخاص بك مؤقتًا.
الصورة أدناه توضح النافذة الرئيسية لـ Havij
يمكن استخدام الأداة المذكورة أعلاه لتقييم مدى ضعف موقع الويب/التطبيق.
الملخص
- حقن SQL هو نوع من الهجوم الذي يستغل عبارات SQL السيئة
- يمكن استخدام حقن SQL لتجاوز خوارزميات تسجيل الدخول، واسترجاع البيانات، وإدراجها، وتحديثها وحذفها.
- تتضمن أدوات حقن SQL SQLMap، وSQLPing، وSQLSmack، وما إلى ذلك.
- يمكن أن تساعد سياسة الأمان الجيدة عند كتابة عبارة SQL في تقليل هجمات حقن SQL.