نظره على اشهر انواع ثغرات المواقع
مدرج تحت قسم: مقالات
أمن المواقع موضوع بات يهم كل مطورين المواقع بالدرجة الأولى، هناك قاعدة لدى المبرمجين تقول “كلما كان البرنامج صغير و ميزاته أقل، كان آمناً أكثر و قابلاً لاكتشاف الاخطاء فيه بسرعة”، اعتقد ان هذه القاعده تنطبق على المواقع ايضاً، في الحقيقه ارى ان السبب الاساسي في عدم امن الموقع – بعد عدم أمن السيرفر بالطبع – هو استخدام السكربتات غير الآمنه و المبالغه في عددها، و الآن ما رأيكم بإلقاء نظرة على الآنواع التي قد تحتويها السكربتات الجاهزه؟
في الحقيقه هذه الآنواع من الثغرات ليست مقتصره على لغة برمجه معينه، بل انها تنطبق على اغلب لغات الويب مثل html، JSP، ASP و من رأيي اختيار برنامج آمن لاستخدامه في الموقع من الخطوات الهامه جداً.
SQL Injection
أحد اشهر انواع الثغرات و اخطرها! هذه الثغره تظهر في البرامج التي تستخدم “قواعد البيانات” في عملها، محركات قواعد البيانات مثل MySQL، MSSQL، Oracle و غيرها تستخدم لغة واحدة من أجل استعلاماتها و تسمى هذه اللغه SQL، لغة SQL تستخدم علامة الاقتباس الفرديه (’) بشكل اساسي في كثير من عملها، لدينا مثال بسيط على جملة SQL تستخدم علامة الاقتباس الفرديه:
SELECT * FROM table WHERE field='text';
هذا المثال يقوم باختيار البيانات التي تحتوي على الكلمه text في الحقل field، لسنا بصدد شرح SQL هنا و لكن الذي اريد توضيحه ان علامات الاقتباس الفرديه (’) تُستخدم و بشكل اساسي في لغة SQL، لنفرض اننا نريد البحث عن البيانات التي تحتوي على كلمة text’s في الحقل field، لاحظوا ان الكلمه تحتوي على علامة الاقتباس الفرديه (’) والتي نستخدمها بشكل اساسي في جمل SQL، و لو قمنا بكتابة جملة SQL كالتالي:
SELECT * FROM table WHERE field='text's';
مباشرة سوف يظهر لنا خطأ في الجمله و حتى نحل هذا الخطأ نقوم بتصريف علامة الاقتباس الفرديه الموجوده في الكلمه text’s بالشكل التالي text\’s أي نستخدم \ من اجل تصريف علامة الاقتباس الفرديه كالتالي:
SELECT * FROM table WHERE field='text\'s';
يمكنني القول انه هنا يكمن الضعف، لنفرض اننا نستخدم سكربت لايقوم بتهريب علامة الاقتباس الفرديه عند إضافة حقل أو طلب حقل من قواعد البيانات؟ ما الذي سوف يحدث برأيك؟ ببساطه سوف نتمكن من التدخل في الاستعلام وحقنه بإستعلام آخر نكتبه بنفسنا من اجل غرض معين، كحذف قواعد البيانات، أو اخذ صلاحيات المدير أو ما شابه، حسناً لنأخذ نفس الاستعلام السابق، ولكن بدون أي تهريب لعلامة الاقتباس و قد اطلعنا عليه مسبقاً و ذكرنا انه سوف يظهر لنا خطأ:
SELECT * FROM table WHERE field='text's';
حسناً لماذا تعتبر هذه الجمله خطأ في اللغة؟ لأنها في الحقيقه تُعتبر كالتالي:
SELECT * FROM table WHERE field='text'
اما البقية وهي:
s'
تعتبر زائده غير مفهومه من ناحية لغة SQL، حسناً ما رأيكم لو استبدلنا هذا الكود:
s'
بهذا الكود:
; DELETE FROM table
والذي يكون اختصاصه حذف جميع البيانات في الجدول table، و بالتالي ينتج لدينا الاستعلام التالي:
SELECT * FROM table WHERE field='text' ; DELETE FROM table;
حسناً اعتقد ان الامور أكثر وضوحاً الآن حول ثغرة SQL Injection أو (حُقن الاس كيو ال)، و الآن لنتحدث من الناحية البرمجيه عن كيفية تجنب مثل هذه الثغرات، القاعده بسيطة جداً، يجب معالجة جميع المدخلات من المستخدمين والتي تدخل ضمن استعلامات قواعد البيانات، بحيث يتم تصريف علامات الاقتباس الفرديه في جمل SQL، لن افرض لغة برمجة معينه لأنها مقاله تتحدث على وجه العموم.
يمكنني القول ان استغلال هذه الثغره يتباين حسب جملة SQL، هناك مثلاً استغلالات تستخدم خواص لغة SQL مثل كلمة المفتاح AS، وهذا النوع غالباً ما يكون لطباعة بيانات معينه.
XSS
نوع آخر من الثغرات الامنيه و يعتبر من الثغرات المنتشره، اعتقد ان هذا النوع من الثغرات أقل خطوره من SQL Injection، هذا النوع من الثغرات يسمح بحقن كود JavaScript في الصفحة.
يأتي البعض و يقول ما هي خطورة مثل هذه الثغره؟ ما هي الخطوره في حالة قام المخترق بحقن كود JavaScript، حسناً جميع الامثله التي نراها في استغلال أو شرح ثغرات XSS لا تتعدى استخدام دالة alert لطباعة كلمه في النافذه المنبثقة التي عهدناها، ولكن الاستغلال الحقيقي لمثل هذه الثغرات يكون بسرقة الكوكيز، و الكوكيز عباره عن ملفات صغيرة تستخدمها المواقع لتخزين معلومات عن مستخدم الحاسوب، مثلاً برامج المنتديات تعتمد اعتماد كبير على الكوكيز لتذكّر المستخدم بدون الاضطرار لتسجيل دخوله في كل مره، حيث تقوم بتخزين كوكيز يحتوي على اسم المستخدم و كلمة المرور، في الحقيقه كلمة المرور هي ما يستهدفها المخترق، حيث يقوم بحقن الصفحه بكود JavaScript من خلال ثغرة XSS، وظيفة هذا الكود استدعاء صفحه من موقع خارجي و تمرير معلومات الكوكيز إلى هذه الصفحه، و بالتالي إرسال معلومات الكوكيز إلى المخترق.
غالباً ما تقوم البرامج بتشفير كلمة المرور عند تخزينها في الكوكيز حتى توفر شئ من الحماية على الاقل و ان لم تكن كامله، كثيراً ما نرى الخبراء في المنتديات المتخصصه ينصحون بعدم السماح بإستخدام شيفرات HTML من خلال المستخدمين – مثلاً عدم السماح بإستخدام HTML في مواضيع المنتديات واستبدالها مع BBCode، و مع ذلك لم تسلم BBCode حيث تم حقنها كذلك بشيفرات JavaScript.
من الناحية البرمجية، أفضل وسيلة لحل هذه المشكلة هي بالطبع معالجة دخل المستخدم بحيث يتم منع شيفرات HTML، وبالتالي منع شيفرات JavaScript.
سكربتات تحميل الملفات و الهاجس الامني
كثير من الخبراء يلقون اللوم على سكربتات تحميل الملفات في عدم أمن الموقع، حسناً يمكنني القول أن هذا نوع آخر من الثغرات الامنيه، تُعرّف سكربتات تحميل الملفات بأنها عباره عن سكربتات تتيح للمستخدمين رفع الملفات من حاسوبهم الشخصي إلى الموقع، الخطوره تكمن في التمكن من رفع الملفات التي تُعتبر برمجيات مكتوبة باحد لغات السكربت مثل html، JSP، ASP، هناك أنواع من السكربتات اصبحت شهيرة و التي يُطلع عليها اسم “Shell”، حقيقة هذه السكربتات أنها توفر واجهه لاستخدام أوامر نُظم يونكس، و لكن يستغلها المخترقين حيث يقوموا برفعها إلى الموقع و استغلالها في الوصول إلى الملفات الحسّاسة.
من الناحية البرمجية، يجب التحقق و بشكل جيّد من امتدادات الملفات التي يتم رفعها، حيث تكون هناك قائمة ضيقة من الامتدادات المسموح برفعها إلى الموقع مثل امتدادات الصور، أو حتى استخدام MIME بجانب التحقق من الامتدادات.
أما واجب مستخدم مثل هذه السكربتات هو عدم السماح بإمتدادات ملفات السكربت مثل html، JSP، ASP، Perl و غيرها.


