[ Home | Liste | F.A.Q. | Risorse | Cerca... ]


[ Data: precedente | successivo | indice ] [ Argomento: precedente | successivo | indice ]


Archivio: Aprile 2001 ml@sikurezza.org
Soggetto: format string
Mittente: Enrico
Data: 20 Apr 2001 16:05:56 -0000
Ciao,

Stò leggendo un articolo che spiega il funzionamento delle vulnerabilità
basate sulle format string.

Sul documento c'è scritto che la stringa di formattazione del printf (e dei
comandi della stessa famiglia) viene caricata sullo stack e da quello che
ho capito è proprio per questo che si riesce ad exploitare. Ho scritto 2
righe in C per provare, ma non ho avuto i risultati attesi.
Questi sono il sorgente C e i risultati:

----------prog.c-----------
main()
{
unsigned char buff[16];
memset(buff,'\xCC', sizeof(buff));

printf("\nAAAAAAAA__%08x.%08x.%08x.%08x.%08x.%08x.%08x\n");
}
----------fine prog.c-----------


$ gcc prog.c -o prog
$ prog

AAAAAAAA__cccccccc.cccccccc.cccccccc.cccccccc.bffff9e8.400349cb.00000001
$

Il parametro di formattazione %08x stampa 4 byte e fa avanzare il puntatore
dello stack.
La stampa comincia dalla posizione attuale dello stack e prosegue verso
l'alto della pila.

Quello che non mi torna è che se la stringa di formattazione viene messa
nello stack dovrebbe essere stampata prima della variabile buff, in quanto
inserita dopo (mi aspettavo di trovare una serie di 8 byte \x41
corrispondente agli 8 caratteri A seguiti dal resto della stringa di
formattazione). Invece, come si può vedere nel risultato, i primi byte
stampati sono proprio quelli di buff e la stringa di formattazione non c'è. 

Spero di essere stato chiaro e che qualcuno possa spiegarmi dove sbaglio.


Saluti
	Enrico


________________________________________________________
http://www.sikurezza.org - Italian Security Mailing List




[ Home | Liste | F.A.Q. | Risorse | Cerca... ]

www.sikurezza.org - Italian Security Mailing List
(c) 1999-2005