http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_linux&no=3943 [º¹»ç]
ÇöÀç Á¦ ³ëÆ®ºÏ¿¡´Â ¿ìºÐÅõ 10.10ÀÌ ±ò·Á ÀÖ½À´Ï´Ù.
¿À¹ö ÇÃ·Î¿ì ¸¦ °øºÎÇÏ´Ù°¡ Äڵ带 ½ÇÇàÇÏ¿´´õ´Ï ¼¼±×¸àÅ×ÀÌ¼Ç ÆúÆ®°¡ ¾Æ´Ñ ´Ù¸¥ ¿¡·¯¸Þ½ÃÁö°¡ ³ª¿Ô½À´Ï´Ù.
ÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù. (º» ÄÚµå´Â 'ÇØÅ· °ø°ÝÀÇ ¿¹¼ú' ¼¼ÄÁµå ¿¡µð¼ÇÀÇ auth_overflow2.cÀÔ´Ï´Ù.)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check_authentication(char* password) {
char password_buffer[16];
int auth_flag = 0;
strcpy(password_buffer, password);
if(strcmp(password_buffer,"brilling")==0)
auth_flag= 1;
if(strcmp(password_buffer,"outgrade")==0)
auth_flag = 1;
return auth_flag;
}
int main(int argc,char* argv[]){
if(argc <2) {
printf("»ç¿ë¹ý: %s<Æнº¿öµå>\n", argv[0]);
exit(0);
}
if(check_authentication(argv[1])){
printf("\n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
printf(" Á¢±Ù Çã¿ë.\n");
printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
} else {
printf("\nÁ¢±ÙºÒ°¡.\n");
}
}
À§ ÄÚµå´Â Ã¥¿¡¼ Á÷Á¢ ž«°Ü Ä£°Å¶ó ÄÄÆÄÀϽÿ¡ ¿À·ù°¡ ³¯ ¼ö ÀÖ½À´Ï´Ù.
¾Æ¹«Æ° ÀÌ·±½ÄÀÇ ÄÚµåÀε¥,Ã¥¿¡ ³ª¿ÍÀִµ¥·Î ÄÄÆÄÀÏ ÇÑ ÈÄ ½ÇÇàÀ» Çϸé
$gcc - g quth_overflow2.c
$./a.out $(perl -e 'print "\xbf\x84\x04\08"x10'); <-ÀÌ ½©ÄÚµå¿Í ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù µð¹ö±ë¸ðµå¿¡¼ È®ÀÎÇØÁÖ¼¼¿ä.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Á¢±Ù Çã¿ë.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Secmentation fault (core dumped)
¶ó°í ³ª¿À´Â°Ô Á¤»óÀÌ°ÚÁÒ. Áö±Ý ³ëÆ®ºÏ¿¡ ÀÖ´Â ¿ìºÐÅõ ¸»°í ´Ù¸¥ ¸®´ª½º(CentOS)¿¡¼´Â ÀÌ·¸°Ô ³ª¿À±ä ÇÏÁö¸¸, À¯µ¶ ¿ìºÐÅõ¿¡¼ ÀÌ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°¸é ´Ù¸¥ ¿À·ù¸Þ½ÃÁö°¡ ³ª¿Í Á¶±Ý ºÒÆíÇÕ´Ï´Ù. ¾Æ¸¶µµ gccÄÄÆÄÀÏ·¯ ¹öÁ¯ ¹®Á¦ ÀÎ°Í °°Àºµ¥,
Ȥ½Ã ´Ù¸¥ ¹öÁ¯ÀÇ ÄÄÆÄÀÏ·¯¸¦ ±ò¾Æ¾ß ÇÏ´ÂÁö ±Ã±ÝÇؼ ÀÌ °Ô½ÃÆÇ¿¡ ¿Ã·Áº¾´Ï´Ù.
ÇöÀç gcc¹öÁ¯Àº 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)ÀÔ´Ï´Ù.
À§ÀÇ ¸í·É¾î¸¦ ½ÇÇàÇÏ¿´À» ¶§ ³ª¿À´Â ¿¡·¯¸Þ½ÃÁö´Â
*** stack smashing detected ***: ./a.out terminated
À̶ó°í ¶ß¸ç ±×¹Ø¿¡ Ãß°¡ÀûÀ¸·Î ¹éÆ®·¹À̽º¿Í ¸Þ¸ð¸® ¸ÊÀÌ ¶ß´Âµ¥ º° µµ¿òÀÌ ¾ÈµÇ´Â °Í °°³×¿ä.
Á¢±Ù Çã¿ëÀ̶ó´Â °É º¸·Á¸é °á±¹ ¾î¶² ÄÄÆÄÀÏ·¯¸¦ ±ò¾Æ¾ß ÇÏ´ÂÁö ±Ã±ÝÇÕ´Ï´Ù.
Á¦¹ß µµ¿ÍÁÖ¼¼¿ä ¤Ð¤Ð |
Hit : 4029 Date : 2011/04/01 12:59
|