JAAS

طريقة إحترافية لكتابة shellcode

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

مرحبا ,,,

وجدت أداة وطريقة جديدة لكتابة shellcode بطريقة سريعة وإحترافية

بالإضافة إلى أنها تبين لك ما معنى shellcode

-

لنفرض أنك تريد دمج برنامج صغير بداخل برنامجك , أو أنك تريد حقن فايروس في الملفات

أو أنك تريد إستغلال ثغرة - في كل هذة الأمور فإنك تحتاج الشفرة الثنائية 01 للكود الذي تريد إستخدامة

إلى يومنا هذا فإن الطريقة المستخدمة هي كتابة الرموز للكود كامل بإستخدام الهكس, وهي طريقة متعبة طبعاً

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

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

قبل كل شيء نكتب الكود الذي نريد تنفيذة ( أو البرنامج الذي نريد حقنة ) بأي لغة

بعد ذلك نفتح الملف بواسطة olly وننسخ كود الإسمبلي للبرنامج إلى محرر النصوص بشكل عادي

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

الأدوات الموجودة في الملف المرفق هي NASM.EXE و ShellCode.exe

-

لنفرض أن كود الأوامر التي نريد إستخدامها بهذا الشكل

BITS 32
push ebp
mov ebp,esp
push ebx
mov  byte [ebp-4],63h
mov  byte [ebp-3],6Dh
mov  byte [ebp-2],64h
mov  byte [ebp-1],0
push 5
lea  eax,[ebp-4]
push eax
mov eax,0x7c86114d
call eax
push 1
mov eax,0x7c86114d

بعد أن قمنا بنسخ الكود من olly إلى محرر النصوص

إحفظ الملف النصي بإسم test.asm

ثم قم بترجمتة بإستخدام nams تجدة في الملف المرفق

الترجمة بهذة الطريقة

nasm -s -fbin test.asm

سينتج لك الملف TEST

قم بتشغيل أداة صناعة shellcode ( قد تظهر لك رموز غريبة , أعتقد أنها رموز صينية وليست خطأ )

chack007.gif

في مثالنا نغير إسم الملف إلى test بهذة الطريقة

shellcode TEST

لينتج لك في النهاية شفرة shellcode وهي عبارة عن ملف بإسم TheCode.txt

إفتح الملف لتجد shellcode قم بنسخة وإضافة إلى مترجم السي أو إلى أي مترجم

وقم بإستخدامة بهذة الطريقة

chack010.gif

ملاحظة : إذا أردت shellcode لملف exe كامل ( يعني تريد حقن ملف )

تكتب الأمر

shellcode file.exe

لينتج لك shellcode للملف التنفيذي

وبالتوفيق

sscc.zip

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

شارك هذا الرد


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

السلام عليكم

من المحتمل ان تجد فى الشيل كود الNUll يعنى الالصفر بالمانى لو وجد

لن يعمل الشيل كود هذه الطريقه لمعرفت الnull قم بعمل disassembly او الolly للشيل كود

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

1234500 هنا تكمن الخطوره فى اخر بايت وهما 00

لينا عوده فى طريقه حلها لانى مش فى المنزل

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

0

شارك هذا الرد


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

لاعتقد انها احترافيه :) فانها لا فائده منها ابدا وتقلل الاحتراف من وجه نظري

فانا ارى العمل اليدوي الكامل :) احسن لانك راح تحس متعوب فيه والشل الي

ينكتب بيدك احسن من اوتو يطلعه لك :) عشان تعرف بلضبط وش الي تسويه ( وجه نظر )

على كل حال شكرا على البرنامج الجميل :rolleyes:

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

شارك هذا الرد


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

شكر يا jaas على تلك الاداه السهله

وفقك الله :)

0

شارك هذا الرد


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

:o !

موضوع قيم جدا ,فمن يريد البدا ولا يجد الطريق يستطيع البدا من هنا...

فانا مثلا قراه مره مقال بالانجليزي عن كيفه كتابه ال Shellcode لكني لم اتقنها بشكل المطلوب...

وهذه الطريقه بغد النظر اذا كانت سهله جدا او لا تفي بالغرض لاشياء كثيره... ;)

تقبل تحياتي ,,

0

شارك هذا الرد


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

أرجوا أن يكون هناك شرح أكبر لموضوع المؤشرات و طرق التعامل معها مع الـدوال

لانى لم أفهم

void (* funct)()

0

شارك هذا الرد


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

طيب يا jaas ، موضوع الشيل كود ده محيرنى أصلا ومش عارف ما الفائده منه الصراحه ،،

مما يتبين من المثال المرفق أعلاه ، أن البرنامج أخذ سطور الأسمبلى وحولها إلى سطور بلغة الأله ShellCode ومن ثم وضعها داخل function in C بها array of bytes تحتوى على الكود القابل للتشغيل ،،

