[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