| cd80 |
Áú¹® À§¿¡ ¹öÆÛ¿À¹öÇ÷ο츦 Á¤ÀÇÇϽźκÐÀÌ ¾à°£ ¾Ö¸ÅÇѰͰ°¾Æ ´Ù½Ã ½áº¸ÀÚ¸é
¹öÆÛ¿À¹öÇ÷οì´Â ¸Þ¸ð¸®ÀÇ º¹»ç°¡ ÀϾ ¶§ º¹»çÇÑ µ¥ÀÌÅ͸¦ ½á³Ö´Â ¿µ¿ªÀ» ³Ñ¾î¼± Å©±âÀÇ µ¥ÀÌÅͰ¡ º¹»çµÉ°æ¿ì ÀϾ´Ï´Ù
½ºÅùöÆÛ¿À¹öÇ÷οìÀÇ °æ¿ì ½ºÅÿ¡ Á¸ÀçÇÏ´Â º¯¼öµéÀÇ µ¥ÀÌÅ͸¦ µ¤¾î¾º¿ì°Å³ª ¸®ÅϾîµå·¹½º¸¦ º¯Á¶ÇÒ ¼ö ÀÖ°í
¸®ÅϾîµå·¹½º¸¦ º¯Á¶ÇÔÀ¸·Î½á ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀ» Á¶ÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù
À̸¦ ÀÌ¿ëÇØ ÇöÀç ½ÇÇàµÇ°í ÀÖ´Â ÇÁ·Î±×·¥ÀÇ ±ÇÇÑÀ» ȹµæÇϴ°ÍÀ̱¸¿ä
ftz level11À» ¿¹·Î µé¾îº¸°Ú½À´Ï´Ù
int main(int argc, char **argv){
,,,,,,,,char buf[256];
,,,,,,,,strcpy(buf, argv[1]);
,,,,,,,,return 0;
}
ÀÌ ÇÁ·Î±×·¥ÀÇ ½ÇÇà±ÇÇÑÀ» Á¦¾îÇÒ ¼ö ÀÖ´Â ÀÌÀ¯´Â
strcpy¿¡ ÀÇÇØ buf¿¡ argv[1]ÀÌ Á¦ÇѾøÀÌ µ¥ÀÌÅͰ¡ µé¾î°¡
mainÇÔ¼ö¸¦ call ÇÒ¶§ ½ºÅÿ¡ µé¾î°£ ¸®ÅϾîµå·¹½º°¡ µ¤¾î¾º¿öÁö°í
mainÇÔ¼ö ¸¶Áö¸· ret¸í·É¿¡¼ µ¤¾î¾º¿öÁø ¸®ÅϾîµå·¹½º°¡ eip·Î µé¾î°¡±â ¶§¹®ÀÔ´Ï´Ù
µû¶ó¼ mainÇÔ¼öÀÇ ½ºÅÃÇÁ·¹ÀÓ ·¹À̾ƿôÀº ¾Æ·¡Ã³·³ »ý°å½À´Ï´Ù
ret
sfp
-------------- <- ebp
|,,,,,,,,,f,,,,,,,,,,|
|,,,,,,,,,u,,,,,,,,,|
|,,,,,,,,,b,,,,,,,,,|
-------------- <- esp
strcpy¿¡ ÀÇÇØ bufÀÇ Ã³À½ºÎÅÍ µ¥ÀÌÅͰ¡ µé¾î°¡°í
buf[256] + sfp[4] + ret[4] = 264¹ÙÀÌÆ®¸¦ argv[1]¿¡ ³Ö°ÔµÇ¸é
strcpy·Î buf[256]¿¡ 264¹ÙÀÌÆ®°¡ µé¾î°¡°Ô µÇ¾î ¸®ÅϾîµå·¹½º°¡ µ¤¾î¾º¿öÁö°ÔµË´Ï´Ù
1. ÇÁ·Î¼¼¼ °è¿¿¡ µû¶ó ´Ù¸£Áö¸¸ ÀÎÅÚ ÇÁ·Î¼¼¼´Â ¸®Æ²¿£µð¾È ¹æ½ÄÀ» »ç¿ëÇÕ´Ï´Ù
2. ´ç¿¬ÇÑ ¸»ÀÌÁö¸¸ ¹öÆÛÀÇ Å©±â¸¦ ³Ñ¾î¼´Â µ¥ÀÌÅ͸¦ ³Ö¾îÁÖ½Ã¸é µË´Ï´Ù
gdb µîÀ¸·Î È®ÀÎÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù
3. ½©ÄÚµå´Â ½©À» ½ÇÇàÇÏ´Â ÄÚµå¶ó ÇØ¼ ½©ÄÚµå¶ó ºÎ¸¨´Ï´Ù
º¸Åë ½Ã½ºÅÛÄÝÀ» ÀÌ¿ëÇϰí
¾î¼Àºí¸®¾î·Î ÀÛ¼ºÇϼŵµ µÇ°í C·Î ÀÛ¼ºÇؼ ¾µ¼öÀÖ´Â ÇüÅ·Π¸¸µå¼ÅµµµË´Ï´Ù
½©ÄÚµå ÀÛ¼ºÀº ¾î¼Àºí¸®¾î·Î ÇÏ½Ã´Â°Ô ´õ ÆíÇÕ´Ï´Ù
¿¡±×½©Àº ½©Äڵ带 ÀÛ¼ºÇØÁÖ´Â ÇÁ·Î±×·¥ÀÌ ¾Æ´Ï¶ó
ȯ°æº¯¼ö¿¡ ½©Äڵ带 ³Ö°í ȯ°æº¯¼ö»ó¿¡¼ ½©Äڵ尡 À§Ä¡ÇÏ´Â ÁÖ¼Ò¸¦ ¾Ë·ÁÁÖ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù |
2014/02/01 |
|