Formato Vulnerabilità delle stringhe utilizzata per visualizzare i dati al di fuori del frame dello stack delle funzioni?

0

se eseguiamo il seguente codice usando l'input "hi", l'output sarà semplicemente "hi"

main(int argc, char **argv)
{
          char *secret = "This is a secret 1\n";
          char *secret2 = "This is secret 2\n";

          printf(argv[1]);
}

tuttavia, se eseguiamo il programma con l'input "% s", l'output sarà "This is a secret 1"

da quello che ho capito, la ragione di ciò è che quando printf viene alimentato con la stringa di formattazione% s, non controlla se i dati di una stringa sono stati inseriti nello stack, quindi se non c'è una stringa fornita, recupererà i prossimi dati memorizzati nello stack che in questo caso è la nostra stringa segreta. Quindi per ogni% s recupererà i dati successivi sul suo stack frame e lo visualizzerà in formato stringa.

La mia domanda è, tenendo presente che (main) e (printf) hanno ciascuno il proprio stack frame, in che modo% s può far sì che printf visualizzi dati che non appartengono al suo stack frame? principale)

    
posta Abbas Javan Jafari 26.04.2014 - 17:53
fonte

1 risposta

1

however, if we run the program with the input "%s" the output will be "This is a secret 1

No, questo non è garantito . può stampare la stringa contenuta nella variabile secret ma questa è solo una coincidenza. Hai ragione che main e printf hanno ciascuno i propri frame di stack. printf stamperà qualsiasi indirizzo di memoria al quale la pila sta puntando al momento. La cosa bella delle vulnerabilità delle stringhe di formato come questa è che puoi essenzialmente leggere quantità arbitrarie di dati semplicemente passando in varie stringhe di formato.

Trovo che questo articolo sia una buona introduzione alla vulnerabilità.

    
risposta data 26.04.2014 - 19:45
fonte