[HACK] Duda con Buffer Overflow

Rafael San Miguel smcsoc at yahoo.es
Tue Oct 5 08:22:51 CEST 2004


¿Por qué no sobreescribes el RET con la dirección de
la primera instrucción del bloque if? De esa forma
evitas tener que hacer verdadera la comprobación.

Un saludo.

 --- "[ __BoKeN__ ]" <boken__ at hotmail.com> escribió: 
> 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?
> 
> Si la declaracion de las variables locales fuera
> esta:
> 	int cookie;
> 	char buf[80];
> seria mas facil porque solo habria que rellenar la
> variable buf y 
> seguidamente estaria la variable cookie. Pero en el
> orden del ejemplo de 
> arriba, la pila almacena cookie en una direccion de
> memoria mas baja que buf 
> y por ello al desbordar buf no reescribo cookie.
> 
> 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.
> 
> Alguien sabria darme una manera mas efectiva,
> elegante, operativa... Vamos 
> que funcione ;)
> 
> Un saludo a todos y gracias de antemano.
> 
>
_________________________________________________________________
> Moda para esta temporada. Ponte al día de todas las
> tendencias. 
> http://www.msn.es/Mujer/moda/default.asp
> 
> _______________________________________________
> Lista - http://mailman.argo.es/listinfo/hacking
> FAQ - http://www.argo.es/~jcea/artic/hack-faq.htm
> "una-al-dia" para estar siempre informado -
> http://www.hispasec.com/
>  



More information about the hacking mailing list