الداله MAIN الأن تقبل مؤشر لداله فى الذاكره ، تأخذ المؤشر وتجعله يشير إلى كود الأسمبلى الذى قمنا بكتابته بأعلى ، ومن ثم ضاعت الداله الرئيسيه حيث أنه لا يوجد ما يشير إليها الأن ؟ صح ؟

أيضا أتذكر من معرفتى القليليه بالسى أنه يمكن كتابة سطور أسمبلى مباشره داخل السى تحت asm__ ، فما فائدة كتابته وتحويله بهذه الصوره ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
أرجوا أن يكون هناك شرح أكبر لموضوع المؤشرات و طرق التعامل معها مع الـدوال

لانى لم أفهم

void (* funct)()

السطر عبارة عن تعريف مؤشر من نوع void

والهدف لكي نجعلة يؤشر على شفرة ال shellcode

وبعد ذلك نتصل بالكود

-------

أخي أحمد عز ؟! هذا المثال لخبطك لأنة ليس في محلة

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

لأنك كما ذكرت لغة السي تدعم الكتابة بلغة الإسمبلي

ولكن مفهوم الشل كود هو أننا نريد تنفيذ كود في برنامج خارجي ؟! ولذلك نكتب بالثنائي

لأننا إذا كتبناة بلغة الإسمبلي في هذة الحالة يلزمنا مترجم للغة لكي نحولة إلى ثنائي

معنى الكلام أن shellcode إضافة للملف التنفيذي exe بعد الترجمة

أعتقد أنها وضحت الفكرة

-

0

شارك هذا الرد


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

اخي ,,هل يتم النسخ من برنامج Olly بالضغط مثلا على Ctrl+A وثم نسخ ؟ الاني فتحت برنامج 8.5k وقمت بنسخه الى ملف نصي ,لكن عمليه التحويل اي بملف nasm فشلت بجميع الاسطر التي بالملف... فهل يجود طريقه معنيه لنسخ الكود ؟

شكرا,

تحياتي

0

شارك هذا الرد


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

لا ياأخي , طريقة نسخ الشفرة بالهكس

-

من خلال القائمة Binary

بعد ذلك Binary copy

وكذلك لصق كود خارجي بنفس الطريقة Binary paste

-

0

شارك هذا الرد


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

وضحت الأن :) ،

0

شارك هذا الرد


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

في نظام linux ....

الكود السمتخدم -- sh.asm --

BITS 32
global _start

_start:
 push byte 0xb
 pop eax
 cdq

 push edx
 push word 0x632d
 mov edi, esp

 push dword 0x0068732f
 push dword 0x6e69622f
 mov ebx, esp

 push edx
 call getstr
db "echo Qnix", 0x00
getstr:
 push edi
 push ebx
 mov ecx, esp
 int 0x80

[[email protected] shellcodes]# nasm -o sh sh.asm
[[email protected] shellcodes]# ./s-proc -p sh


char shellcode[] =
       "\x6a\x0b\x58\x99\x52\x66\x68\x2d\x63\x89\xe7\x68\x2f\x73\x68"
       "\x00\x68\x2f\x62\x69\x6e\x89\xe3\x52\xe8\x0a\x00\x00\x00\x65"
       "\x63\x68\x6f\x20\x51\x6e\x69\x78\x00\x57\x53\x89\xe1\xcd\x80";

و كود ملف s-proc للتحويل او لتشغيل ال shellcode

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>


static void
croak(const char *msg) {
   fprintf(stderr, "%s\n", msg);
   fflush(stderr);
}

static void
usage(const char *prgnam) {
   fprintf(stderr, "\nExecute code : %s -e <file-containing-shellcode>\n", prgnam);
   fprintf(stderr, "Convert code : %s -p <file-containing-shellcode> \n\n", prgnam);
   fflush(stderr);
   exit(1);
}

static void
barf(const char *msg) {
   perror(msg);
   exit(1);
}



