Tôi đang tìm hiểu về tràn bộ đệm và đang cố gắng tạo ra bộ đệm. Tôi có mã này:Biên dịch C để cho phép tràn bộ đệm
#include <stdio.h>
char *secret = "password";
void go_shell() {
char *shell = "/bin/sh";
char *cmd[] = { "/bin/sh", 0 };
setreuid(0);
execve(shell,cmd,0);
}
int authorize() {
char password[64];
printf("Enter Password: ");
gets(password);
if (!strcmp(password,secret)) {
return 1;
}
else {
return 0;
}
}
int main() {
if (authorize()) {
printf("login successful\n");
go_shell();
} else {
printf("Incorrect password\n");
}
return 0;
}
tôi biên dịch này với gcc và sau đó chạy nó trong gdb
tôi nhập khoảng 100 "A" s như mật khẩu và các chương trình bị treo.
Vấn đề là không đăng ký được ghi đè để 0x4141414141414141
Tôi googled này và bổ sung -fno-stack-protector
cờ để gcc
, cho phép RBP để được ghi đè để 0x4141414141414141
nhưng không có gì khác.
Tôi đã tự hỏi liệu có cách nào để biên dịch mã để RIP có thể được ghi đè hay không.
Bạn đang sử dụng Linux? Bạn cũng cần đặt một số lá cờ ở đó, tôi nghĩ vậy. – nhahtdh
Sử dụng Mac OSX. Bất kỳ ý tưởng lá cờ là gì? – carloabelli
Tôi không biết về Mac OSX - có lẽ sẽ khác xa so với Ubuntu (xin lỗi, tôi thực sự đã làm điều này trên Ubuntu, chứ không phải Linux). – nhahtdh