Durante la compilazione con:
gcc -m32 -fno-pie -no-pie -g bof.c -fno-stack-protector -z execstack -o bof32
Sono in grado di sovrascrivere l'indirizzo di ritorno con qualsiasi valore tranne un indirizzo di ritorno valido.
Quandoprovoausareunindirizzodiritornovalidol'ultimobytevienesovrascrittoconqualcosadidiversocome0xffffd8feottengounindirizzoerrato..
Quindiquellochestochiedendoèanchesehospentolaprotezionedellostack,latortadishutoffeabilitatol'esecuzionedellostack,hoanchesettatoilkernelASLRa0,cisonoaltrimotivipercuiquestopotrebbecausarel'impossibilitàdicontrollarecompletamenteEIP?
Eccoilcodicechenontistochiedendodirisolvereperme,stosolochiedendounconsigliosulperchèquestoagiscecomefa!
#include<stdio.h>#include<stdlib.h>#include<string.h>voidvalidate(char*pass){if(strcmp(pass,"[REDACTED]") == 0) {
printf("ACCESS GRANTED!");
printf("Oh that's just idio... Oh my god!\n");
} else {
printf("Damn it, I had something for this...\n");
}
}
int main(int argc, char** argv) {
char password[200];
printf("C:/ENTER PASSWORD: ");
scanf("%s", password);
validate(password);
return 0;
}
Nota: nel caso questo sia importante il mio sistema è x86_64 e ho compilato il binario come x86, questo programma ha badchars che sono "\ x09 \ x0a \ x0b \ x0c \ x0d \ x20", e la struttura del carico utile è la seguente . payload="A" * 132 + ret + 28byteshellcode + "A" * 44.