int
main(int argc, char **argv) {
   FILE        *fp;
   void        *code;
   int         arg;
   int         i;
   int         l;
   int     m = 15;

   struct stat sbuf;
   long        flen;  
   void        (*fptr)(void);

   if(argc < 3) usage(argv[0]);
   if(stat(argv[2], &sbuf)) barf("failed to stat file");
   flen = (long) sbuf.st_size;
   if(!(code = malloc(flen))) barf("failed to grab required memeory");
   if(!(fp = fopen(argv[2], "rb"))) barf("failed to open file");
   if(fread(code, 1, flen, fp) != flen) barf("failed to slurp file");
   if(fclose(fp)) barf("failed to close file");
   
   while ((arg = getopt (argc, argv, "e:p:")) != -1){
     switch (arg){
     case 'e':
       croak("Calling code ...");
       fptr = (void (*)(void)) code;
       (*fptr)();
       break;
     case 'p':      
       printf("\n\nchar shellcode[] =\n");
       l = m;
       for(i = 0; i < flen; ++i) {
         if(l >= m) {
           if(i) printf("\"\n");
           printf( "\t\"");
           l = 0;
         }
         ++l;
         printf("\\x%02x", ((unsigned char *)code)[i]);
       }
       printf("\";\n\n\n");
       
       break;
     default :      
       usage(argv[0]);
     }
   }
   
   
   return 0;
}

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

شارك هذا الرد


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

اليلام عليكم ,,

لدي سؤال قد فكرته به طويلا ,,

لنفرض ان لدي كود يستغل ثغره بملف معين لتنفيذ شل معين (اقصد Shellcode) ,, هل من ناحيه منطقيه او من جانب قوانين البرمجه يمكن تبديل هذا الشل ,بشل كتبته انا ؟

او ان هذا الكود يكون متكاملا مع اطرافه اي متعلق ببعضوا واذا غيرت الشل فقط يتعطل ؟؟

ارجوا التوضيح والمساعده ...

اشكركم

تحياتي ,,

0

شارك هذا الرد


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

نعم ممكن تغييره على حسب طريقه عمل الاستغلال للثغره ... فممكن ان للشيل مساحه معينه للعمل فيها لايمكن ان تقوم بادخال مساحه اكبر منها ...

او ان للشيل طريقه عمل محدده لها دخل باستغلال الخطء للبرنامج نفسه ... الكثير والكثير ... فهو يعتمد على الخطء وطريقه كتابه الاستغلال في نفس الوقت

0

شارك هذا الرد


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

:( قمت بعمل برنامج بواسطه masm32 واستخدمت برنامج shellcode وحولت البرنامج كامل وقارنت النتيجه مع برنامج HEXA editor

وكان هناك اختلاف كبير في منتصف الملف .....................

هل هناك خطا مع قارنته ايضا مع برنامج يحول وكان هناك اختلاف

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
هل هناك خطا مع قارنته ايضا مع برنامج يحول وكان هناك اختلاف

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

24_10_05_03_24_59_1130192699img.gif

تجدها

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

-

0

شارك هذا الرد


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

شكرا اخ jaas ابي اسميك Mr shellcode

0

شارك هذا الرد


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

اشكرك اخي Qnix على ردك ...

ولقد فهمت قصدك , لكن لنفرض اني وجدت كود مع الشل المطلوب بداخله , ما هيه الطرق لتغير هذه الشل ؟ اي اقصد هل يوجد طريقه ما غير تحليل الثغره وتحليل الشل وكتابه شل اجديد ...

تقبل تحياتي ,,

0

شارك هذا الرد


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

هناك نقطة مهمة جدًا في هذا الموضوع ، وهي كيف تمت كتابة اللغة الصينية في ال command prompt ؟

http://www.arabteam2000.com/picload/Files/chack007.gif

محاولاتي السابقة في كتابة العربية في ال command prompt جميعها فشلت.

0

شارك هذا الرد


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

ما هي محاولاتك السابقة؟

0

شارك هذا الرد


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

استخدام wcout بدلاً من cout ،

محاولة تغيير ال codepage إلي واحد عربي

محاولة وضع خط عربي من النوع fixed في الريغستري

HLM\SOFTWARE\Microsoft\Windows Nt\Console\TrueTypeFont

حتي محاولة الوصول إلى video buffer الخاص بالكونسول حتي أرسم الحروف بنفسي

جميعها فشلت.

0

شارك هذا الرد


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

نقّح البرنامج لتعرف خباياه .. هذا اذا كنت بالفعل استنفذت الطرق الشرعية :wink:

0

شارك هذا الرد


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

ممممممممم . البرنامج ليس به شئ غير طبيعي ، لأنه عندما شغلت shellcode.exe عندي لم تظهر الحروف الصينية بشكل صحيح ، مثلها مثل العربية ، مع العلم أنني دائمًا أثبت الخطوط العربية والأسيوية.

حسنًا ، المسألة الآن هي في الخط الذي يستخدمه الكونسول ، لتغيير خط الكونسول نحتاج لخط fixed - monospace يدعم العربية ، وهو ما لم أستطع إيجاده ، الخطوط ال fixed التي وجدتها تعمل في كونسول لينوكس ولا تعمل في كونسول ويندوز.

0

شارك هذا الرد


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

موضوع راقي

0

شارك هذا الرد


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

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

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



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

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

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