1. اقتطاع محتوى الاستعلام
في حال كنت تريد تجاهل البرامج النصية في الاستعلام. على سبيل المثال، بالنسبة للمعالجة أدناه، يتطلب الاستعلام الشرط active=1 ولكن يمكننا التعليق (--، -- -، -+، #، /*، /**/، // ، ;%00…) و تجاهله. عند التعدين، غالبًا ما لا نعرف ما يفعله المحتوى المتبقي من الاستعلام، لذا فإن استخدام التعليقات في هذه الحالة فعال للغاية.

بعد التعليق يصبح استفسارنا:
![Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية]()
2. تجاوز تصفية الكلمات الرئيسية
أ. التعليقات المضمنة
يتم استخدام التعليقات المضمنة بشكل فعال للغاية لتجاوز تصفية المساحات البيضاء. يمكنك استخدام الأحرف التالية لتجاوز تصفية المسافات البيضاء: /**/، %20، %09، %0a، %0b، %0c، %0d، %a0). على سبيل المثال:
![Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية]()
أو تجاوز تصفية الكلمات الرئيسية (متوفر مع MySql). في المثال أدناه، الكلمات الرئيسية للاتحاد وكلمة المرور موجودة في القائمة السوداء لذا تم حظرها، يمكننا تجاوزها عن طريق:
![Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية]()
ب. استبدال الكلمات الرئيسية
عند استغلال حقن SQL، غالبًا ما نستخدم كلمات رئيسية مثل: union، Select، information_schema... في كثير من الحالات، يستبدل المبرمجون هذه الكلمات الأساسية ببساطة:
![Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية]()
يمكننا أن نرى بسهولة أن كود المعالجة أعلاه غير موجود. إذا كان الأمر مجرد مطابقة للنمط، فإن التجاوز يكون بسيطًا للغاية. دعونا نطبق حساس لحالة الأحرف، حيث يتم تفسير الأحرف الكبيرة والصغيرة بشكل مختلف.
الآن بدلاً من استخدام الكلمة الأساسية:
select, union…
سوف نستخدم:
SeLEcT, UniOn…
أساس هذا التجاوز هو أن أنظمة إدارة قواعد البيانات لا تميز بين الكلمات الأساسية للحالة والحالة.
في بعض الحالات، سيقوم تطبيق الويب بتصفية كل أو جزء من كلمات رئيسية معينة (اتحاد، تحديد...). سوف نتجاوز على النحو التالي:
id=1+uniunionon+SeLselectecT+1,2,3-- -
بعد تصفية Union وSelect بواسطة تطبيق الويب، سيتبقى لدينا الاستعلام الصحيح كما يلي:
id=1+union+SeLecT+1,2,3-- -
ج. ترميز الأحرف
يمكننا تجاوز قيام WAF (جدار حماية تطبيق الويب) بحظر الكلمات الرئيسية عن طريق تشفيرها. ستقوم العديد من تطبيقات WAF بفك تشفير الاستعلام مرة واحدة فقط وتصفية الكلمات الرئيسية في القائمة السوداء، ثم دعونا نقوم بتشفير الطلب مرتين حتى يمكن تجاوزه في هذه الحالة.
![Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية]()
3. تجاوز الكتل المفردة والمزدوجة
- دعونا نلقي نظرة على مثال قبل التعرف على هذا التجاوز على وجه التحديد.
![Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية]()
في هذا السيناريو، لدينا جدول في قاعدة البيانات يسمى المستخدمين. المهمة التالية هي معرفة اسم العمود في الجدول للحصول على معلوماته. كما في الاستعلام أعلاه، نستخدم الشرط: table_name='users'. ولكن إذا تم حظر كل من علامات الاقتباس المفردة (') وعلامات الاقتباس المزدوجة (") بواسطة WAF، فلن نتمكن بعد الآن من استخدام "المستخدمين" أو "المستخدمين". فكيف نحل هذه المشكلة؟ يمنحنا نظام قاعدة البيانات المدمج وظيفة تحل هذه المشكلة بشكل جيد جدًا، وهي الدالة CHAR() (بالنسبة لأوراكل فهي CHR())، على سبيل المثال، في الاستعلام أعلاه سوف نتجاوزها عن طريق:
![Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية]()
![Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية]()
مبرمجو PHP على دراية بوظيفة addlashes(). وظيفة addlashes () لها تأثير الإضافة قبل أحرف خاصة مثل علامة الاقتباس المفردة (')، علامة الاقتباس المزدوجة ()، الشرطة المائلة العكسية (\)، حرف NUL (بايت فارغ) "\" لمساعدة نظام إدارة قاعدة البيانات. هل هناك لا توجد صعوبة أو ارتباك عند التعامل مع السلاسل التي تحتوي على تلك الأحرف؟ وبالتالي، عندما نريد إدخالها في الاستعلام وفقًا للبرنامج النصي: name='someName' أو '1'='1'-- لم تعد النتائج كما توقعنا.
ومع ذلك، هناك تقنية لتجاوز وظيفة addlashes() لإدخال أحرف الاقتباس المفردة ('). لقد كانت هذه التقنية عامة لفترة طويلة، وتنفيذ هذه التقنية أمر صعب للغاية لأنها مرتبطة بأسلوب الترميز المطبق على موقع الويب.
4. تجاوز الخطأ "مزيج الترتيب غير القانوني لعملية UNION"
في بعض أنظمة الإدارة (الموجودة عادة في MySql)، عندما يتم تعيين قواعد البيانات والجداول للترتيب، عند استخدام الكلمة الأساسية UNION، سيتم الإبلاغ عن الخطأ "مزيج غير قانوني من الترتيب لعملية UNION". يمكن أن يكون إعداد الترتيب بسبب نية مصمم قاعدة البيانات أو بسبب الإعداد الافتراضي لـ MySql. في حالة استخدام Union، يجب علينا التأكد من أن حالة القيمة المحددة في كل حقل يجب أن يكون لها نوع الكود المقابل المحدد. في رأيي، هذا الخطأ شائع جدًا، خاصة بالنسبة لأنظمة إدارة المحتوى (CMS) التي تستخدم Apache MySql. يمكن للأشخاص معرفة المزيد على: http://bugs.mysql.com/bug.php?id=57926.
في هذه الحالة يمكننا استخدام طرق للتحويل إلى نوع الترميز المناسب.
على سبيل المثال في الحالة التالية:
![Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية]()
في الاستعلام أعلاه، إذا كان العمود 1 قد تم تعيين ترتيبه على Unicode-UTF8 أو _latin1، على سبيل المثال، فيجب تحويل ما تم تحديده من العمود 2 إلى الكود المقابل. يمكننا فرض النمط على النحو التالي:
![Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية]()
نرى عيبًا في طريقة التجاوز هذه: علينا أن نعرف أن الكود المجمع هو _latin1. أفضل طريقة لتجاوزها، في رأيي، هي استخدام وظائف التشفير وفك التشفير السداسية وغير السداسية.
![Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية Web5: حقن SQL - بعض التقنيات لتجاوز آليات التصفية]()
هناك العديد من الوظائف الأخرى التي يمكن استخدامها بدلاً من hex وunhex.