Código:
int main(int argc, char *argv[])
{
char *pass="pepe";
char userpass[25];
strcpy(userpass, argv[1]);
if(strcmp(userpass,pass)==0)
{
printf("Has acertado\n");
}
else
{
printf("Has fallado\n");
}
return 0;
}
{
char *pass="pepe";
char userpass[25];
strcpy(userpass, argv[1]);
if(strcmp(userpass,pass)==0)
{
printf("Has acertado\n");
}
else
{
printf("Has fallado\n");
}
return 0;
}
La idea que tenía es lo siguiente:
-Viendo las direcciones de memoria de cada variable he visto que guarda primero la introducida por el usuario y despues la dirección donde tiene almacenada la contraseña.
-Lo suyo es escribir una cadena suficientemente larga que sobreescriba la dirección a la que apunta el *pass.
-El problema es que mi dirección es 0022FEF0 pero luego al ejecutar el exploit me sobreescribe 0000FEF0, es decir, se fuma el 22.
El exploit tiene una cosa más o menos así:
Código:
dir[0]='\xF0';
dir[1]='\xFE';
dir[2]='\x22';
dir[3]='\x00';
sprintf(ejecutar,"%s (37 caracteres etc...)%c%c%c%c",argv[1],dir[0],dir[1],dir[2],dir[3]);
dir[1]='\xFE';
dir[2]='\x22';
dir[3]='\x00';
sprintf(ejecutar,"%s (37 caracteres etc...)%c%c%c%c",argv[1],dir[0],dir[1],dir[2],dir[3]);
Vamos que la duda es xq no me pone el 22 ^^.
Gracias y Un Saludete










Autor



En línea


