Tengo algunos problemas al intentar resolver un juego de guerra con una vulnerabilidad de cadena de formato. Así que aquí está el código del programa:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char ** argv)
{
char text[1024];
if(argc!=2)
{
printf("Usage : %s <texte>\n",argv[0]);
exit(0);
}
strncpy(text,argv[1],1023);
printf("Voici votre texte :\n");
printf(text);
printf("\n");
exit(0);
}
Para que pueda ver el código desensamblado y asumo que la llamada a 0x80484fb
es la llamada a la función vulnerable.
Primero, no entiendo por qué ya hay esos valores de 0xbffff834
a 0xbffff84c
en la pila. De hecho, el valor en la parte superior de la pila (agregado en 0x80484f8
en el hilo principal) parece ser el argumento pasado a la función printf
pero no sé cuáles son esos otros valores pasados anteriormente.
La segunda cosa que no entiendo es por qué el resultado no muestra la dirección 0xbffff840
y comienza a imprimir 0xbffffe1b
. Pensé que el %x
imprimiría el primer valor de la pila y luego el segundo y continuaría así.