¡Hoy te traemos un nuevo Desafío ESET! Está pensado para explotar vulnerabilidades en Linux, ya que el reto, en esta oportunidad, consiste en aprovecharse de un programa vulnerable para abrir una shell en el sistema. Dicho programa es un ejecutable en formato ELF, que podrás descargar aquí (usa la versión que corresponda a tu arquitectura). Asimismo, puedes usar el siguiente código como referencia para armar tu shellcode:
Vemos que se hace una llamada al sistema (int 80h) con la rutina execve, que ejecutará /bin/sh (la shell). La convención para realizar llamadas al sistema con la int 80h consiste en colocar el código de la llamada en EAX, seguido de cada argumento de la llamada en EBX, ECX, etc. Los argumentos de execve se pueden consultar con “man execve” y los códigos de las llamadas al sistema están especificados en “/usr/include/asm/unistd_32.h”. Puede que sea necesario modificar el código para evitar la presencia de bytes nulos y direcciones absolutas en nuestro shellcode.
Pueden compilar el código de la siguiente forma:
$> nasm -f elf nuestra_shell.asm
$> ld -o nuestra_shell nuestra_shell.o
Ahora bien, si vamos de nuevo al programa vulnerable, verán que puede ser explotado mediante un buffer overflow que pise la dirección de retorno en el stack, apuntando al código de nuestra shellcode. Aquí un ejemplo de ejecución exitosa:
Si eres el primero en dejar un comentario explicando la solución, junto con un enlace para descargar tu shellcode (en un archivo .ZIP con contraseña “infected”), ganarás tres licencias de ESET Smart Security, la solución de seguridad más completa. Así es: en esta edición del Desafío ESET, estamos triplicando el premio, que solía ser una licencia.
En la sección de comentarios las dudas serán resueltas y las pistas otorgadas. ¡No dejes de comentar! Pero ten en cuenta que publicaremos los mensajes conteniendo la solución o partes de ella la semana que viene, para que no interfieran mientras otros tratan de resolverlo.
Mucha suerte y nos encontramos la próxima semana con la solución.
Este ejercicio ha sido tomado del curso de exploits de Open Security Training.