为什么即使我遵循“黑客 – 剥削艺术”一书中的代码,我也无法崩溃程序

我正在遵循“黑客 – 剥削艺术”一书中的代码.书中定义的源代码附带作者提供的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字符的参数来利用它.

点赞