2011-07-30 33 views
5

Tôi đã đọc một cuốn sách tuyệt vời Hacking của Jon Erickson. Tôi muốn biên dịch một ví dụ tràn bộ đệm và gỡ lỗi nó, nhưng thay vì viết không gian được cấp phát bên ngoài, ứng dụng chỉ phản hồi bằng 'Abort trap'. Đây có phải là một số biện pháp phòng ngừa an ninh được giới thiệu bởi Xcode hoặc Mac OS không? Tác giả đang sử dụng gcc thô và Debian.Bẫy phá hủy thay vì tràn bộ đệm

#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

Có lẽ các nhà biên dịch cũng đã đọc sách? :-) –

Trả lời

4

này được bảo vệ tràn đá ở - mặc dù tôi không chắc chắn về XCode/OSX, với gcc bạn có thể vượt qua -fno-stack-bảo vệ và phải tắt ASLR

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

Bài viết này giúp Smashing the Stack in 2011

Bạn sẽ có thể tìm hiểu cách tắt tính năng bảo vệ để phát bằng mã này.

Tôi đang đọc cùng một cuốn sách btw - Tôi đã phải điều chỉnh/google xung quanh để làm một số điều có liên quan trong năm 2011.

+0

Cảm ơn và tôi cũng phải thêm '-D_FORTIFY_SOURCE = 0' http://www.thexploit.com/secdev/turning-off-buffer-overflow-protections-in-gcc/. –

Các vấn đề liên quan