2011-07-30 6 views
5

저는 Jon Erickson의 훌륭한 책 Hacking을 읽었습니다. 버퍼 오버플로 예제를 컴파일하고 디버깅하려고했지만 할당 된 외부 공간을 작성하는 대신 응용 프로그램이 'Abort trap'으로 응답합니다. Xcode 또는 Mac OS에서 도입 한 보안 예방 조치입니까? 저자는 raw gcc와 Debian을 사용하고 있습니다.버퍼 오버플로 대신 트랩을 중단합니다.

#include <stdio.h> 
#include <string.h> 

int main(int argc, char *argv[]) { 
    int value = 5; 
    char buffer_one[8], buffer_two[8]; 

    strcpy(buffer_one, "one"); /* put "one" into buffer_one */ 
    strcpy(buffer_two, "two"); /* put "two" into buffer_two */ 

    printf("[BEFORE] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two); 
    printf("[BEFORE] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one); 
    printf("[BEFORE] value is at %p and is %d (0x%08x)\n", &value, value, value); 

    printf("\n[STRCPY] copying %d bytes into buffer_two\n\n", strlen(argv[1])); 
    strcpy(buffer_two, argv[1]); /* copy first argument into buffer_two */ 

    printf("[AFTER] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two); 
    printf("[AFTER] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one); 
    printf("[AFTER] value is at %p and is %d (0x%08x)\n", &value, value, value); 
} 
+1

에 대한 몇 가지 관련성 주위 구글/조정 했어? :-) –

답변

4

이 오버 플로우 보호에 걷어차는 - 내가 GCC 당신은 ASLR

linux: sudo echo 0 > /proc/sys/kernel/randomize_va_space 

을 -fno-스택 보호를 통과하고 해제 할 수 있습니다, 엑스 코드/OSX에 대해 확실하지 않다 있지만, 이 도움말은 Smashing the Stack in 2011

이 코드로 보호 기능을 해제하는 방법을 알아야합니다.

나는 BTW 같은 책을 읽고 있어요 - 나는 아마도 컴파일러 작가도 책을 읽고 2011 년

+0

감사합니다. 또한'-D_FORTIFY_SOURCE = 0'을 추가해야했습니다. http://www.thexploit.com/secdev/turning-off-buffer-overflow-protections-in-gcc/. –

관련 문제