اكتشاف ثغرة html injection و التعرف على الكود المتسبب لها و حماية الموقع من هذه الثغرات - Programmer Tech

Programmer Tech

تعلم البرمجة - علوم الكمبيوتر - أمن المعلومات - القرصنة الأخلاقية

إعلان اعلى المقالة

الأربعاء، 28 أكتوبر 2020

اكتشاف ثغرة html injection و التعرف على الكود المتسبب لها و حماية الموقع من هذه الثغرات


حماية تطبيقات الويب

في الآونة الأخيره من هذا القرن اصبح الهاكر الغير اخلاقيون يحتلون مواقع تعود ملكيتها لأشخاص بغير حق وذلك من تعدد الثغرات داخل الموقع, و ذلك بسبب اخطاء يقع بها المبرمج, اليوم سنقوم بشرح احدى تلك الثغرات وهي html injection, سوف نقوم بشرح الثغرة و الكود المتسبب في الثغرة و كيفية إغلاق هذه الثغرة من خلال اكواد php.
 

حماية PHP

عندما نقول php securty فنحن نقصد بها المواقع المبنية على php و هذا الشرح لا ينطبق مع المواقع المبنية على asp.net و python flask ولا غيرهم من اللغات المستخدمة في برمجة المواقع, لكن عموماً الفكره كلها واحدة لكن تتغير طريقة كتابة كود الفلترة من لغة إلى أخرى.

HTML Injection

تتيح تلك الثغرة على التعامل مع اكواد html الموجوده داخل الموقع و نحن نعلم بأن هيكلة الموقع تكون مبنية على اكواد html حيث يمكن للهكر أن يقوم بتعديل اكواد html داخل web sit و هذا الأمر خطير جداً بالنسبة للمستخدمين, حيث يمكن للهكر إضافة حقول بيانات جديدة غير الموجودة في الموقع و عندما يقوم المستخدم بإضافة username and password فيتم ارسال هذه البيانات إلى قواعد بيانات أخرى غير الموجودة في الموقع, تزداد خطورة الأمر عندما يكون في الموقع حقول لإدخال بيانات بطاقة الإئتمان و غيره من الأشياء السرية الذي لا يجب ان يعرفه أحد, كل ذلك يحصل بسبب عدم فلترة البيانات المارة من حقول الإدخال إلى قواعد البيانات في تلك الحاله تكون المسوؤلة عن هذه المشكلة هي php.

كيفية معرفة بأن الموقع مصاب بثغرة html injection

هنا الهاكر يقوم بالتلاعب في البيانات المارة إلى قواعد البيانات من حقول البيانات, مثل حقل البحث "search" ثم يضيف اكواد html داخل مربع البحث و يكون بهذه الطريقة داخل مربع البحث <h1>programmer tech </h1> إن ظهر كلمة programmer tech بحجم كبير هذا يعني أن الموقع مصاب بثغرة html injection, في الأخير نأخذ بعض الأمثلة بكتابة كود مصاب و كيف يمكن الحماية وعمل فلترة له.

html injection web php
كود مصاب


شرح المثال السابق

في الكود السابق تم إضافة حقل بحث الذي يوجد في أي موقع, ثم تمت إضافة حقل إرسال بيانات في نفس الصفحة وهذا من خلال get و تكمن الخطورة هنا, و كما نعرف بأن دالة get تقوم بإظهار المسار بالكامل, و المشكلة لا تكمل بشكل كبير هنا, و سيكون الكود في المتصفح بالشكل

php exploit html injection 


تم طباعة الكلمة بشكل طبيعي لكن لاحظ الرابط هنا, الرابط يبحث عن كلمة programmer tech في دالة الإرسال بإسم word و ذلك يعني أن البيانات تمر من خلال دالة GET و كما يعرف الهاكر ايضاً مسار ملف البحث وهو html_web/html_injection.php. 
 
الآن يعرف الهاكر انه يتعامل مع ملف html_injection.php و هذا هو مكان البحث لكن إلى الآن لن تحدث خطورة بشكل كامل, وهنا الهاكر يبدأ بالبحث عن ثغرة html injection من خلال إضافة اكواد html داخل مربع البحث, لنرى كيف سيكون الأمر.
 
php exploit html injection


