miércoles, junio 26, 2019

Python & Metasploit: Librería pymetasploit para integrar scripts

En este blog ya se habló de la automatización de Metasploit a través del uso de msfrpc y el daemon msfrpcd. En aquel caso trabajamos sobre Ruby y sobre la propia herramienta o cliente msfrpc. Hoy quiero contar como hacer esto con el lenguaje más utilizado, muy a mi pesar, ya que yo soy más de Ruby, de la ciberseguridad: Python. El uso de RPC es algo bastante potente, ya que permite integrar diferentes lenguajes para poder utilizar de forma remota un entorno de Metasploit.

Figura 1: Python & Metasploit: Librería pymetasploit para integrar scripts

Es cierto que en la versión 5 de Metasploit hay novedades respecto a la integración de otros lenguajes, pero no está de más conocer las posibilidades que ofrecen las librerías.

¿Cómo te ha dado por probar esto?

Pues la respuesta a esto es sencilla. Yo he utilizado Python siempre que lo he necesitado, es el lenguaje más utilizado en ciberseguridad y, aunque no es mi favorito, lo utilizo. Además, mi compañero Fran Ramírez y yo estamos preparando un workshop que se celebrará la noche del 6 al 7 de julio en París, en la ciudad de las ciencias, dentro del antiguo congreso “Nuit du hack” o como se llamada ahora “LeHack”.

Figura 2: Libros de "Metasploit para pentesters 4ª Edición"
y "Hacking con Metasploit: Advanced Pentesting" de 0xWord.

Lo curioso del workshop es de qué tratará. “Learning how to code doing some hacking and creating AI programs to beat video games”.

Figura 3: Workshops en LeHack

En otras palabras, un workshop dónde se habla de hacking y se utiliza éste para aprender a programar en Python y se hace uso de Open AI para aprender a programar pequeños juegos, apoyándose en Python y en el framework de IA. Curiosa mezcla con el objetivo de aprender a programar con diferentes ámbitos.

Jugando con PyMetasploit

Han salido diferentes versiones de esta librería, la cual aporta una fácil integración de scripting en Python con Metasploit. Gracias a esta librería será realmente sencillo poder interactuar con Metasploit con tus scripts de Python. La instalación se puede hacer de manera sencilla a través de pip. Como nota, si descargas la versión para Python 2.x puedes encontrar un problema con la versión oficial.

Figura 4: Libro de "Python para Pentesters" y "Hacking con Python" de 0xWord

En el Github de la librería se puede encontrar la solución. Si ves que al intentar usar los módulos de Metasploit desde la librería, sale un error similar a “can’t set attributte…” significa que hay una serie de elementos que faltan. Esto se solucionó en el commit siguiente.

Figura 5: Commit para solucionar el bug

Lo primero es montar el daemon de msfrpcd con el que se puede manejar remotamente los objetos de Metasploit. Esta aplicación tiene bastantes opciones para interactuar, desde disponer de SSL para cifrar el canal, utilizar formato JSON, dónde ‘atar’ el servicio, es decir, a qué dirección IP, usuario y contraseña para acceder a Metasploit remotamente, etcétera.

La ejecución y puesta en funcionamiento de msfrpcd puede ser, como se ha comentado, muy variada. Para este ejemplo se ha decidido por un usuario llamado ‘msf’ y una contraseña ‘123abc.’. Además, se indica con el parámetro –f que la aplicación ejecutará en foreground y no en background, como se haría por defecto. Con el parámetro –S, a pesar de parecer lo contrario, lo que se indica es que no se habilite el SSL en las conexiones con el daemon.

Figura 6: Ejecución de msfrpcd

Una vez hecho esto, vamos a probar a abrirnos un intérprete de Python y empezar a jugar. Lo primero es cargar la librería msfrpc e importarla, tal y como se puede ver en la imagen. Una vez hecho esto, vamos a crear un objeto llamado client que representará la conexión con nuestro Metasploit remoto.

En este ejemplo, nuestro Metasploit se encuentra en la dirección IP 10.0.0.31, mientras que la máquina que utilizamos se encuentra en la dirección IP 10.0.0.1. Como se puede ver, se incluyen una serie de parámetros para realizar la conexión con éxito como son:
  • Username: Usuario que se configuró en el lanzamiento de msfrpcd.
  • Password: La contraseña que se configuró en la ejecución de msfrpcd.
  • SSL: El parámetro ssl se configura a False, ya que así se configuró en la ejecución del daemon msfrpcd.
  • Server: Dirección IP dónde se encuentra el daemon de Metasploit al que se quiere conectar remotamente.
El objeto client representa la conexión y el acceso a Metasploit. Con él ya podemos acceder a todos los elementos del framework como exploits, payloads, encoders, módulos auxiliary, etcétera.

Figura 7: Objeto Client en la ejecución de Python en nuestra Kali Linux

Si queremos listar los módulos disponibles en Metasploit podemos ejecutar client.modules.list. Lo interesante en Python es que se puede hacer uso de dir() para ver los métodos disponibles. Si no lo tenemos muy claro, podemos ejecutar dir(client.modules).

Si queremos utilizar un módulo, lo que sería equivalente a ejecutar un use [module] en la consola de Metasploit, debemos ejecutar client.modules.use([tipo módulo],[ruta del módulo]). Es importante utilizar una variable donde se asignará la creación del objeto module, tal y como se puede ver en la imagen, e = client.modules.use(‘exploit’,’windows/ftp/kmftp_utility_cwd’).

Figura 8: Creación del objeto e para tener un objeto module

Con la variable e creada se puede acceder a todas las opciones que tiene un módulo. Es más, se pueden utilizar ‘atajos’ como e.required para ver qué atributos son obligatorios. Si queremos configurar un atributo se ejecutará e[‘nombreAtributo’], tal y como se puede ver en la imagen superior.

Una vez que se tiene el objeto creado y preparado para ser lanzado, es decir, configurado se puede utilizar el método execute para ejecutar el módulo. Es recomendable configurar el payload y las opciones de éste en caso de ser necesario.

Para este ejemplo se utiliza e.execute(payload=[ruta payload]). Se utiliza una Shell_bind_tcp de manera sencilla. Como se puede ver en la imagen se obtiene un resultado donde se dice que el job es identificado con el número 5.

Figura 9: Ejecución del comando sessions

Lo importante es fijarse en el identificador de la sesión, como ocurre en la consola de Metasploit cuando se ejecuta el comando sessions. Para ver el listado de sesiones desde el intérprete podemos ejecutar el método client.sessions.list. Quizá sea interesante lanzar previamente dir(client.sessions) para ver los métodos disponibles.

¿Cómo interactúo con la sesión? 

Aquí llega una parte sencilla. Una vez identificamos el número de la sesión, se puede hacer uso de client.sessions.session([ID de sesión]) para conseguir un canal por el que enviar comandos y recibir respuestas de ejecución. Para ello, creamos un nuevo objeto y lo almacenamos en una variable, por ejemplo, Shell. Este objeto tiene diferentes métodos, entre los que destacan: Shell.write() y Shell.read().

Figura 10: Comandos shell

Como se puede ver es una forma sencilla de integrar un lenguaje como Python en el uso de Metasploit y sus posibilidades. Se te pueden ocurrir una gran cantidad de scripts en Python. Hay que recordar que Armitage, la GUI de Metasploit, utiliza msfrpc para conectar con el framework. Si eres de Python y quieres jugar con Metasploit utiliza pymetasploit o échale un ojo a la versión 5 de Metasploit y a sus novedades referente a esto.
 
Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDO de Telefónica.

No hay comentarios:

Publicar un comentario