Stavo cercando di eseguire un buffer overflow (sto usando Linux) su un semplice programma che richiede una password. Ecco il codice del programma:Buffer Overflow non funzionante
#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, "pass1") == 0)
auth_flag = 1;
if(strcmp(password_buffer, "pass2") == 0)
auth_flag = 1;
return auth_flag;
}
int main(int argc, char **argv)
{
if(argc < 2){
printf("\t[!] Correct 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");
}
return 0;
}
OK, ora ho compilato esso, nessun errore, e salvato come overflow.c.
Ora ho aperto il terminale, mi sono trasferito nella directory di file (desktop) e poi ha scritto:
./overflow.c AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
The Terminal ha detto: "Stack smashing rilevato" (o qualcosa di simile) e quindi chiudere il programma esecuzione.
Ora, sto leggendo un libro, intitolato "Hacking - The Art Of Exploitation" di Jon Erickson. In un capitolo, spiega questo tipo di exploit (ho preso il codice dal libro) e fa lo stesso comando che ho fatto. La memoria trabocca e il programma stampa "Access given.". Ora, perché il mio sistema operativo sta rilevando sto cercando di sfruttare il programma? Ho fatto qualcosa di sbagliato?
Ho anche provato l'exploit su Mac OS X. La stessa cosa è successa. Per favore, qualcuno può aiutarmi? Grazie in anticipo.
Ok, grazie per la risposta e per l'aiuto! – jndok
Prego :) –
Bel post, amico! Sai forse anche una soluzione per gli ambienti Cygwin? '-fno-stack-protector' sembra non fare alcuna differenza. – Powerslave