Esconder un programa compilado en un script interpretado.
By: Date: octubre 17, 2011 Categories: Consultoria y Manuales,Hackers, Tools y Retos

Existen muchos sistemas GNU/Linux, FreeBSD “endurecidos” por políticas de seguridad, los cuales no tienen un compilador e incluso tienen cerrado algunos puertos para descargar del internet dejando solo los puertos de administración en consolas de texto, los binarios no pasan bien en texto al menos no en su forma binaria nativa debido a que muchas instrucciones son confundidas en la consolas como caracteres de control y queda corrompido.

Si eres de los que les gusta subir a root esto definitivamente te va a interesar porque es la forma de subir tu exploit, por supuesto si el sistema es endurecido como debe ser aunque lo subas de esta manera no lo podrás ejecutar, para uso menos maliciosos puede servir para subir una herramienta ya compilada que ayude en la administración.

Esto se podría subir directamente como base64, pero para darle algo más de dramatismo creare un Shell-Script de Bash que simulara estar infectado con un binario. Este script resultante no pasa de las 100 líneas y es razonable pasarlo por SSH o telnet a puro copiar y pegar.

Existen 2 métodos para hacer esto, además del base64 está la función chr() dentro del script que es básicamente lo mismo pero hay que hacer más trabajo a la hora de crear el flujo de datos de caracteres, cosa innecesaria si la terminal soporta base64 y prácticamente todas lo soportan.

Como inyectarle un programa ejecutable a un Script interpretado

Primero tienes que tener tu programa compilarlo y asegurarte que el sistema destino tiene todas las librerías para ejecutarlo de lo contrario tendrás que hacerlo static solo que aumentara de unos cuantos kilobytes a medio megabyte y un script de 512kbytes es algo sospechoso si es para fines no legales, aunque me centrare en lo legal, no es igual pasar un script de 100 líneas por copiar y pegar que uno que tenga unas 1000 o mas

Para hacer esta demostración hice un pequeño programa que dice cual es su pid en el sistema y el uid del usuario que lo ejecuta.

#include <stdio.h>
#include <unistd.h>

int main ()
{
        printf (“Soy el programa
binario en el script de texto\r\n”);
        printf (“Mi PID es %d, mi
UID %d\r\n”,getpid(),getuid());
        return 0;
}

Una vez compilado, es reconvertido a base64 y este a su vez cargado dentro de una variable dentro del script.

La función de esta variable es volver a un flujo de datos el base64 en el sistema remoto de forma que con una recodificación por base64 se regrese a su forma nativa el binario para que este pueda ser ejecutado ya como un programa y no como un script

Esto realmente no es nada nuevo existe desde hace décadas, aunque casi nadie los usa. Si no mal recuerdo hace una década vi este método en el proyecto de Ximian/Gnome. El instalador era un pequeño script que al ejecutarse descargaba según la versión de Linux el ejecutable correcto para iniciar la instalación del escritorio de trabajo. Me gustaba aquel Ximian/Gnome tenía mejores vistas y detalles que el Gnome entregado en las distros actuales y de aquella época.

El video demostrativo:

El binario resultante del video lo puedes descargar aquí.

Articulo relacionado Troyanos en PHP

One thought on “Esconder un programa compilado en un script interpretado.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *