Я сейчас изучаю "Взлом - Искусство Эксплуатации". Существует код с именем 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");
}
}
Программа уязвима для аргумента «A» x30 из-за порядка «auth_flag» и «password_buffer» в памяти. Согласно книге, это изменение должно исправить:
char password_buffer[16];
int auth_flag = 0;
Но в моем случае это все равно ведет себя так же. Посмотрев в gdb, я заметил, что в обеих программах «auth_flag» находится по более низкому адресу памяти по сравнению с «password_buffer», независимо от того, какой код я использую.
Что вызывает эту проблему? Это из-за использования более нового компилятора?
Версия моей системы: 4.19.0-kali4-amd64
И пока я здесь ...
Мне очень нравится изучать эту книгу, но я знаю о многих несоответствиях с новыми инструментами и системами. Есть ли что-нибудь подобное, более новая книга, которую стоит порекомендовать и т.д.?