我正在遵循“黑客 – 剥削艺术”一书中的代码.书中定义的源代码附带作者提供的CD.我只是编译预先编写的代码.根据本书,如果我提供正确的密码,它应该授予我访问权限,如果我给一个大字符串错误的密码,它也应该授予我访问权限,但它否认我.来源确实是如下:
#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");
}
}
最佳答案 加:
printf("delta: %td\n", (char *) &auth_flag - password_buffer);
在check_authentication函数中.
如果delta为负数,则无法利用您的程序.
否则,使用delta 4字符的参数来利用它.