لاحظ كيف تغير حجم الكلمة لتصبح بحجم كبير كما تم تحديده في الكود, و هذا ما كان الهاكر يريده بأن يعرف من خلال الوسم h1 أن الكلمة حجمها يزداد, و لاحظ ايضاً كيف تغير شكل الرابط, الآن تم إرساله إلى مستخدم او شخص ما بأن الموقع تم نقل ملكيته لموقع programmer tech ويجب التسجيل من جديد و ستكون هنا المشكلة, يمكن إضافة اشياء كثيرة, دعونا نمبرمج كود html يحتوي على حقول تسجيل بيانات مثل user name و password 

exploit php html injection
كود من اكواد استغلال الثغرة 

لاحظ عند إضافة الكود في مربع البحث في الموقع المصاب ماذا سوف يحدث, سيتغير شكل الموقع بالكامل كما نريد و نشاهد, الآن إنسخ الكود ثم الصقه في مربع البحث

exploit php html injection
تم اضافة صفحة تسجيل دخول 

الآن تم إضافة صفحة تسجيل دخول لآحظ الرابط كيف تغير عند إرسال الرابط إلى شخص ما او مستخدم على الموقع, سوف يتم إظهار تلك الصفحة بشكل كامل على المتصفح, و كما يمكن إرسال البيانات الذي سيتم إدخالها من قبل المستخدم إلى مكان يريد الهاكر ان يحتفظ به او يحفظ بيانات المستخدمين إلى سيرفر وقواعد بيانات اخرى غير الأصلية.

كيف يتم إيقاف ثغرة html injection

الطريقة سهله جداً هي عمل فلتره للبيانات data المارة بين حقول البيانات, و هناك دوال في php متخصصة لهذا الأمر.
 

دالة htmlentities

تقوم هذه الدالة بعرض محتوى الإدخال على مربع البحث كما هو, لنقوم بتغليف مكان إرسال البيانات و نرى ماذا تفعل هذه الدالة بشكل واضح 

html injection php htmlenriries
لاحظ كيف تم اضافة htmlentities


تم اضافة الدالة بهذه الطريقة وتم تغليف البيانات عن طريق الدالة المحددة, و نحن نعرف هنا أن البيانات تمر من خلال GET.
لنجرب كود الإستغلال من جديد و نرى ماذا تغير عند إضافة هذه الدالة لكي تقوم بعمل تغليف على البيانات

php security exploit html injection
لم يتم تنفيذ الاستغلال 


الآن لم يتم تنفيذ الكود و ذلك بسبب htmlentities لأنها قامت بتغليف البيانات, هناك اكثر من دالة للتغليف, htmlentities هي إحداها, لنتعرف على الحماية بشكل اكبر.
 

دالة htmlspecialchars

هذه الدالة تقوم بنفس عمل htmlentities لا يختلف الأمر بينهم و يمكنك إضافة هذه او تلك,لكن توجد دوال اخرى افضل من هذه.

دالة strip_tags

وظيفية هذه الدالة هي مسح اكواد html بشكل نهائي و سيتم ظهور اكواد الإستغلال بعد إضافة هذه الدالة مكان دالة htmlentities, و سيكون الشكل عند الإستغلال هكذا.

تم مسح جميع اكواد استغلال html 


لآحظ قامت الدالة بحذف جميع اكواد html و هذا افضل حل و يكون الهاكر هنا ليس سعيد الحظ,لكن لآحظ لم يتغير الرابط, مثال ظاهر للهكر و هذا خطأ ايضاً و يجب إرسال البيانات و استقبالها من خلال POST و ليس GET, لنرسل ونستقبل البيانات من خلال POST.

الإرسال و الإستقبال من خلال POST

دالة POST

مسؤوله عن عدم طبع المسار في الرابط حتى لا يعرف الهاكر في اي ملف يوجد او يبحث, نلاحظ عند الإستغلال

لآحظ الرابط بعد إضافة POST


الآن كل شي جيد لكن هذا النوع من الثغرات قديم و اظن لا يقع في هذه المشكلة سوى مبرمج جديد و مبتدأ أو كان نائم اثناء بناء الكود. 

فيديو شرح الدرس بالكامل



لمتابعة دورة php من البداية اضغط هنا .

هناك 3 تعليقات:

  1. درس رائع جدا و جميل احسنتم ... انشاء الله مزيد من التقدم . لكم خالص الشكر لفريق .

    ردحذف
  2. مثكورة على التشجيع, قلب ازرق لك 💙💙💙💙💙

    ردحذف

facebook

نموذج الاتصال

الاسم

بريد إلكتروني *

رسالة *