Tôi đã cố gắng thực hiện tràn bộ đệm (tôi đang sử dụng Linux) trên một chương trình đơn giản yêu cầu mật khẩu. Dưới đây là mã chương trình:Lỗi tràn bộ đệm không hoạt động
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check_authentication(char *password){
int auth_flag = 0;
char password_buffer[16];
strcpy(password_buffer, password);
if(strcmp(password_buffer, "pass1") == 0)
auth_flag = 1;
if(strcmp(password_buffer, "pass2") == 0)
auth_flag = 1;
return auth_flag;
}
int main(int argc, char **argv)
{
if(argc < 2){
printf("\t[!] Correct usage: %s <password>\n", argv[0]);
exit(0);
}
if(check_authentication(argv[1])){
printf("\n-=-=-=-=-=-=-=-=\n");
printf(" Access granted.\n");
printf("-=-=-=-=-=-=-=-=\n");
} else {
printf("\nAccess Denied.\n");
}
return 0;
}
OK, bây giờ tôi đã biên soạn, không có lỗi và lưu nó dưới dạng tràn.
Bây giờ tôi mở Terminal, tôi chuyển vào thư mục tập tin (Desktop) và sau đó đã viết:
./overflow.c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
The Terminal cho biết: "Stack đập phát hiện" (hoặc một cái gì đó như thế) và sau đó thoát khỏi chương trình chấp hành.
Bây giờ, tôi đang đọc một cuốn sách, được gọi là "Hacking - Nghệ thuật khai thác" của Jon Erickson. Trong một chương, ông giải thích loại khai thác này (tôi lấy mã từ cuốn sách) và thực hiện cùng một lệnh mà tôi đã làm. Bộ nhớ tràn và chương trình in "Truy cập được cấp". Bây giờ, tại sao hệ điều hành của tôi phát hiện tôi đang cố gắng khai thác chương trình? Tôi đã làm gì sai?
Tôi cũng đã thử khai thác trên Mac OS X. Cùng một điều đã xảy ra. Xin vui lòng ai có thể giúp tôi? Cảm ơn trước.
Ok, cảm ơn bạn đã trả lời và để được trợ giúp! – jndok
Bạn được chào đón :) –
Bài đăng hay, bạn đời! Bạn có thể biết một giải pháp cho môi trường Cygwin không? '-fno-stack-protector' dường như không tạo ra bất kỳ sự khác biệt nào. – Powerslave