Estoy tratando de aprender la explotación binaria, y pensé en usar muestras en línea para entrenarme. Aquí hay uno que he encontrado, y no puedo ver cómo descubrirlo.
int main(int argc, char** argv[])
{
uint32_t number = 0;
uint32_t guess = 0;
char input[8] = {0};
FILE* devRand = fopen("/dev/urandom", "rb");
if(devRand == NULL)
{
printf("I can't think of a number");
return EXIT_FAILURE;
}
fread(&number, 1, 4, devRand);
fclose(devRand);
printf("What number am I thinking of?\n");
fflush(stdout);
bool correct = false;
do
{
fgets(&input[0], 28, stdin);
guess = strtol(&input[0], NULL, 16);
if (number == guess)
{
correct = true;
printf("Yes!\n");
fflush(stdout);
system("/bin/sh");
}
else
{
printf("No\n");
fflush(stdout);
}
}
while(!correct);
return EXIT_SUCCESS;
}
Se agradecería que alguien me diera una explicación detallada de la vulnerabilidad, cómo funciona y cómo puede mitigarse.
¡Gracias!