私はバッファオーバーフローについて学んでおり、作成しようとしています。私はこのコードを持っています:
#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;
}
これをgccでコンパイルしてからgdbで実行します
パスワードとして約 100 個の「A」を入力すると、プログラムがクラッシュします。
問題は、レジスタが上書きされないことです0x4141414141414141
-fno-stack-protector
これをグーグルで検索し、フラグをに追加しましたgcc
。これにより、RBP を上書きできるようになりまし0x4141414141414141
たが、他には何もありませんでした。
RIP を上書きできるようにコードをコンパイルする方法があるかどうか疑問に思っていました。