“黑客行为-剥削的艺术”-内存分段中的不便

时间:2019-05-04 14:10:36

标签: c memory-management buffer

我目前正在学习“黑客行为-剥削的艺术”。有一个名为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

而我在这里。 我真的很喜欢这本书,但是我知道与更新的工具和系统存在许多不一致之处。是否有任何类似的新书值得推荐,等等?

0 个答案:

没有答案