[HACK] Duda con Buffer Overflow

J.A. Gutierrez spd at shiva.cps.unizar.es
Tue Oct 5 10:54:05 CEST 2004


On Fri, Oct 01, 2004 at 07:58:33AM +0000, [ __BoKeN__ ] wrote:
> Hola a todos.
> 
> En el siguiente codigo:
> 
> int main() {
> 	char buf[80];
> 	int cookie;
> 
> 	printf("buf: %08x cookie: %08x\n", &buf, &cookie);
> 	gets(buf);
> 
> 	if (cookie == 0x41424344)
> 		printf("you win!\n");
> }
> 
> ¿Como puedo hacer para que la condicional se cumpla?

	Lo has probado?

 $ echo "12345678901234567890123456789012345678901234567890123456789012345678901234567890ABCD" | ./foo
 buf: 7fff2e20 cookie: 7fff2e70
 you win!

	Ten en cuenta que muchos compiladores optimizan como les parece,
	y eso incluye cambiar de orden las variables a su gusto.
	Lo de arriba esta con la optimizacion por defecto de un compilador
	concreto, deshabilitando la optimizacion del todo es cuando se
	obtiene el comportamiento que tu esperas.

	En resumen, que me parece probable que el que te ha planteado
	el "acertijo" no haya pensado tanto como te crees...
> 
> Una solucion que he pensado es reesecribir RET con &buf y en buf escribir 
> codigo en ASM para que ponga en las direcciones de memoria de cookie los 
> valores deseados y despues que vuelva al verdadero RET. PROBLEMA: No se como 
> recuperar el antiguo RET para que siga la ejecucion normal del programa.

	y eso no te serviria de mucho, ya que el codigo que metas
	se ejecutara despues de la comparacion...

> Alguien sabria darme una manera mas efectiva, elegante, operativa... Vamos 
> que funcione ;)

	optimizar al compilar :-)

-- 
finger spd at shiva.cps.unizar.es for PGP      /
.mailcap tip of the day:                   /             La vida es una carcel
application/ms-tnef; cat '%s' > /dev/null /           con las puertas abiertas
text/x-vcard; cat '%s' > /dev/null       /            (A. Calamaro)



More information about the hacking mailing list