パスワードが必要な単純なプログラムでバッファオーバーフロー(Linuxを使用しています)を実行しようとしていました。プログラムコードは次のとおりです。
#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、エラーなしでコンパイルし、overflow.c として保存しました。
ターミナルを開き、ファイル ディレクトリ (デスクトップ) に移動して、次のように記述しました。
./overflow.c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ターミナルは、「スタック破壊が検出されました」(またはそのようなもの)と言ってから、プログラムの実行を終了しました。
今、ジョン・エリクソンの『ハッキング - 搾取の術』という本を読んでいます。章の中で、彼はこのタイプのエクスプロイトを説明し (私は本からコードを引用しました)、私が実行したのと同じコマンドを実行します。メモリがオーバーフローし、プログラムは「アクセス許可」を出力します。では、なぜ私の OS は私がプログラムを悪用しようとしていることを検出しているのでしょうか? 私は何か間違ったことをしましたか?
Mac OS X でもエクスプロイトを試しましたが、同じことが起こりました。誰か助けてくれませんか?前もって感謝します。