في مقال سابق ، اقترحت أن القارئ يعرف كيف يتم بناء لغة استعلام SQL بالتفصيل ، وكذلك كيفية عمل بروتوكول HTTP. ولكن هذا ليس هو الحال عادة. وتذكرت على الفور القصة الموصوفة في أحد كتبي المفضلة ، "عقول غير جديرة بالثقة" ، بقلم روب براذرتون. يصف التجربة التالية. سألت عالمة النفس ريبيكا لوسون مجموعة من الأشخاص إذا كانوا قد ركبوا دراجة في حياتهم. أجاب معظم نعم. كما سألت إذا كانوا يعرفون كيف تعمل الدراجة. كانت هناك بالفعل إجابات إيجابية أقل ، ولكن لا تزال الغالبية العظمى. ثم اقترحت الصورة التالية وطلبت تكميلها حتى تتمكن هذه الدراجة من الركوب.
ثم حدث الشيء الأكثر إثارة للاهتمام - أكثر من نصف الناس لم يتمكنوا من القيام بذلك. تُظهر هذه المهمة البسيطة الخادعة أن معظم الناس ببساطة لا يمكنهم تخيل كيفية عمل الدراجة. لكن الشيء الأكثر إثارة للاهتمام هو أنهم لا يفهمون أنهم لا يعرفون ذلك ، لكنهم يبدأون في فهم ذلك فقط في اللحظة التي يتعين عليهم فيها إظهار هذه المعرفة.
مع HTTP و SQL ، يحدث نفس الشيء. كتب 90٪ من خبراء تكنولوجيا المعلومات استعلامات SQL ، على الأقل في المختبرات المعملية في مؤسساتهم التعليمية ، ويعمل الأشخاص مع HTTP كل يوم كمستخدمين ، ونفس خبراء تكنولوجيا المعلومات من وقت لآخر يقومون بتكوين خوادم الويب التي تعمل بالفعل مع HTTP. ولكن عندما يتعين عليك الإجابة على سؤال محدد ، يحدث الذهول بانتظام.
يجب أن يعرف محلل أمن المعلومات التكنولوجيا بالتفصيل ، مع معرفة الفروق الدقيقة والبراعة. إذا لم نكن نعرف كيف يجب أن تعمل هذه التقنية أو تلك ، فكيف يمكننا معرفة ما هو الخطأ فيها؟
أيضا "حقنة"
ذكرت أن التحقق من المدخلات يجب أن يتم على الخادم ، ولكن ليس على العميل. من وقت لآخر ، قد يواجه المرء نماذج إدخال حيث تكون العناصر الفردية غير نشطة. ويفترض أنها ستصبح نشطة بعد استيفاء شروط معينة. أو ، على سبيل المثال ، يبلغ طول حقل إدخال اسم المستخدم 7 أحرف ، مما يحد من أقصى طول لاسم المستخدم. كل هذه ممارسة سيئة للغاية ، وهنا السبب: يمكن تحرير العناصر الموجودة على الصفحة التي تم تلقيها بالفعل بشكل تعسفي قبل إرسالها ، دون أي وسائل تقنية خاصة. في OWASP Mutillidae II ، يمكن رؤية ذلك في مثال "الآخرين"> "عناصر التحكم" الأمنية "من جانب العميل".
هنا نموذج في الحقول التي تحتاج إلى إدخال رقم عشوائي لها ، هذه المرة 2056694312. "الصعوبة" هنا هي أن الحقول لها قيود. يوجد حقل "للقراءة فقط" حيث لا يمكن استبدال الرقم 42 ، وهناك حقل "مربع نص قصير" قصير جدًا حيث لا يمكن احتواء رقمنا ببساطة ، وهناك حقل "مربع نص معطل" معطل غير نشط ، وما إلى ذلك.
في الواقع ، يتم حل المهمة ببساطة شديدة. في المتصفح (في حالتي هو Mozilla Firefox) ، انتقل إلى وحدة تحكم المطور (F12) وابدأ في فحص عناصر النموذج.
على سبيل المثال ، يبدو حقل القراءة فقط كما يلي:
<input HTMLandXSSInjectionPoint="1" type="text" name="readonly_textbox" id="id_readonly_textbox" size="15" maxlength="15" required="required" autofocus="autofocus" readonly="readonly" value="42" />
حذف readonly = ”readonly” و voila: النموذج قابل للكتابة ، يمكننا إدخال رقمنا.
لا تتناسب قيمتنا ببساطة مع الحقل التالي ، فلنلق نظرة على هذا العنصر:
<input HTMLandXSSInjectionPoint="1" type="text" name="short_textbox" id="id_short_textbox" size="3" maxlength="3" required="required" />
هنا نلاحظ الطول الأقصى = "3 ″. استبدل 3 برقم 333 ، الآن يمكننا إدخال رقمنا دون خوف من عدم ملاءمته.
وبالمناسبة ، الأمر لا يتعلق فقط بحقول الإدخال. وبالمثل ، يمكنك تغيير أي عناصر ، مثل خانات الاختيار. يبدو رمز الصفحة كما يلي:
<input type="checkbox" name="checkbox" id="id_checkbox" value="2056694312" required="required" disabled="disabled" />
الأمر بسيط جدًا هنا ، سنستبدل القيمة برقمنا ، والآن سيتم إرسالها عندما ينقر المستخدم على الزر.
بشكل عام ، إذا كنت تعرف كيف يتم بناء HTML ، فلن يكون من الصعب عليك تصحيح هذا النموذج بحيث تقوم بإدخال جميع البيانات الضرورية هناك. ما عليك سوى إعادة قراءة القسم المتعلق بمتلازمة الدراجات =)
ليس فقط SQL
لا يتعلق الحقن دائمًا بقواعد البيانات. بشكل عام ، من أي شكل لا يقوم بتصفية البيانات الواردة ، يمكنك الحصول على بعض المعلومات الإضافية. في المثال "إدخال سجل التطبيق"> "بحث DNS" ، هناك نموذج مناسب لاستعلامات DNS:
في الواقع ، إذا أدخلت العنوان هناك ، على سبيل المثال google.com ، فإننا نحصل على جميع المعلومات اللازمة:
ومع ذلك ، فإن الثغرة الأمنية هي أنه بالإضافة إلى الأمر الأول الصحيح ، يمكننا إدخال شيء آخر. على سبيل المثال ، حدد:
google.com && dir
والآن إخراج الأمر أكثر إثارة للاهتمام:
قدمنا طلبًا إلى خادم DNS ، ولكن بالإضافة إلى ذلك ، قمنا بتنفيذ الأمر dir ونظرنا في محتويات المجلد. ليس من الصعب ، الجمع بين أوامر مختلفة ، للتجول حول القرص الصلب لخادم الويب والبحث عن ما هو سيئ.
في المرة القادمة سنقوم بتحليل المزيد من الأمثلة ، ونرى أيضًا كيف يمكنك أتمتة عملك.
اقرأ مدونة المؤلف على
هذا الرابط .