El exploit
Por Jacobo Tarrío
9 de mayo de 2003

Bueno, si no les interesa cómo funciona un ordenador (o un sistema operativo) por dentro, mejor no se lean esta historia :-)

Ya funciona “mi” exploit :-) Creo que el problema principal era que estaba compilando con el NASM en modo de 16 bits, y, claro…

Bien, normalmente, cuando llaman a una función en C, lo que se hace es poner en la pila (una parte de la memoria del programa) los argumentos que se le pasan a la función, y luego se ejecuta la instrucción CALL. La instrucción CALL pone también en la pila la dirección de la instrucción que sigue al CALL y salta a la dirección que se le especificó. Cuando se termina la función, se ejecuta la instrucción RET, que recupera de la pila la dirección que se introdujo al llamar a CALL y salta a esta dirección.

Muchos exploits funcionan sustituyendo la dirección que el CALL metió en la pila por la dirección de un trocito de código máquina que hace otras cosas. Esto funciona porque las variables de una función se almacenan también en la pila; normalmente, en un exploit, se aprovecha un fallo de seguridad consistente en que se lee una cadena de texto, pero el programa no comprueba la longitud de la cadena leída; si se introduce una cadena lo suficientemente larga, se pasa de su espacio asignado, y empiezan a sobreescribirse otras partes de la pila hasta que se llega, por ejemplo, a la dirección de retorno de un CALL.

El truco está en conseguir dos cosas: meter un trozo de código que haga algo “interesante” en un lugar de la memoria cuya dirección se conozca, y sobreescribir la dirección de retorno de un CALL con la dirección donde está ese código. Así, cuando se llegue a un RET, el procesador obtendrá de la pila nuestra dirección “falsa” y ejecutará el código que acabamos de meterle.

Normalmente, este código hace cosas como borrar ficheros, enviar cosas por correo, abrir intérpretes de comandos con permisos de administrador, etc.

Pues si, ya me he hecho un programita con agujero de seguridad, y un exploit que ejecuta el programa “hostname”, y funciona. Fue fácil en cuanto corregí lo de los 16 bits. No, no les diré paso a paso cómo se hace, porque ustedes serán capaces de aprender a hacerlo por si mismos si son suficientemente inteligentes como para no hacerlo con malas intenciones ;-) Además, hay muchas páginas en Internet donde se explica cómo hacer exploits. Por supuesto, no pienso crackearles la cuenta de hotmail de nadie, ni reventarles la protección de ningún programa (por mucho menos ya he recibido e-mails pidiéndomelo); esto lo he hecho sólo para aprender.

Hala, a pasarlo bien.

Otros artículos sobre “Tirando Líneas (2002-2004)”, “seguridad”.
Índice.
Salvo indicación en contrario, esta página y su contenido son Copyright © Jacobo Tarrío Barreiro. Todos los Derechos Reservados. Información sobre tratamiento de datos y condiciones de uso.