½Ã½ºÅÛ ÇØÅ·

 1576, 1/79 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   pk920207
   ±Ã±ÝÇÕ´Ï´Ù. bufferoverflow °ø°ÝÁú¹® (Áú¹® 2°³)

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


(°ø°ÝÀÇ ¹æ¹ýÀÌ °¢°¢ Ʋ¸±¼ö ÀÖÀ¸´Ï Á¦°¡ »ç¿ëÇÏ´Â °ø°ÝÀÇ ¹æ½ÄÀ» ¾à°£ ¼³¸íµå¸®°Ú½À´Ï´Ù.)

1¹øÁú¹® : NOP À» ÀÌ¿ëÇÑ bufferoverflow

strcpy¸¦ ÅëÇØ ÀÔ·ÂÇÏ´Â buffer¿¡ NOP°ú ½©Äڵ带 ³Ö¾îÁØ´Ù.
±×·¯¸é buffer´Â \x90\x90\x90\x90\x90...shellcode /ebp /ret ÀÇ ÇüŰ¡ µÈ´Ù.
¿©±â¼­ retÀÇ °ªÀ» ¹öÆÛ¿À¹öÇ÷οì·Î º¯Á¶ÇØ \x90ÀÌ µé¾î°¡ÀÖ´Â °÷¿¡ ÁÖ¼Ò¸¦ ÀÔ·ÂÇØÁÖ¸é
ÇÁ·Î±×·¥Àº strcpy¸¦ ÁøÇàÇÑ ÈÄ retÀÇ ÁÖ¼Ò¿¡ µû¶ó \x90ÀÌ ¸¹ÀÌ µé¾î°¡ Àִ°÷ÀÇ ÇÑ À§Ä¡·Î À̵¿ÇϰԵǰí
NOPÀº ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â ¸í·É¾îÀ̹ǷΠÇѹÙÀÌÆ®¾¿ °è¼Ó À̵¿ÇØ ½©Äڵ带 ½ÇÇàÇÏ°Ô µÈ´Ù.

¿©±â¼­ ½©Äڵ尡 ÀÖ´Â °÷ÀÇ ÁÖ¼Ò¸¦ ¹Ù·Î ¾Ë¾Æ³½´Ù¸é ´õ¾øÀÌ ÁÁ°ÚÁö¸¸ ã±â°¡ ¾î·Æ´Ù°í µé¾ú½À´Ï´Ù.
±×¸®ÇÏ¿©
int sp()
{__asm__("movl %esp,%eax");}
void main()
{
int esp();
esp=sp();
printf("%p\n",esp);
}
¸¦ ÅëÇØ espÀÇ °ªÀ» ¾Ë¾Æ³»¾î °ø°Ý½Ã º¯Á¶ÇÒ ret¿¡ ÀÌ ÁÖ¼Ò°ªÀ» ³Ö¾îÁÖ°í ¿©·¯¹ø °ø°ÝÇÏ¸é ¼º°øÇÏ°Ô µÈ´Ù´Â °Çµ¥¿ä.
Áú¹®ÀÌ
À§ÀÇ ÄÚµå´Â º¯Á¶ÇÑ retÀÌ NOP»çÀÌ¿¡ °ÉÃÄÁö°Ô Çϱâ À§ÇØ ÁÖ¼Ò°ªÀ» ¾Ë¾Æ³»·Á°í ¸¸µç ÄÚµåÀε¥
¿Ö espÀÇ °ªÀ» »ç¿ëÇϳª¿ä? ¹«½¼ °ü·ÃÀÌ ÀÖ³ª¿ä?


2¹øÁú¹® : ȯ°æº¯¼ö ¹öÆÛ¿À¹öÇÃ·Î¿ì ±â¹ý¿¡¼­
°ø°Ý¿¡ °üÇÑ ¼³¸íÀ¸·Î´Â
export attack=`perl -e 'print "\x90"x100,"shellcode";'`
À§¿Í °°ÀÌ attackÀ̶ó´Â ȯ°æº¯¼ö¿¡ ½©Äڵ带 ³Ö°í.
getenv(); ÇÔ¼ö¸¦ »ç¿ëÇÑ Äڵ带 ÅëÇØ attackÀÇ ÁÖ¼Ò¸¦ ¾Ë¾Æ³À´Ï´Ù.
±×¸®°í (¿¹½Ã)
./bufferoverflow `perl -e 'print "a"x23,"\xaa\xbb\xcc\xdd";'`
(bufferoverflow = Ãë¾àÇÁ·Î±×·¥, 23=¿¹½Ã·Î Á¦°øÇÏ´Â ¹öÆÛ.., \xaa\xbb\xcc\xdd=attackÀÇ ÁÖ¼Ò°ª(¿¹½Ã))
¸¦ ÅëÇØ ret°ªÀ» attack ȯ°æº¯¼ö·Î µ¹·ÁÁÖ¹Ç·Î½á ±ÇÇÑÀ» ȹµæÇÏ´Â °ø°ÝÀÔ´Ï´Ù.

