Boomerpreter - Creando nuestro propio meterpreter - BoomerNiX

martes, 24 de abril de 2018

Boomerpreter - Creando nuestro propio meterpreter

Hace un tiempo escribí en el lado del mal un post para extender la funcionalidad del meterpreter de Metasploit, en esta ocasión me gustaría hablar de cómo crear nuestro propio meterpreter. Vamos a empezar viendo cómo se consigue hacer correr el meterpreter a alto nivel:


La misión aquí es escribir el código que se enviará y ejecutará en el equipo de la víctima, para así realizar nuestras acciones de post-explotación.

El meterpreter a desarrollar será compatible con el código que genera Metasploit para desencadenar dicha funcionalidad.  Será centrado en Python, y seleccionaremos una conexión reversa por TCP, si echamos un vistazo al código a alto nivel:


Vemos arriba que se encarga de recibir nuestro código y lo ejecuta con exec, algo importante a tener en cuenta antes de empezar el desarrollo, es que se pasa el socket en un parámetro, por lo tanto en nuestro código recogeremos esa conexión por la variable s.
Si echamos un vistazo al post que se comentó al inicio, se comprueba que en Metasploit se tiene el código corriendo en la memoria de la víctima, y en local se cuenta con un “manejador” de comandos y un apartado de extensión.

Para facilitar el concepto, aquí se va a desarrollar un breve código en local, que administre los comandos, y el código para el equipo víctima. Un gráfico para resumir el funcionamiento (números 1 y 2 van en dirección víctima, y el 3 y 4 a la máquina del atacante):


En la imagen anterior se pone un ejemplo con whoami, por ser conocida, pero en el meterpreter nosotros definiremos los comandos que existen y lo que se puede ejecutar. ¡Vamos a por ello! El código está en mi GitHub, aquí se dejarán breves capturas.

No pretende ser nada más que un camino para que puedas hacer el tuyo, y juguetear un rato. 

En el código se puede apreciar que solo tiene una función implementada, execute, según se vaya complicando, se recomienda la división en módulos en la parte cliente (atacante) e implementar la funcionalidad load para la carga dinámica en el servidor (víctima), ya que si no se vuelve inmanejable. 

Además, solo está funcionando mediante un simple socket, y el típico encode de red + json… recomendable agregar un túnel ssh, o agregar otras posibles comunicaciones, como hace Metasploit. Pero para el ejemplo, esto es más que suficiente, esa funcionalidad es un añadido fácil de agregar.

Anteriormente, se ha indicado que en la máquina víctima, el socket va en una variable llamada s, por ello, verás en el archivo boomerpreter.py el uso de dicha variable sin declararla en nuestro código y el IDE pensará que es un error. Se deja captura a continuación:



Teniendo en cuenta que la funcionalidad aquí implementada es la ejecución de un comando en el sistema, si nosotros escribimos en el boomerpreter:

   execute ls -l

En el código cliente se formará contenido con la siguiente estructura, que es lo que llegará al servidor:

   data = {
            "function": “execute”,
            "args": [“ls”,”-l”]
        }

Es realizado por el código ejecutado en el cliente en la función send_msg:



En el código ejecutado en la máquina víctima, se buscará por la función execute en el mapa llamado operations, si existe, se llamará a la función y se le pasará como argumento [“ls”, “-l”]. Se deja una pequeña captura del código:



Antes de eso se hace un simple decode y se decodifica el JSON, porque así lo he implementado yo, prueba otras opciones y juega con ello. 



Y para enviar el resultado, se lleva el camino contrario “encoding”.

Se recomienda consultar el código en el GitHub, ya que visto completo será más sencillo de comprender. Si corremos dicho código, tendremos algo parecido a la siguiente imagen:



Podemos agregarle toda la funcionalidad que se nos ocurra, exploits, código para recolectar información, extensiones, etc. Aportamos una imagen, para que aprecie la funcionalidad:


A continuación, se deja un vídeo del uso de un meterpreter en BoomER, ya que cuenta con una complejidad bastante mayor, se pueden gestionar las sesiones, mandarlas a segundo plano y muchas cosas más, creo que se puede captar mejor la idea:


Para cualquier duda, me podéis contactar. Un saludo

No hay comentarios:

Publicar un comentario