الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سوال عن shellcode

مغلق
بدأه metbna في 24 أكتوبر 2005 · 8 رد · 1,045 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

:blink: كيف نختبر الشل كود عند تحويله الى باينري ونتاكد انه لايحتوي على قيمه NULL

مع اني مستغرب ليش نحول الملف التنفيذي الى hexadicmal وبعدين نكتب له شل ونحوله باينري مو كنا رجعناه ملف تنفيذي

( في حاله البرنامج الكامل) ليش نحوله باينري وهو تنفيذي من الاساس

مـــــــــــــــــــــــــــــــــــــــــــــــ كـــــــــــــــــــــل احترامي ــــــــــــــــــــــــــــــــــــــع
#2

سؤال ثاني :lol: كثرنا الاسئله

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

مادري ليش حررت الرد

اكيد فيه سؤال

كيف نختبر ثغره BUffer OverFlow

على موقع يطلب مثلا الاسم مكتوب بــــــ phpعلى سبيل المثال (h)

تم تعديل هذه المشاركة بواسطة metbna في 25 أكتوبر 2005 في 01:38

مـــــــــــــــــــــــــــــــــــــــــــــــ كـــــــــــــــــــــل احترامي ــــــــــــــــــــــــــــــــــــــع
#3
اقتباس
كيف نختبر الشل كود عند تحويله الى باينري ونتاكد انه لايحتوي على قيمه NULL

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

global _start


_start:

        jmp short ender

        starter:

        xor eax, eax
        xor ebx, ebx
        xor edx, edx
        xor ecx, ecx

        mov al, 4
        mov bl, 1
        pop ecx
        mov dl, 5
        int 0x80

        xor eax, eax
        mov al, 1
        xor ebx,ebx
        int 0x80

        ender:
        call starter
        db 'hello'

الكود هاذا يقوم بتنظيف الريجستر ebx ,edx ,ecx وبعدها يقوم باخراج عنوان ال write عن طريق استدعاء ال syscall

طبعا انا اتحدث عن ليونكس <_< بعدها يحطط طول ال string و يقوم بلخروج من ال shellcode بعدها يستدعي starter

ويقوم بوضع عنوان ال string في ال stack .

ماعلينا من معنى الكود الان سوف نقوم بتجميع البرنامج .

qnix:~/shellcode> nasm -f elf hello.asm -o hello.o
qnix:~/shellcode> ld hello.o -o hello

قمنا بتجميع الملف ب nasm وبعدها قمنا بستعمال GNU linker .

الان سوف نقوم باخراج ال shellcode عن طريق استعمال objdump وهي اداه تأتي مع مجموعه ادوات GNU Development .

qnix:~/shellcode> objdump -D hello

hello:     file format elf32-i386

Disassembly of section .text:

08048080 <_start>:
 8048080:       eb 19                   jmp    804809b <ender>

08048082 <starter>:
 8048082:       31 c0                   xor    %eax,%eax
 8048084:       31 db                   xor    %ebx,%ebx
 8048086:       31 d2                   xor    %edx,%edx
 8048088:       31 c9                   xor    %ecx,%ecx
 804808a:       b0 04                   mov    $0x4,%al
 804808c:       b3 01                   mov    $0x1,%bl
 804808e:       59                      pop    %ecx
 804808f:       b2 05                   mov    $0x5,%dl
 8048091:       cd 80                   int    $0x80
 8048093:       31 c0                   xor    %eax,%eax
 8048095:       b0 01                   mov    $0x1,%al
 8048097:       31 db                   xor    %ebx,%ebx
 8048099:       cd 80                   int    $0x80

0804809b <ender>:
 804809b:       e8 e2 ff ff ff          call   8048082 <starter>
 80480a0:       68 65 6c 6c 6f          push   $0x6f6c6c65

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

0xeb 0x19 0x31 0xc0 0x31 0xdb 0x31 0xd2 0x31 0xc9 0xb0 0x04 0xb3 0x01 0x59 0xb2 0x05 0xcd
0x80 0x31 0xc0 0xb0 0x01 0x31 0xdb 0xcd 0x80 0xe8 0xe2 0xff 0xff 0xff 0x68 0x65 0x6c 0x6c 0x6f

مثلا هنا

 8048080:       eb 19                   jmp    804809b <ender>

نخرج eb و 19 ولو وجد في الكود بلكامل اي قيمه NULL تقوم بحذفها

الان عشان نقوم بتشغيل الكود عشان نشوف لو بيشتغل معانا او لا نظيفه في كود اما تكتبه ب C او باي لغه ثانيه

تجبها وبيصير المثال بهاذا الشكل .

