hackweb
appunti di hacking e tecnologia
IT EN
menù principale
menù utente
non sei loggato

Format string: quando %n scrive in memoria

11 ottobre 2025 · 1 min di lettura · #binary-exploitation #format-string #memory

Passare input dell'utente come stringa di formato è il bug: printf(buf) invece di printf("%s", buf). I %x/%p dell'utente leggono valori dallo stack; %s dereferenzia; %n scrive il numero di byte stampati all'indirizzo puntato.

printf(buf);  // buf = "%p %p %p %p" dumpa lo stack
// "%n" scrive -> primitiva di scrittura arbitraria

La primitiva

Combinando l'accesso posizionale (%7$n) con il controllo del conteggio (larghezza del campo), si scrive un valore arbitrario a un indirizzo arbitrario: si sovrascrive una entry GOT o un return address.

Difesa

La stringa di formato deve essere sempre una costante. I compilatori avvisano (-Wformat-security); trattali come errori. %n è disabilitato in alcune libc hardened e in FORTIFY.


« torna alla home

ultimi post
 
il tuo indirizzo IP:
216.73.216.108
visitatore #0
MOTD:
Ogni astrazione perde da qualche parte.
Qui guardiamo dove.
argomenti