½Ã½ºÅÛ ÇØÅ·

 1576, 1/79 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   hsuser
   buffer overflow°ü·Ã Áú¹®

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1693 [º¹»ç]


Çб³ °úÁ¦ Áß ¹öÆÛ¿À¹öÇ÷ο쿡 °üÇÑ Áú¹®ÀÔ´Ï´Ù.
void example()
{
   int val;
   val=getbuf();
   if(val==val2){
       print("buffer overflow");
   }else
       printf("return 1\n");
}

ÀÌ·± Çü½ÄÀÇ ÇÔ¼öÀÔ´Ï´Ù. ½ÇÇàÆÄÀϸ¸ °¡Áö°í ÀÖ±¸¿ä.
getbuf ÇÔ¼ö´Â getsÇÔ¼ö¸¦ »ç¿ëÇØ buf¿¡ ÀúÀåÇϰí retrurn 1À» ÇØÁÝ´Ï´Ù.
gdb¸¦ µ¹·Áº¸´Ï exampleÇÔ¼ö¿¡¼­ val Àº ·¹Áö½ºÅÍ¿¡¸¸ ÀúÀåµÇ°í ½ºÅÿ¡ ÀúÀåµÇÁö ¾Ê´Â °ÍÀ¸·Î º¸ÀÔ´Ï´Ù.
±×·¡¼­ getbufÇÔ¼ö¿¡¼­ returnÀ» val2·Î ¼öÁ¤ÇÏ¿©¾ßÇϴµ¥ ÀÌ ºÎºÐ¿¡¼­ ¸·È÷³×¿ä.
°úÁ¦¿¡ advice³»¿ëÀ¸·Î´Â instructions °ú data¸¦ stack¿¡ ³Ö°í µ¹¸®´Â ¹æ¹ýÀÎ °Í °°½À´Ï´Ù.
±×·±µ¥ 32bit ¿¡¼­ stack frameÀÌ 4byte¾¿ ¾Æ´Ñ°¡¿ä. objdump¸¦ ÀÌ¿ëÇØ assembly code¸¦ º¸¸é
5bytes ¸í·É¾îµµ ÀÖ°í ´õ ±ä °Íµµ ÀÖ´øµ¥ stack frame¿¡ µé¾î°¡µµ ½ÇÇàÀÌ ÀߵǴÂÁö;;
ÀÌ ºÎºÐÀÌ Àß ¸ð¸£°Ú½À´Ï´Ù.¤Ì¤Ì

  Hit : 3448     Date : 2013/06/19 12:13



    
kumi123 Á¤¸®Á» ÇØÁÖ¼¼¿ä.. ¹» ¿øÇϽôÂÁö Àß ¸ð¸£°Ú³×¿ä.

getbuf() ÇÔ¼öµµ °°ÀÌ ¿Ã·ÁÁּžßÁÒ..
2013/06/20  
Silk Á¦°¡ ÀÌÇØÇÑ ¹Ù·Î´Â getbuf¿¡¼­ getbufÇÔ¼öÀÇ Áö¿ªº¯¼öÀÎ buf¿¡ ¿À¹öÇ÷ο츦 ÀÏÀ¸Å³¼ö ÀÖ´Ù´Â ¸» °°°í,,
¿À¹öÇ÷ο츦 ÀÏÀ¸Å°¸é return address¸¦ µ¤À» ¼ö ÀÖÀ¸´Ï±î À̸¦ ÀÌ¿ëÇØ¼­ return value¸¦ ¼öÁ¤Çϰí½Í´Ù..ÀÌ·±°Å °°³×¿ä.

ÀÏ´Ü return value´Â Ç×»ó eax·Î µé¾î°¡°í ÈÄ¿¡ ³ª¿À´Â val1 , val2ÀÇ ºñ±³µµ ¼±¾ðµÈ º¯¼ö°¡ ¾Æ´Ï¶ó,
eax == »ó¼ö(Çйø) ÀÌ·±½ÄÀÏ °Í °°³×¿ä.

±×·¸´Ù¸é getbufÇÔ¼ö¸¦ overflow½ÃÄѼ­ ½©Äڵ带 ½ÇÇàÇÏ°Ô ÇÏ¸é µË´Ï´Ù.

°úÁ¦ÀÇ Á¦ÇÑ»çÇ×ÀÌ ¶Ç ¹¹°¡ ÀÖ´ÂÁö ¸ð¸£°ÚÁö¸¸ DEP³ª ASLR µîÀÌ °É·ÁÀÖÁö ¾Ê´Ù¸é
´Ü¼øÈ÷ ½©Äڵ带 buf¿¡ ¿Ã·Á¼­ ½ÇÇà½ÃŰ´Â°Ô °¡´ÉÇÕ´Ï´Ù.

½©ÄÚµåÀÇ ³»¿ëÀº
mov eax, »ó¼ö(Çйø) ; call [ getbuf ÇÔ¼öÀÇ È£ÃâÀÌ ³¡³­ ¹Ù·Î Á÷ÈÄ instructionÁÖ¼Ò ]
°¡ µÇ¸é µË´Ï´Ù.

½ºÅÃÇÁ·¹ÀÓÀÌ 4¹ÙÀÌÆ®°í objdump·Î º¸´Ï±î 5¹ÙÀÌÆ® ¸í·Éµµ ÀÖ´Ù.. ¸Ó ÀÌ·± ¸»¾¸À» Çϼ̴µ¥.
Á¦ »ý°¢¿£ ÀÌ ºÎºÐÀº ¾ÆÁ÷ ¾î¼Àºí¸®³ª ½Ã½ºÅÛ ¾ÆÅ°ÅØÃÄ¿¡ ´ëÇÑ ÀÌÇØ°¡ ºÎÁ·ÇϽŠ°Í °°½À´Ï´Ù.
2013/06/21  
hsuser ¤Ð_¤ÐÁú¹®ÀÌ ¸ðÈ£Çß´ø Á¡ Á˼ÛÇÕ´Ï´Ù
±×·³¿¡µµ ºÒ±¸ÇÏ°í ´äº¯ °¨»çµå¸³´Ï´Ù :)
½©Äڵ忡 ´ëÇÑ °³³äÀÌ ¾ø¾î¼­ Çì¸à µí Çϳ׿ä
2013/06/21