我目前正在学习“黑客行为-剥削的艺术”。有一个名为auth_overflow.c的代码:
#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, "brillig")==0)
auth_flag = 1;
if(strcmp(password_buffer, "outgrabe")==0)
auth_flag = 1;
return auth_flag;
}
int main(int argc, char *argv[]) {
if(argc < 2) {
printf("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");
}
}
由于内存中“ auth_flag”和“ password_buffer”的顺序,程序容易受到参数“ A” x30的攻击。根据这本书,此更改应可解决:
char password_buffer[16];
int auth_flag = 0;
但就我而言,它的行为仍然相同。在gdb中查看后,我注意到在两个程序中,无论使用什么代码,“ auth_flag”都比“ password_buffer”处于较低的内存地址。 是什么原因导致该问题?那是因为使用了较新的编译器吗? 我的系统版本:4.19.0-kali4-amd64
而我在这里。 我真的很喜欢这本书,但是我知道与更新的工具和系统存在许多不一致之处。是否有任何类似的新书值得推荐,等等?