helloqnix:~/shellcode> cat > shellcode-test.c
char code[] =
              "\xeb\x19\x31\xc0\x31\xdb\x31\xd2\x31\xc9\xb0\x04\xb3\x01\x59\xb2\x05\xcd"\
              "\x80\x31\xc0\xb0\x01\x31\xdb\xcd\x80\xe8\xe2\xff\xff\xff\x68\x65\x6c\x6c\x6f";

int main(int argc, char **argv)
{
        int (*func)();
        func = (int (*)()) code;
        (int)(*func)();
}

qnix:~/shellcode> gcc -o shellcode-test shellcode-test.c
qnix:~/shellcode> ./shellcode-test
hello

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

استعمال gcc وشغلته وطبع لي كلمه hello .

اقتباس
مع اني مستغرب ليش نحول الملف التنفيذي الى hexadicmal

لكي يعمل على شكل تعليمات وارقام فلن تقبل الجهاز لغه مثل c++ او asm فهي تتحول الى ارقام يفهمها الجهاز .

اقتباس
( في حاله البرنامج الكامل) ليش نحوله باينري وهو تنفيذي من الاساس

مافهمت قصدك عدل . بس لما نبغا نستخرج الشيل كود لازم نكتب الكود ب asm وبعدها نجمعه وبعدها نستخرج الشيل كود .

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

اكيد يهم خاصه في ثغرات ال buffer overflow لنفترظ مثلا ان المساحه ماقبل الكتابه على الريجستري eip هي 200

والشيل كود مثلا ياخذ 700 . فكيف ستحدد عنوان الرجوع والشيل كود هو اساسا كاتب على عنوان الرجوع ؟

لكن مثلا في ثغرات تقدر تعمل فيها هاذي الحركه وفي انواع كثيره مثل RET to eax , RET to pop ومثلا

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

ال libc ( اتحدث عن ليونكس )

اقتباس
كيف نختبر ثغره BUffer OverFlow

على موقع يطلب مثلا الاسم مكتوب بــــــ phpعلى سبيل المثال

هل تقصد ان ملف ال php يستدعي ملف قابل للتشغيل مثلا ...؟

ام تقصد ان السكربت نفسه فيه buffer overflow :lol:

#5

شكرا على الرد الرائع

مـــــــــــــــــــــــــــــــــــــــــــــــ كـــــــــــــــــــــل احترامي ــــــــــــــــــــــــــــــــــــــع
#6

الاخ Qnix لدي سؤال وهو في الخطوط العريضه في ثغرات Buffer Overflow

عند كتابه shellcode

ماذا نراعي في كتابه البرنامج المكتوب

هل البرنامج الهدف الرئيسي منه هو اعطاء صلاحيات (محدد الهدف فتح ثغره )ثم يتم استغلاها في الانظمه المصابه عن طريق البرامج المتاحه للاتصال في الانترنت

او ان البرنامج يجب ان يكون برنامج كامل الثغرة + كتابه برنامج الاتصال مع السيرفر مثلا

مـــــــــــــــــــــــــــــــــــــــــــــــ كـــــــــــــــــــــل احترامي ــــــــــــــــــــــــــــــــــــــع
#7
اقتباس
ماذا نراعي في كتابه البرنامج المكتوب

كتابه الشيل كود بشكل صحيح برمجيا وعند تحويله تقوم بحذف NULLS اذا احتاج الامر لحذفه .

وايضا نراعي الحجم هاذا لو كنت تحتاج الحجم في شئ محدد او لتقوم بعمل محدد .

اقتباس
هل البرنامج الهدف الرئيسي منه هو اعطاء صلاحيا

لك راحه الكتابه فبأمكانك كتابه اي شئ اذا امكن طبعا فتستطيع كتابه شيل كود يطبع كلمه وشيل كود ينشئ folder

واخر يقوم ب... و..و... إلخ

اقتباس
او ان البرنامج يجب ان يكون برنامج كامل الثغرة + كتابه برنامج الاتصال مع السيرفر مث

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

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

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

البرنامج والنظام إلخ .

( ارجو ان تقوم بتوضيح أسألتك مره اخرى < _< )

#8

ماشاء الله عليك اخي Qnix

في الحقيقه وجدت انك سحبتني الى linux بقوة

ولان تكون علاقتي مع linux

xor eax, eax
       mov al, 1
       xor ebx,ebx
       int 0x80
 :lol:
مـــــــــــــــــــــــــــــــــــــــــــــــ كـــــــــــــــــــــل احترامي ــــــــــــــــــــــــــــــــــــــع
#9

`echo hello world` :rolleyes:

تم تعديل هذه المشاركة بواسطة Qnix في 2 نوفمبر 2005 في 06:23

هذا الموضوع مغلق.

مواضيع مشابهة