Guillermo QuintanaHerramientas, Tendencias, Noticias1 year ago75 Views
Metasploit es un Framework multiplataforma escrito en Ruby que abstrae las tareas típicas de una intrusión, ofreciendo un esquema modular donde combinar e integrar distintos tipos de exploits y herramientas de acceso y control de equipos y servicios comprometidos. Incluye también módulos adicionales para las fases de rastreo y enumeración.
Metasploit sigue una arquitectura modular, organizada alrededor de un núcleo que estructura la aplicación y ofrece las funcionalidades básicas.
Diagrama completo de la arquitectura de Metasploit
Piezas de código que explotan una vulnerabilidad concreta que permite un acceso no previsto. Suelen ser específicas del sistema operativo y de la versión concreta del servicio, aunque hay algunos exploits independientes de la plataforma.
Su uso principal es como ”vector” para la inyección de un payload específico que ofrezca al atacante algún tipo de acceso y/o control del equipo comprometido.
Piezas de código que permiten algún tipo de acceso o control sobre un equipo que ha sido comprometido mediante la explotación de alguna vulnerabilidad. Suelen ser específicos del sistema operativo, aunque algunos basados en Java o lenguajes de Script son independientes de la plataforma.
Uno de los payloads más potentes que ofrece Metasploit es Meterpreter. Se trata de un payload que ofrece un intérprete de comandos en el sistema comprometido, complementado con una serie de comandos específicos que soportan tareas típicas de una intrusión (recopilación de información del sistema comprometidos, keylogger, ocultación de rastros, etc).
Módulos auxiliares que automatizan tareas complementarias empleadas habitualmente en test de intrusión. Fundamentalmente se trata de diversos tipos de escáneres: escáner de puertos genéricos ó escáneres específicos para aplicaciones/servicios concretos.
También se proveen módulos para recopilar credenciales de acceso basados en diccionarios o romper contraseñas, enumeradores de directorios, herramientas para recopilación de información de red y una colección de fuzzers que generan cadenas de entrada aleatorias con las que detectar posibles vulnerabilidades en la validación de entradas.
Piezas de código específicas de cada arquitectura o aplicación que automatizan tareas relativas al mantenimiento, extensión y/o ocultación del acceso a equipos comprometidos.
Fundamentalmente ofrecen funcionalidades para recopilar información del sistema comprometidos (servicios, usuarios, archivos, …), para escalar privilegios obteniendo credenciales de administrador o para ocultar el rastro de la explotación.
Módulos complementarios usados para generar distintos tipos de códigos NOP (No operation) para diferentes arquitecturas y CPUs a utilizar en el código de los exploits y sus respectivos payloads.
Módulos complementarios utilizados para ofuscar y ocultar el código de los exploits y sus respectivos payloads empleando diversos tipos de codificación. Son un mecanismo de evasión para evitar la detección del ataque por parte de IDS (sistemas de detección de intrusiones) o antivirus.
Hay diferentes interfaces para el framework Metasploit, cada uno con sus ventajas y desventajas. Como tal, no hay una interfaz perfecta para usar con MSF, aunque msfconsole es la única forma soportada para acceder a la mayoría de las características del Framework. Es por eso que, de ahora en adelante, vamos a hablar solamente de la utilización de msfconsole.
Pantalla de bienvenida de msfconsole
Escribiendo “help” o “?” en el command promp de msf, mostrará una lista de los comandos disponibles junto una descripción de su uso.
Salida del comando ‘help’
Una de las características más útiles de msfconsole es la completación con la tecla ‘Tab’. Con la gran variedad de módulos disponibles, puede ser difícil recordar el nombre exacto y ruta de algún módulo en particular que se quiera usar. Como en la mayoría de los shells, escribiendo lo que sabes y presionando “Tab” mostrará una lista de las opciones disponibles o se auto completará la palabra si hay una sola opción.
Introduciendo “show” en el prompt de msfconsole mostrará cada módulo disponible en Metasploit.
Hay una variedad de comandos “show” que podemos utilizar, pero los que vamos a utilizar con más frecuencia son “show auxiliary”, “show exploits” y “show payloads”.
Como podemos ver, hay muchos payloads disponibles. Afortunadamente cuando estamos utilizando un exploit determinado, usando “show payloads” solo veremos los payloads que son compatibles para ese particular exploit.
Por ejemplo, si es un exploit para Windows, no se mostrarán los payloads para Linux.
Si hemos seleccionado un módulo específico, podemos utilizar el comando “show options” para mostrar las opciones disponibles y/o requeridas para ese módulo en específico.
Si no estamos seguros de si un sistema operativo es vulnerable a un particular exploit, podemos ejecutar el comando “show targets” dentro del contexto de un módulo de exploit para ver qué objetivos están soportados.
Los objetivos para el exploit ms08_067_netapi
Si deseamos seguir mejorando un exploit, podemos ver las opciones avanzadas ejecutando “show advanced”.
El msfconsole incluye una funcionalidad de búsqueda basada en expresiones regulares. Si tenemos alguna idea general de lo que estamos buscando, podemos buscarlo con “search”.
La ayuda del comando ‘search’ nos muestra sus múltiples opciones
El comando “info” proporciona información detallada sobre un determinado módulo incluyendo todas las opciones, objetivos, y otras informaciones.
Información del exploit ms08_067_netapi
Cuando se ha decidido por un módulo en particular, utilizamos el comando “use” para seleccionarlo.
Utilizando el comando “connect” con una dirección IP y un número de puerto, podemos conectarnos a un host remoto desde msfconsole igual como si usaramos netcat o telnet.
El comando “set” es usado para configurar las opciones del módulo que actualmente estamos utilizando.
Definición de la variable ‘RHOST’
No hay muchos exploits que lo soporten, pero hay una opción de “check” la cual comprueba si el objetivo es vulnerable a un exploit en particular en lugar de explotarla.
Con el fin de no escribir mucho durante un pentest, podemos establecer variables globales dentro de msfconsole. Podemos hacer esto con el comando “setg”. Una vez que se ha establecido, la podemos utilizar en muchos exploits y módulos auxiliares a nuestro gusto. También la podemos guardar para usarlo la próxima vez que utilicemos msfconsole.
Sin embargo, ciertos datos no son guardados, así que siempre debemos revisar las opciones definidas antes de usar “run” o “exploit”. Por el contrario, podemos usar el comando “unsetg” para eliminar una variable global. Metasploit no es sensible a las mayúsculas (es lo mismo definir una variable en mayúsculas que en minúsculas)
Para lanzar un exploit, podemos usar el comando “exploit” mientras que si usamos un módulo auxiliar, el uso correcto es “run” aunque “exploit” funciona también.
Cuando hayamos terminado de usar un módulo, o si seleccionamos el módulo equivocado, podemos usar el comando “back” para salir de ese contexto. Esto, sin embargo no es requerido, porque podemos cambiar de módulo estando dentro de otro. Como recordatorio, las variables son cambiadas si son establecidas globalmente.
Algunos ataques como Karmetasploit usan archivos adicionales que se pueden cargar a través de msfconsole usando el comando “resource”. Estos archivos son unos scripts básicos para msfconsole. Ejecutan los comandos del archivo en secuencia.
Si ejecutamos el comando “irb”, cambiará al modo de edición de scripts en ruby, donde podremos usar comandos y crear scripts en el momento.
Metasploit contiene muchos tipos diferentes de payloads, cada uno cumple un rol único dentro del framework. Echemos un vistazo a los varios tipos de payloads disponibles para hacernos una idea de cuándo debería utilizarse cada uno.
Un payload único conteniendo el exploit y el código shell (shellcode) completo para la tarea seleccionada. Los payloads en línea son más estables por diseño que sus contrapartes porque contienen todo en uno. Sin embargo algunos exploits no soportan el tamaño resultante de estos payloads.
Los payloads staged trabajan conjuntamente con los payloads stage para llevar a cabo una tarea específica. Un staged establece un canal de comunicación entre el atacante y la víctima y lee en un payload efectuado lo que debe ejecutar en el host remoto.
Meterpreter, es el diminutivo de Meta-Interpreter, y es un payload avanzado, multi-facético, que opera por medio de inyección en librerías dinámicas (dll). El Meterpreter reside completamente en la memoria del host remoto y no deja rastros en el disco duro, haciéndolo muy difícil de detectar con técnicas forenses convencionales. Los scripts y plugins se pueden cargar y descargar dinamicamente segun se necesitan. El desarrollo de Meterpreter es muy poderoso y en constante evolución.
PassiveX es un payload que puede ayudar a evitar cortafuegos con la salida restringida. Esto lo realiza utilizando un control ActiveX para crear una instancia oculta de Internet Explorer. Utilizando el nuevo control ActiveX, se comunica con el atacante por medio de peticiones y respuestas HTTP.
El bit NX (No eXecute) es una característica incorporada en algunas CPUs para prevenir que se ejecute código en ciertas áreas de la memoria, En Windows, NX esta implementado como Data Execution Prevention (DEP), Prevención de Ejecución de Datos. Los payloads NoNX de Metasploit están diseñados para evitar DEP.
Los payloads Ordinales son payloads staged basados en Windows que tienen distintas ventajas y desventajas. Las ventajas son que trabajan en cualquier sabor y lenguaje de Windows a partir de Windows 9x sin la definición explícita de una dirección de retorno. También son extremadamente pequeños. Sin embargo, dos desventajas muy específicas hacen que no sean la opción por defecto. La primera reside en el hecho de que ws2_32.dll se carga en el proceso que está siendo explotado antes de la explotación. La segunda es que es un poco menos estable que los otros stageds.
Los payloads IPv6 de Metasploit, como indica su nombre, han sido construidos para funcionar sobre redes IPv6.
La Inyección DLL Reflectiva es una técnica mediante la cual un staged payload es inyectado en un proceso corriendo en la memoria del host comprometido, sin tocar nunca el disco duro del host. Ambos payloads VNC y Meterpreter hacen uso de la inyección DLL reflectiva.
Como un ejemplo rápido de utilización de Metasploit, podemos citar lo siguientes pasos:
Tomando el control de un Windows XP a través del exploit ms08_067_netapi
En muchos de los payloads disponibles podremos observar las palabras ‘bind’ o ‘reverse’. Siempre veremos una o la otra, nunca las dos juntas.
Esto hace referencia al método de conexión que utiliza el payload para comunicarse con el atacante.
Bind: Abren un puerto (lo ponen en ‘escucha’) y esperan la conexión por parte del atacante.
Reverse: Hace que la víctima inicie una conexión saliente hacia el sistema del atacante.
Esta diferencia, aunque parezca menor, es de suma importancia al momento de seleccionar un payload. Y su elección va a depender de cómo puedan conectarse los sistemas involucrados (víctima y atacante).
En el caso de que la víctima tenga una dirección IP pública y no cuente con un firewall habilitado (o lo tenga mal configurado) y el atacante no posea una dirección IP pública, seguramente va a ser recomendable un payload del tipo ‘bind’, para abrir un puerto en la víctima y que el atacante pueda conectarse.
En el caso de que la víctima posea un firewall y el atacante posea una dirección IP pública, será recomendable la utilización de un payload ‘reverse’.
Estos dos casos enumerados no son los únicos, pero sirven para clarificar un poco en qué momentos puede ser conveniente uno u otro tipo de payload.
A continuación tenemos una lista de comandos que van a ser de utilidad una vez que hayamos tomado el control de un sistema remoto y tengamos una sesión de Meterpreter.
Muestra una lista de todos los procesos activos del sistema.
Muestra la configuración de red
Muestra la tabla de asociaciones ARP
Muestra información general sobre el sistema
Sirven para subir y bajar archivos (respectivamente).
Permite migrar el proceso de Meterpreter (que se ejecuta ‘pegándose’ a otro proceso, para no ser detectado).
Esto se utiliza, generalmente, para migrar a un proceso que no debería ser terminado, en el caso de que actualmente Meterpreter se esté ejecutando dentro de un proceso que posiblemente termine (como un proceso de navegador web).
En el caso de que el proceso en el cual se está ejecutando Meterpreter, sea terminado, se cerrará nuestra sesión, como podemos ver en la siguiente imagen.
Permite abrir una shell (línea de comandos).
Inicia un proceso keylogger (captura las teclas presionadas por los usuarios del sistema).
Captura la pantalla de la víctima.
Los comandos “webcam_*” permiten acceder a las webcam del sistema vulnerado.
Tendencias4 months ago
Herramientas7 months ago
AprendizajeYesterday
Documentación4 months ago
Herramientas7 months ago










frenify: Thank you for your kind words! We’re glad you enjoyed the post. Stay tuned for more content – we’ve got plenty more coming your way.
frenify: I really enjoyed reading this. The content is informative, and the layout makes it so easy to follow. Looking forward to more posts like this! Keep up the great work!