Writing and Importing Modules
Para instalar cualquier nuevo módulo de Metasploit que ya ha sido portado por otros usuarios, se puede optar por actualizar msfconsole desde la terminal, lo que asegurará que todos los últimos exploits, auxiliares y características se instalen en la versión más reciente de msfconsole. Siempre que los módulos portados se hayan enviado a la rama principal del framework Metasploit en GitHub, deberíamos estar actualizados con los últimos módulos.
Sin embargo, si solo necesitamos un módulo específico y no queremos realizar una actualización completa, podemos descargar ese módulo e instalarlo manualmente. Nos centraremos en buscar en ExploitDB módulos de Metasploit disponibles que podamos importar directamente a nuestra versión local de msfconsole.
ExploitDB es una excelente opción al buscar un exploit personalizado. Podemos usar etiquetas para buscar a través de los diferentes escenarios de explotación para cada script disponible. Una de estas etiquetas es Metasploit Framework (MSF), que, si se selecciona, mostrará solo scripts que también están disponibles en formato de módulo de Metasploit. Estos pueden ser descargados directamente de ExploitDB e instalados en nuestro directorio local de Metasploit Framework, desde donde pueden ser buscados y llamados desde dentro de msfconsole.

Supongamos que queremos usar un exploit encontrado para Nagios3, que aprovechará una vulnerabilidad de inyección de comandos. El módulo que estamos buscando es Nagios3 - 'statuswml.cgi' Command Injection (Metasploit). Entonces, iniciamos msfconsole y tratamos de buscar ese exploit específico, pero no podemos encontrarlo. Esto significa que nuestro framework Metasploit no está actualizado o que el módulo específico de exploit para Nagios3 que estamos buscando no está en la versión oficial actualizada del Metasploit Framework.
Búsqueda de Exploits en MSF
Módulos Coincidentes
No obstante, podemos encontrar el código del exploit dentro de las entradas de ExploitDB. Alternativamente, si no queremos usar nuestro navegador web para buscar un exploit específico dentro de ExploitDB, podemos usar la versión de línea de comandos, searchsploit.
Búsqueda con searchsploit
Resultados de Búsqueda
Nota que los archivos terminados en .rb son scripts en Ruby que muy probablemente han sido elaborados específicamente para su uso dentro de msfconsole. También podemos filtrar solo por archivos con terminación .rb para evitar resultados de scripts que no pueden ejecutarse dentro de msfconsole. No todos los archivos .rb se convierten automáticamente en módulos de msfconsole. Algunos exploits están escritos en Ruby sin tener código compatible con módulos de Metasploit. Veremos uno de estos ejemplos en la siguiente subsección.
Filtrar Resultados con searchsploit
Resultados Filtrados
Debemos descargar el archivo .rb y colocarlo en el directorio correcto. El directorio predeterminado donde se almacenan todos los módulos, scripts, complementos y archivos propietarios de msfconsole es /usr/share/metasploit-framework. Las carpetas críticas también están vinculadas simbólicamente en nuestras carpetas de inicio y raíz en la ubicación oculta ~/.msf4/.
Estructura de Directorios de MSF
Estructura de Directorios
Estructura de Directorios en .msf4
Copiamos el exploit en el directorio apropiado después de descargarlo. Nota que nuestra carpeta de inicio en la ubicación .msf4 podría no tener toda la estructura de carpetas que tiene la de /usr/share/metasploit-framework/. Por lo tanto, solo necesitamos crear las carpetas apropiadas para que la estructura sea la misma que la del directorio original, de modo que msfconsole pueda encontrar los nuevos módulos. Después de eso, procederemos a copiar el script .rb directamente a la ubicación principal.
Es importante mencionar que hay ciertas convenciones de nomenclatura que, si no se respetan adecuadamente, generarán errores al intentar que msfconsole reconozca el nuevo módulo que instalamos. Siempre usa snake-case, caracteres alfanuméricos y guiones bajos en lugar de guiones.
Ejemplo de Nombres de Archivos
Carga de Módulos Adicionales en Tiempo de Ejecución
Cargando Módulos Adicionales
Para cargar módulos adicionales en Metasploit, puedes usar el comando loadpath. Por ejemplo:
Alternativamente, también puedes iniciar msfconsole y ejecutar el comando reload_all para que el nuevo módulo instalado aparezca en la lista. Después de ejecutar el comando y no se informan errores, puedes utilizar la función search [nombre] dentro de msfconsole o usar directamente use [ruta-del-módulo] para acceder al módulo recién instalado.
Ejemplo de comandos:
Cuando ejecutas show options, verás algo similar a esto:
Portando Scripts a Módulos de Metasploit
Para adaptar un script de explotación personalizado (en Python, PHP u otro tipo) a un módulo de Ruby para Metasploit, necesitamos aprender el lenguaje de programación Ruby. Ten en cuenta que los módulos de Ruby para Metasploit siempre están escritos utilizando tabulaciones duras.
Cuando comenzamos un proyecto de portado, no necesitamos empezar a codificar desde cero. En su lugar, podemos tomar uno de los módulos de explotación existentes de la categoría en la que se encaja nuestro proyecto y reutilizarlo para nuestro script de portado actual. Es importante mantener nuestros módulos personalizados organizados para que otros testers de penetración puedan beneficiarse de un entorno limpio y organizado al buscar módulos personalizados.
Selecciona un código de explotación para portarlo a Metasploit. En este caso, vamos a trabajar con "Bludit 3.9.2 - Bypass de mitigación de fuerza bruta de autenticación". Necesitamos descargar el script
48746.rby copiarlo a la carpeta/usr/share/metasploit-framework/modules/exploits/linux/http/.Usa el siguiente comando para copiar el archivo:
Abre el archivo que copiaste. En la parte superior, encontrarás las declaraciones
include, que son los mixins necesarios para el módulo. Necesitamos cambiar estos a los apropiados para nuestro módulo.
Para encontrar los mixins, clases y métodos necesarios para que nuestro módulo funcione, consulta la documentación de Rubydoc de Rapid7.
Escritura del Módulo
Durante evaluaciones específicas, a menudo nos enfrentamos a redes personalizadas que ejecutan código propietario. Muchos de los módulos disponibles no son efectivos contra su perímetro, y puede ser difícil escanear y documentar el objetivo correctamente. Aquí es donde puede ser útil usar nuestras habilidades en Ruby para comenzar a codificar nuestros módulos.
Toda la información necesaria sobre la codificación en Ruby para Metasploit se puede encontrar en la página de Rubydoc.info relacionada con el Framework.
Aquí hay un ejemplo de cómo puede verse el inicio de un módulo de explotación:
Prueba de Concepto - Funciones
Al observar nuestro exploit, vemos que se requerirá una lista de palabras en lugar de la variable BLUDITPASS para que el módulo realice un ataque de fuerza bruta contra las contraseñas para el mismo nombre de usuario. Se vería algo así en el siguiente fragmento:
El resto del código del exploit necesita ser ajustado de acuerdo con las clases, métodos y variables utilizados en la adaptación al Framework Metasploit para que el módulo funcione al final. La versión final del módulo se vería así:
Prueba de Concepto
Si deseas aprender más sobre cómo adaptar scripts al Framework Metasploit, consulta el libro Metasploit: A Penetration Tester's Guide de No Starch Press. Rapid7 también ha creado publicaciones en su blog sobre este tema, que se pueden encontrar aquí.
Last updated
Was this helpful?