Ho alcuni problemi nel tentativo di risolvere un gioco di guerra con una vulnerabilità della stringa di formato. Quindi ecco il codice del programma:
#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);
}
Quindi puoi vedere il codice smontato e presumo che la chiamata a 0x80484fb
sia la chiamata alla funzione vulnerabile.
Innanzitutto, non capisco perché ci siano già quei valori da 0xbffff834
a 0xbffff84c
sullo stack. In effetti, il valore in cima allo stack (aggiunto in 0x80484f8
nel thread principale) sembra essere l'argomento passato alla funzione printf
ma non so quali siano gli altri valori passati prima.
La seconda cosa che non capisco è perché il risultato non mostra l'indirizzo 0xbffff840
e inizia a stampare 0xbffffe1b
. Credo che il %x
stamperebbe il primo valore dello stack e poi il secondo e procederà in questo modo.