بارك الله فيك .. معلومات غزيرة ومفيدة ..
بالتوفيق :)
مبدع يالغالي
مشاء الله تبارك الله
ولي طلب بالتوسع في ثغرات
SQL Injection
وطريقة سدها في الـ sql بالذات
مع خالص تقديري لك
احوك
وحيد
جزاك الله خير كفيت ووفيت أستاذنا
لكن أنا أعرف إن ملفات الشل ممكن يأتي إمتدادها .php.rar
يعني بالإمكان إختراق الموقع أو تفعيل ملف الشل بهذا الإمتداد
إعذرني لأني دخلت فترة في الإختراق لكن تركته قبل إحترافه
الحمد لله
جزاك الله خيراً أستاذ..
رغم عدم فهمي الكبير لمثل هذه الأمور إلا أني خرجت بفائدة ليست بالقليلة من هذا المقال
ذكرت في الجزء الأخير من مقالة كلمة (MIME) .. فما هي هذه الكلمة..
جزاك الله خير استاذ MaaSTaaR
على هذه المعلومات المفيدة حول ثغرات المواقع …
Mr-Fahad
السلام عليكم …
اشكركم جميعاً على تعليقاتكم :)
اخي القناص في الحقيقه لا اعلم الكثير عن هذا الامتداد و لكنني سمعت من احد الاصدقاء انه بالفعل يتم استغلاله في امور اختراق المواقع .
اخي المبدع العربي , بخصوص الـ MIME في الحقيقه نظم التشغيل الاخرى و اخص نظام التشغيل “لينكس” لا تهتم للامتدادت , بعكس وندوز الذي يأخذ نوع الملف حسب امتداده , MIME هو اسلوب للتعرف على نوعية الملف بغض النظر عن امتداده و اعتقد ان هذه الطريقه هي الافضل , لانه يمكنني مثلاً انشاء ملف نصّي و اعطاءه امتداد .jpg مثلاً , و في حال التحقق سوف يتم اخذ الامتداد بعين الاعتبار و قد يكون هذا الامتداد وهمي, و الذي يبين لي حقيقة الملف هي MIME حيث تعطي مخرجات مشابهه لـ “Content-Type: text/plain” و في الحقيقه الـ MIME خاصه للبريد و لكن يتم استخدامها بغرض التعرف على نوعية الملف .
بسم الله الرحمن الرحيم ..
موضوع رائع جدا و خفيف يبين اهم اخطر انواع الثغرات المنتشره و يوجد الاخطر منها طبعا لاكن هذا المنتشر ..
اخي القناص .. يقع اللوم على سيرفر الـ Apache في حالة رفع شيل .php.rar .. لان الاباتشي ياخذ الامتداد الاول للملف ( الامتداد الوهمي ) .php و ثم يطبق اكواد الـ PHP
هذه هيه فكرة الملف لاكن مع تطور الاباتشي و نزول الـ Apache 2 اعتقد اختفت هذه المشكله السخيفه
مقالة رائعة لكن لدي إستفسارين
1- أين الخلل في SQL Injection؟ لم أعرف ماهي المشكلة حتى الآن. أرجو أن يكون الشرح لشخص ملم، غير مبرمج.
2- XSS أين يوجد؟
شكرا لك
ما شاء الله عليه يا ماستر والله انك ذيب
شرح كافى ووافى
تقبل التحيات ^_^
فعلا معلومات رائعة …
ملاحظه صغيره رأيت بعض ملفات البي اتش بي شل تعمل بامتداد gif
يعني يتم تحميل ملف بامتداد gif وهو بالاصل ملف بي اتش بي شل ومن ثم يتم الاختراق ..
فليحذر اصحاب مراكز التحميل من هذه النقاط …
مشكور موضوع روعة اخي + شرح مميز
مشكوووور خيا والله كفو
يعطيك العافيه ..!!
معلومات جداً مفيده .. أشكرك يالغالي
إذا ماعليك أمـّر أخي .. أحب تشرح لنا الثغرات ..
مثل ثغرة SQL Injection تعلمنا الحيل المهمـه وما الاكواد المستخدمه غالباً، وحد علمي تحتاج الى برامج تشفير ووووما ألخ، أتمنى تزودنا فيها!
وتشرح لنا أصعب وأسهل الطرق بالمستخدمه بالاغلب
ولمن تنتهي من سرد الدروس وخبرتك المتاحه عن تلك الثغرة، نبدا بثغرة XSS .. وهكذا
أعتّذر عن الاطاله وطلبي!
ولكن أطمح أن أكون من متابعين موقعك، ف كتابتك وتوضحيك للفكره مميز عن بقية المواقع
أخوّك .. :)