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