¿©±â¼­ ÀÌÇØ ¾È°¡´Â ºÎºÐÀÌ
export attack=`perl -e 'print "\x90"x100,"shellcode";'` ¿¡¼­
"\x90"x100 À̺κРÀÔ´Ï´Ù.  NOPÀ» ¿Ö 100°³³ª ³Ö¾îÁÖ´Â °Ç°¡¿ä?

´äº¯ ºÎʵ右´Ï´Ù. Á¤¸» ¾Ë°í½Í½À´Ï´Ù.

  Hit : 5112     Date : 2013/04/29 08:39



    
potatos À½.. ù ¹øÂ° Áú¹®Àº Àúµµ ¿¹Àü¿¡ ¹è¿ï ‹š ÀÌÇØ°¡ À߾ȵǴ ºÎºÐÀ̾ú´Âµ¥ ¶È°°Àº ºÐÀÌ °è½Ã´Â ±º¿ä..¤»¤»
esp°ªÀ» ³Ö¾îÁÖ´Â ÀÌÀ¯´Â esp°¡ ½ºÅÃÀÇ ¾î´À ºÎºÐÀ» °¡¸®Å°°í Àִµ¥ ±× ½ºÅÃÀ» °¡¸£Å°´Â ³ðÀ» Àû¾îÁÖ´Â °Ì´Ï´Ù.
¿îÀÌ ÁÁÀ¸¸é nop½ä¸ÅŸ°í ¹Ù·Î ½©À» ½ÇÇàÇϰÚÁö¿ä.

µÎ¹ø¤Š´Â nopÀº ¸¹ÀÌ ³ÑÀ»¼ö·Ï ÁÁ½À´Ï´Ù.
¾²·¹±â°ªÀÌ¿©¼­ ½ÇÇàµÇµµ ÁßÁöµÇÁö¾Ê°í ¹Ù·Î ´ÙÀ½ nopÀ» ½ÇÇà½ÃŰ¸é¼­ ½©Äڵ带 ¸¸³ª¸é ½©À» ½ÇÇàÇÕ´Ï´Ù.
2013/05/01  
pjm2108 esp°¡ ½ºÅÃÀÇ °¡Àå ¾Æ·§ºÎºÐÀ» °¡¸®Å°°í Àֱ⠶§¹®ÀÔ´Ï´Ù. ¾î¼Àºí¸®·Î °üÂûÇÏ¸é ½±°Ô ÀÌÇØ µË´Ï´Ù.
ebp´Â ½ºÅÃÀÇ ½ÃÀۺκÐ, esp´Â ½ºÅÃÀÇ ³¡ºÎºÐÀ» ³ªÅ¸³»´Â ·¹Áö½ºÅͶó°í ¸»ÇÏ°í ½ÃÀÛÇսôÙ.

push ebp
mov ebp, esp
sub esp, 40h
..Áß·«
add esp, 40h
mov esp, ebp
pop ebp
ret

ÀÌ°Ô ÇÔ¼ö¸¦ call Çϸé À̵¿ÇÑ ·çƾÀÇ ±âº» ÇüÅÂÀÔ´Ï´Ù. stdcallÀÌ³Ä fastcallÀÌ³Ä ¹¹ ÀÌ·±°Å¿¡ µû¶ó ´Þ¶óÁø´Ù´Âµ¥, ÀÏ´ÜÀº Àú·± ÇüÅÂÀ̱¸¿ä. sub esp, 40h¸¦ ´«¿©°Ü º¸½Ã¸é µË´Ï´Ù. ÀÌ°Ç ½ºÅÃÀÇ Å©±â°¡ 40h ¶ó´Â ÀǹÌÀÔ´Ï´Ù.

¿ø·¡ esp°¡ ebp¿´À½À» ±â¾ïÇϸé, esp¿¡¼­ -40h ÇßÀ¸´Ï, ½ºÅÃÀÇ °¡Àå ¾Æ·§ºÎºÐÀ» °¡¸®Å°°í ÀÖ´Ù´Â °ÍÀÌ ÀÌÇØµÇÁÒ?

ÇѸ¶µð·Î ¸»ÇÏ¸é ½ºÅÃÀº [esp ---------<------- ebp][ret] À̶ó°í º¸½Ã¸é µË´Ï´Ù.
¹æÇâÀÌ ÀÌ»óÇÒ ¼ö Àִµ¥, ¸¸¾à int a; ¸¦ Çϼż­ Áö¿ªº¯¼ö¸¦ ¼±¾ðÇϸé ... ¾Æ ½ºÅÿ¡ ´ëÇÑ°Ç ²÷À»²²¿ä.
¾Æ¹«Æ° esp°¡ ½ºÅÃÀÇ ¸¶Áö¸· ºÎºÐÀ» °¡¸®Å°°í Àֱ⠶§¹®¿¡ À̸¦ ÅëÇØ offsetÀ» ÃßÃøÇϰڴÙ! ¶ó´Â °Ì´Ï´Ù.
À§ÀÇ 40h´Â ¾î¶² Áö¿ªº¯¼öµµ ¼±¾ðµÇÁö ¾Ê¾ÒÀ» ¶§ ÀÔ´Ï´Ù. ¸¸¾à int Çü Áö¿ªº¯¼ö°¡ Çϳª Ãß°¡µÇ¸é -44h ÇϰÚÁÒ..
2013/05/04