|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&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 : 4771 Date : 2011/04/01 12:59
|