[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