29 dic 2017

Creando un módulo de Metasploit de tipo Auxiliary


Aprovechando los días de descanso, he vuelto a jugar con Metasploit y me ha dado por escribir un post sobre cómo crear nuestro propio módulo en Metasploit. Podemos elegir si tirar por la rama Exploit o por Auxiliary, para ello deberemos heredar de una de las siguientes opciones:

  • Msf::Exploit::Remote
  • Msf::Exploit::Local
  • Msf::Auxiliary

En este caso nos decantamos por desarrollar un módulo dentro de Auxiliary, aquí buscamos crear una funcionalidad útil, que no está relacionada con la explotación. Un tipo podría ser el averiguar el servidor y versión de este que se encuentra corriendo detrás de un determinado puerto.

El módulo que se va a crear, va a servir para recorrer un fichero y hacer peticiones HTTP a un host para saber si una URI se encuentra o no, como, por ejemplo:

  • flu-project.com/index
  • flu-project.com/test

Un ejemplo del fichero que se va a utilizar:


En la primera línea importamos el fichero msf/core, si quieres echar un vistazo a que contiene, aquí el enlace al código en el GitHub. Se crea la clase que hereda de Msf::Auxiliary y acto seguido incluimos el código de Msf::Exploit::Remote::HttpClient en nuestro archivo, para poder usarlo.

En este tipo de módulo se tiene que rellenar la función initialize (arriba) y la función run (abajo), como su nombre indica la primera función se encarga de inicializar el módulo y la segunda esa llamada cuando ejecutas el comando run en Metasploit. Se pueden agregar todas las funciones que desees, pero sin olvidar que run desencadena las acciones.

Si vemos la función initialize:


  • La parte de Super, damos los valores de nombre del módulo, una descripción, el autor y la licencia, pero se pueden hacer más cosas, como, por ejemplo, utilizar DefaultOptions para dar un valor por defecto a los atributos del módulo.
  • En register_options, se registran nuevos atributos, uno de tipo String, para guardar la ruta del fichero a utilizar, y otro booleano, para activar o no el modo Verbose.
  • Y en deregister_options, se pueden eliminar atributos que no usemos.

La segunda y última parte del código se muestra a continuación (el último end termina la clase):



Ahora, la función que se encarga de realizar el trabajo “duro” run, que aquí es algo sencillo, se lee el fichero y se recorre línea a línea haciendo peticiones HTTP con la función send_request_raw que trae el Módulo HttpClient incluido anteriormente, para ver el código de esta función, consulta este link. Los parámetros que se pasan aquí son bastante descriptivos. Por último, se comprueba la respuesta, para pintar por pantalla la información, o no (según código de respuesta o verbose).

Se puede ver el uso de las siguientes funciones que facilita Metasploit para pintar por pantalla (los colores no son exactamente los mismos):

  • print_status: veras que pinta [*] mensaje.
  • print_good: el que empieza por [+].
  • print_error: el que empieza por [-].
Este módulo lo he agregado a la siguiente ruta:

/usr/share/metasploit-framework/modules/auxiliary/scanner

Aquí he creado una carpeta llamada testing, para agregar mis propios módulos, y tenerlos más localizados. Y el archivo le he llamado test_uris.rb (para usar el módulo se hace referencia a este nombre, sin la extensión).

A continuación, se deja una imagen del uso del módulo, en el código se dio un valor por defecto a la ruta del fichero, por eso no he necesitado configurarlo, pero tu deberías darle la ruta que contiene el fichero con set FILE <path>:


Como se puede ver, crear un módulo para Metasploit no es nada del otro mundo, lo puedes hacer todo lo complejo que quieras.  Si quieres iniciarte o profundizar en este gran framework, el siguiente libro es muy recomendable: Metasploit para pentesters.


Autor: Josué Encinar García (@JosueEncinar). Ingeniero de Software por la Universidad Rey Juan Carlos, estudiante del Máster Universitario en Seguridad de Tecnologías de la Información y de las
Comunicaciones en la Universidad Europea de Madrid. Analista de Seguridad en Accenture. Co-Fundador de @_ciberbyte_.

No hay comentarios:

Publicar un comentario