Hola hacketones! Bienvenidos a un nuevo CTF para la Certificación SEC1 de la ruta Cyber Security 101 de TryHackMe – Metasploit: Introduction
Introducción a Metasploit
Metasploit es el framework de explotación más utilizado. Es una potente herramienta que soporta todas las fases de una prueba de penetración, desde la recopilación de información hasta la postexplotación.
Metasploit tiene dos versiones principales:
- Metasploit Pro : La versión comercial que facilita la automatización y gestión de tareas. Esta versión cuenta con una interfaz gráfica de usuario ( GUI ).
- Metasploit Framework : La versión de código abierto que funciona desde la línea de comandos. Esta sesión se centrará en esta versión, instalada en AttackBox y en las distribuciones de Linux más utilizadas para pruebas de penetración .
Metasploit Framework es un conjunto de herramientas que permiten la recopilación de información, el escaneo, la explotación, el desarrollo de exploits, la postexplotación y mucho más. Si bien su uso principal se centra en las pruebas de penetración , también es útil para la investigación de vulnerabilidades y el desarrollo de exploits.
Los componentes principales del Framework Metasploit se pueden resumir de la siguiente manera:
- msfconsole : La interfaz de línea de comandos principal.
- Módulos : módulos de soporte como exploits, escáneres, cargas útiles, etc.
- Herramientas : Herramientas independientes que facilitan la investigación y evaluación de vulnerabilidades , o las pruebas de penetración. Algunas de estas herramientas son msfvenom, pattern_create y pattern_offset. En este módulo, abordaremos msfvenom, pero pattern_create y pattern_offset son herramientas útiles para el desarrollo de exploits, lo cual queda fuera del alcance de este módulo.
Componentes principales de Metasploit
Al usar Metasploit Framework, interactuará principalmente con la consola . Puede iniciarla desde la terminal de AttackBox con el msfconsole comando. La consola será su interfaz principal para interactuar con los diferentes módulos de Metasploit Framework. Los módulos son pequeños componentes dentro de Metasploit Framework diseñados para realizar una tarea específica, como explotar una vulnerabilidad, escanear un objetivo o ejecutar un ataque de fuerza bruta.
Antes de profundizar en los módulos, sería útil aclarar algunos conceptos recurrentes: vulnerabilidad, exploit y carga útil.
- Exploit: Un fragmento de código que aprovecha una vulnerabilidad presente en el sistema de destino.
- Vulnerabilidad: Un fallo de diseño, codificación o lógica que afecta al sistema objetivo. La explotación de una vulnerabilidad puede dar lugar a la divulgación de información confidencial o a que el atacante ejecute código en el sistema objetivo.
- Carga útil: Un exploit aprovecha una vulnerabilidad. Sin embargo, si queremos que el exploit tenga el resultado deseado (acceder al sistema objetivo, leer información confidencial, etc.), necesitamos usar una carga útil. Las cargas útiles son el código que se ejecuta en el sistema objetivo.
A continuación se listan los módulos y categorías de cada uno. Se proporcionan solo como referencia, pero interactuará con ellos a través de la consola de Metasploit (msfconsole).
Auxiliar
Cualquier módulo de soporte, como escáneres, rastreadores y fuzzers, se puede encontrar aquí.
/opt/metasploit-framework/embedded/framework/modules# tree -L 1 auxiliary/
auxiliary/
├── admin
├── analyze
├── bnat
├── client
├── cloud
├── crawler
├── docx
├── dos├── example.py
├── example.rb
├── fileformat
├── fuzzers
├── gather
├── parser
├── pdf
├── scanner
├── server
├── sniffer
├── spoof
├── sqli
├── voip
└── vsploit
Codificadores
Los codificadores le permitirán codificar el exploit y la carga útil con la esperanza de que una solución antivirus basada en firmas pueda pasarlos por alto.
Las soluciones antivirus y de seguridad basadas en firmas cuentan con una base de datos de amenazas conocidas. Detectan amenazas comparando archivos sospechosos con esta base de datos y emiten una alerta si encuentran una coincidencia. Por lo tanto, los codificadores pueden tener una tasa de éxito limitada, ya que las soluciones antivirus pueden realizar comprobaciones adicionales.
root@ip-10-10-135-188:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 encoders/
encoders/
├── cmd
├── generic
├── mipsbe
├── mipsle
├── php
├── ppc
├── ruby
├── sparc
├── x64
└── x86
Evasión
Aunque los codificadores codifican la carga útil, no deben considerarse un intento directo de evadir el software antivirus. Por otro lado, los módulos de evasión sí lo intentan, con mayor o menor éxito.
root@ip-10-10-135-188:/opt/metasploit-framework/embedded/framework/modules# tree -L 2 evasion/
evasion/
└── windows
├── applocker_evasion_install_util.rb
├── applocker_evasion_msbuild.rb
├── applocker_evasion_presentationhost.rb
├── applocker_evasion_regasm_regsvcs.rb
├── applocker_evasion_workflow_compiler.rb
├── process_herpaderping.rb
├── syscall_inject.rb
├── windows_defender_exe.rb
└── windows_defender_js_hta.rb
Exploits
Exploits, cuidadosamente organizados por sistema objetivo.
root@ip-10-10-135-188:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 exploits/
exploits/
├── aix
├── android
├── apple_ios
├── bsd
├── bsdi
├── dialup
├── example_linux_priv_esc.rb
├── example.py
├── example.rb
├── example_webapp.rb
├── firefox
├── freebsd
├── hpux
├── irix
├── linux
├── mainframe
├── multi
├── netware
├── openbsd
├── osx
├── qnx
├── solaris
├── unix
└── windows
NOPs
Las NOP (No Operation) no hacen nada, literalmente. Se representan en la familia de CPU Intel x86 con 0x90, tras lo cual la CPU no hará nada durante un ciclo. Se suelen utilizar como búfer para lograr tamaños de carga útiles consistentes.
root@ip-10-10-135-188:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 nops/
nops/
├── aarch64
├── armle
├── cmd
├── mipsbe
├── php
├── ppc
├── sparc
├── tty
├── x64
└── x86
Payloads
Las cargas útiles son códigos que se ejecutarán en el sistema de destino.
Los exploits aprovecharán una vulnerabilidad en el sistema objetivo, pero para lograr el resultado deseado, necesitaremos una carga útil. Algunos ejemplos podrían ser: obtener un shell, instalar malware o una puerta trasera en el sistema objetivo, ejecutar un comando o ejecutar calc.exe como prueba de concepto para añadirla al informe de la prueba de penetración. Iniciar la calculadora en el sistema objetivo de forma remota mediante la aplicación calc.exe es una forma sencilla de demostrar que podemos ejecutar comandos en el sistema objetivo.
Ejecutar comandos en el sistema de destino ya es un paso importante, pero es mejor contar con una conexión interactiva que permita escribir comandos que se ejecutarán en el sistema de destino. Esta línea de comandos interactiva se denomina «shell». Metasploit permite enviar diferentes cargas útiles que pueden abrir shells en el sistema de destino.
root@ip-10-10-135-188:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 payloads/
payloads/
├── adapters
├── singles
├── stagers
└── stages
Verá cuatro directorios diferentes bajo cargas útiles: adaptadores, sencillos, preparadores y etapas.
- Adaptadores: Un adaptador encapsula cargas útiles individuales para convertirlas a diferentes formatos. Por ejemplo, una carga útil individual normal se puede encapsular dentro de un adaptador de PowerShell , lo que generará un único comando de PowerShell que la ejecutará.
- Singles: cargas útiles autónomas (agregar usuario, iniciar notepad.exe, etc.) que no necesitan descargar un componente adicional para ejecutarse.
- Stagers: Responsables de establecer un canal de conexión entre Metasploit y el sistema de destino. Útil al trabajar con cargas útiles preconfiguradas. Las cargas útiles preconfiguradas primero cargan un stager en el sistema de destino y luego descargan el resto de la carga útil (stage). Esto ofrece algunas ventajas, ya que el tamaño inicial de la carga útil será relativamente pequeño en comparación con la carga útil completa enviada de una sola vez.
- Etapas: Descargadas por el stager. Esto permitirá usar cargas útiles de mayor tamaño.
Metasploit tiene una forma sutil de ayudarle a identificar cargas útiles individuales (también llamadas “en línea”) y cargas útiles por etapas.
- genérico/shell_reverse_tcp
- windows/x64/shell/reverse_tcp
Ambos son shells de Windows inversos. El primero es una carga útil en línea (o única), como lo indica el «_» entre «shell» y «reverse». Mientras que el segundo es una carga útil por etapas, como lo indica el «/» entre «shell» y «reverse».
Post
Los módulos posteriores serán útiles en la etapa final del proceso de prueba de penetración mencionado anteriormente, posterior a la explotación.
root@ip-10-10-135-188:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 post/
post/
├── aix
├── android
├── apple_ios
├── bsd
├── firefox
├── hardware
├── linux├── multi
├── networking
├── osx
├── solaris
└── windows
Si desea familiarizarse más con estos módulos, puede encontrarlos en la carpeta de módulos de su instalación de Metasploit . Para AttackBox, se encuentran en /opt/ metasploit -framework/embedded/framework/modules
Responda las siguientes preguntas
¿Cuál es el nombre del código que aprovecha una vulnerabilidad en el sistema objetivo?
Exploit
¿Cuál es el nombre del código que se ejecuta en el sistema objetivo para lograr el objetivo del atacante?
Payload
¿Cómo se denominan las cargas útiles autónomas?
Singles
¿» windows/x64/pingback_reverse_tcp» se encuentra entre las cargas útiles individuales o escalonadas?
Singles
Consola Msf
Como se mencionó anteriormente, la consola será la interfaz principal de Metasploit Framework. Puede iniciarla usando el msfconsolecomando en su terminal AttackBox o en cualquier sistema donde tenga instalado Metasploit Framework.
msfconsole

Una vez iniciado, verá que la línea de comandos cambia a msf6 (o msf5, según la versión instalada de Metasploit ). La consola de Metasploit (msfconsole) se puede usar como una consola de comandos normal, como se muestra a continuación. El primer comando es ls[que muestra el contenido de la carpeta desde la que se inició Metasploitmsfconsole con el comando].
A continuación, se envía un mensaje a la dirección IP DNSping de Google (8.8.8.8). Como trabajamos desde AttackBox, que es Linux, tuvimos que añadir esta opción para que solo se enviara un ping. De lo contrario, el proceso de ping continuaría hasta que se detuviera usando .-c 1CTRL+C

Admitirá la mayoría de los comandos de Linux , incluido clear (para borrar la pantalla de la terminal), pero no le permitirá utilizar algunas funciones de una línea de comando normal (por ejemplo, no admite la redirección de salida), como se ve a continuación.

Hablando del tema, el comando de ayuda puede usarse solo o para un comando específico. A continuación se muestra el menú de ayuda para el comando «set» que abordaremos próximamente.

Puede utilizar el comando historial para ver los comandos que ha escrito anteriormente.

Una característica importante de msfconsole es la compatibilidad con el autocompletado de tabulaciones. Esto resultará útil más adelante al usar comandos de Metasploit o al trabajar con módulos. Por ejemplo, si empiezas a escribir he y pulsas la tecla de tabulación, verás que se autocompleta a help.
Msfconsole se gestiona por contexto; esto significa que, a menos que se configure como variable global, se perderán todos los ajustes de los parámetros si se cambia el módulo que se ha decidido usar. En el ejemplo siguiente, se ha utilizado el exploit ms17_010_eternalblue y se han definido parámetros como RHOSTS. Si se cambia a otro módulo (por ejemplo, un escáner de puertos), se deberá volver a definir el valor RHOSTS, ya que todos los cambios realizados se mantienen en el contexto del exploit ms17_010_eternalblue.
Veamos el siguiente ejemplo para comprender mejor esta característica. Utilizaremos el exploit MS17-010 «Eternalblue» como ilustración.
Una vez que escriba el use exploit/windows/smb/ms17_010_eternalblue comando, verá que la línea de comandos cambia de «msf6» a «msf6 exploit(windows/ smb /ms17_010_eternalblue)». «EternalBlue» es un exploit presuntamente desarrollado por la Agencia de Seguridad Nacional de EE. UU. (NSA) para una vulnerabilidad que afecta al servidor SMBv1 en numerosos sistemas Windows. El SMB (bloque de mensajes del servidor) se usa ampliamente en redes Windows para compartir archivos e incluso para enviarlos a impresoras. EternalBlue fue filtrado por el grupo cibercriminal «Shadow Brokers» en abril de 2017. En mayo de 2017, esta vulnerabilidad fue explotada a nivel mundial en el ataque de ransomware WannaCry.

El módulo a utilizar también se puede seleccionar con el use comando seguido del número al comienzo de la línea de resultado de la búsqueda.
Aunque el indicador ha cambiado, notará que aún podemos ejecutar los comandos mencionados. Esto significa que no ingresamos a una carpeta como se esperaría en la línea de comandos de un sistema operativo.

El mensaje nos indica que ya tenemos un contexto definido en el que trabajaremos. Puedes comprobarlo escribiendo el comando «show options».

Esto mostrará las opciones relacionadas con el exploit seleccionado anteriormente. El comando «show options» tendrá diferentes resultados según el contexto. El ejemplo anterior muestra que este exploit requiere que definamos variables como RHOSTS y RPORT. Por otro lado, un módulo de postexplotación podría requerir que definamos un ID de SESIÓN (ver captura de pantalla a continuación). Una sesión es una conexión existente al sistema de destino que utilizará el módulo de postexplotación.

El show comando puede usarse en cualquier contexto, seguido de un tipo de módulo (auxiliar, carga útil, exploit, etc.) para listar los módulos disponibles. El siguiente ejemplo muestra las cargas útiles que pueden usarse con el exploit ms17-010 de Eternalblue.

Si se utiliza desde el indicador msfconsole, el show comando enumerará todos los módulos.
Los comandos use y show optionsque hemos visto hasta ahora son idénticos para todos los módulos en Metasploit .
Puedes salir del contexto usando el back comando.
msf6 exploit(windows/smb/ms17_010_eternalblue) > back
Se puede obtener más información sobre cualquier módulo escribiendo el info comando dentro de su contexto.

Como alternativa, puede usar el info comando seguido de la ruta del módulo desde el símbolo del sistema de msfconsole (p. ej., info exploit/windows/smb/ms17_010_eternalblue). Info no es un menú de ayuda; muestra información detallada sobre el módulo, como su autor, fuentes relevantes, etc.
Buscar
Uno de los comandos más útiles de msfconsole es search. Este comando buscará en la base de datos de Metasploit Framework los módulos relevantes para el parámetro de búsqueda indicado. Puede realizar búsquedas utilizando números CVE , nombres de exploits (eternalblue, heartbleed, etc.) o el sistema de destino.

La salida del search comando proporciona una descripción general de cada módulo devuelto. Puede observar que la columna «nombre» ya proporciona más información que solo el nombre del módulo. Puede ver el tipo de módulo (auxiliar, exploit, etc.) y su categoría (escáner, administrador, Windows, Unix, etc.). Puede usar cualquier módulo devuelto en un resultado de búsqueda con el comando «use» seguido del número al principio de la línea de resultados (por ejemplo, use 0 en lugar de use auxiliary/admin/smb/ms17_010_command) .
Otra información esencial se encuentra en la columna «clasificación». Los exploits se clasifican según su fiabilidad. La tabla a continuación muestra sus respectivas descripciones.

Puede dirigir la función de búsqueda utilizando palabras clave como tipo y plataforma.
Por ejemplo, si quisiéramos que los resultados de búsqueda solo incluyeran módulos auxiliares, podríamos establecer el tipo como auxiliar. La siguiente captura de pantalla muestra el resultado del comando telnet «search type:auxiliary».

Recuerde que los exploits aprovechan una vulnerabilidad en el sistema objetivo y siempre pueden mostrar un comportamiento inesperado. Un exploit de bajo nivel puede funcionar perfectamente, mientras que uno de alto nivel puede no funcionar o, peor aún, bloquear el sistema objetivo.
Responda las siguientes preguntas
¿Cómo buscarías un módulo relacionado con Apache?
search apache
¿Quién proporcionó el módulo auxiliary/scanner/ssh/ssh_login?
todb
Trabajar con módulos
Una vez que haya ingresado al contexto de un módulo usando el use comando seguido del nombre del módulo, como se vio anteriormente, deberá configurar los parámetros. Los parámetros más comunes que usará se enumeran a continuación. Recuerde que, según el módulo que use, podría ser necesario configurar parámetros adicionales o diferentes. Se recomienda usar el show optionscomando para enumerar los parámetros requeridos.
Todos los parámetros se configuran utilizando la misma sintaxis de comando:
set PARAMETER_NAME VALUE
Antes de continuar, recuerde siempre revisar el indicador de msfconsole para asegurarse de estar en el contexto correcto. Al trabajar con Metasploit , puede ver cinco indicadores diferentes:
- El símbolo del sistema normal: no puedes usar comandos de Metasploit aquí.
root@ip-10-10-XX-XX:~#
- El símbolo del sistema de msfconsole: msf6 (o msf5, según la versión instalada) es el símbolo del sistema de msfconsole. Como puede ver, aquí no se define ningún contexto, por lo que no se pueden usar comandos específicos del contexto para configurar parámetros y ejecutar módulos.
msf6 >
- Un mensaje de contexto: Una vez que haya decidido usar un módulo y haya usado el comando «set» para seleccionarlo, msfconsole mostrará el contexto. Puede usar comandos específicos del contexto (p. ej., «set RHOSTS 10.10.xx»).
msf6 exploit(windows/smb/ms17_010_eternalblue) >
- El mensaje de Meterpreter : Meterpreter es una carga útil importante que veremos en detalle más adelante en este módulo. Esto significa que se cargó un agente de Meterpreter en el sistema de destino y se conectó de nuevo con usted. Puede usar comandos específicos de Meterpreter aquí.
meterpreter >
- Una línea de comandos en el sistema objetivo: Una vez completado el exploit, podrá acceder a una línea de comandos en el sistema objetivo. Esta es una línea de comandos normal, y todos los comandos que escriba aquí se ejecutarán en el sistema objetivo.
C:\Windows\system32>
Como se mencionó anteriormente, el show optionscomando enumerará todos los parámetros disponibles.

Como puede ver en la captura de pantalla anterior, algunos de estos parámetros requieren un valor para que el exploit funcione. Algunos valores obligatorios ya estarán predefinidos; asegúrese de verificar si deben permanecer iguales para su objetivo. Por ejemplo, un exploit web podría tener un valor RPORT (puerto remoto: el puerto del sistema objetivo al que Metasploit intentará conectarse para ejecutar el exploit) preestablecido en 80, pero su aplicación web objetivo podría estar usando el puerto 8080.
En este ejemplo, estableceremos el parámetro RHOSTS en la dirección IP de nuestro sistema de destino mediante el set comando.

Una vez que haya configurado un parámetro, puede usar el show optionscomando para verificar que el valor se haya configurado correctamente.
Los parámetros que utilizarás a menudo son:
- RHOSTS: «Host remoto», la dirección IP del sistema de destino. Se puede configurar una sola dirección IP o un rango de red. Esto admitirá la notación CIDR (Enrutamiento Interdominio sin Clase) (/24, /16, etc.) o un rango de red (10.10.10.x – 10.10.10.y). También puede usar un archivo con los destinos, un destino por línea, usando file:/path/of/the/target_file.txt, como se muestra a continuación.

- RPORT: “Puerto remoto”, el puerto en el sistema de destino en el que se ejecuta la aplicación vulnerable.
- CARGA ÚTIL: La carga útil que utilizarás con el exploit.
- LHOST: “Localhost”, la dirección IP de la máquina atacante (su AttackBox o Kali Linux ).
- LPORT: «Puerto local», el puerto que usará el shell inverso para conectarse. Este es un puerto en su equipo atacante y puede configurarlo como cualquier puerto que no esté usado por ninguna otra aplicación.
- SESIÓN: Cada conexión establecida con el sistema de destino mediante Metasploit tendrá un ID de sesión. Este ID se usará con módulos de postexplotación que se conectarán al sistema de destino mediante una conexión existente.
- Puede anular cualquier parámetro establecido con el comando «set» y asignarle un valor diferente. También puede borrar cualquier valor de parámetro unseto todos los parámetros establecidos con el unset allcomando.

Puedes usar el setg comando para establecer valores que se usarán en todos los módulos. Este setg comando se usa igual que el comando set. La diferencia radica en que si usas el set comando para establecer un valor usando un módulo y cambias a otro, tendrás que volver a establecerlo. El setg comando permite establecer el valor para que se use por defecto en diferentes módulos. Puedes borrar cualquier valor establecido setg con unsetg.
El siguiente ejemplo utiliza el siguiente flujo;
- Usamos el explotable ms17_010_eternalblue
- Establecemos la variable RHOSTS usando el setg comando en lugar del comando set
- Usamos el back comando para salir del contexto del exploit
- Utilizamos un auxiliar (este módulo es un escáner para descubrir vulnerabilidades MS17-010)
- El show optionscomando muestra que el parámetro RHOSTS ya está completado con la dirección IP del sistema de destino.

El setg comando establece un valor global que se utilizará hasta que salga de Metasploit o lo borre mediante el unsetg comando.
Uso de módulos
Una vez configurados todos los parámetros del módulo, puede iniciarlo con el exploit comando. Metasploit también admite el run comando, que es un alias creado para el exploit comando, ya que la palabra «exploit» no tenía sentido al usar módulos que no eran exploits (escáneres de puertos, escáneres de vulnerabilidades, etc.).
El exploit comando se puede utilizar sin ningún parámetro o utilizando el -zparámetro “ ”.
El exploit -z comando ejecutará el exploit y pondrá la sesión en segundo plano tan pronto como se abra.

Esto le devolverá el mensaje de contexto desde el que ejecutó el exploit.
Algunos módulos admiten esta check opción. Esto comprobará si el sistema objetivo es vulnerable sin explotarlo.
Sesiones:
Una vez explotada con éxito una vulnerabilidad, se creará una sesión. Este es el canal de comunicación establecido entre el sistema objetivo y Metasploit .
Puede utilizar el background comando para poner en segundo plano el mensaje de sesión y volver al mensaje de msfconsole.

Alternativamente, CTRL+Zse puede utilizar para sesiones en segundo plano.
El sessions comando se puede utilizar desde el símbolo del sistema de msfconsole o desde cualquier contexto para ver las sesiones existentes.

Para interactuar con cualquier sesión, puedes utilizar el sessions -i comando seguido del número de sesión deseado.

Responda las siguientes preguntas
¿Cómo configurarías el valor de LPORT a 6666?
set LPORT 6666
¿Cómo establecerías el valor global para RHOSTS en 10.10.19.23?
setg RHOSTS 10.10.19.23
¿Qué comando usarías para borrar una carga útil establecida?
unset PAYLOAD
¿Qué comando utiliza para proceder con la fase de explotación?
Exploit
Resumen
Como hemos visto hasta ahora,MetasploitEs una herramienta poderosa que facilita el proceso de explotación. Este proceso consta de tres pasos principales: encontrar la vulnerabilidad, personalizarla y explotar el servicio vulnerable.
Metasploitproporciona muchos módulos que puede utilizar para cada paso del proceso de explotación. A través de esta sala, hemos visto los componentes básicos deMetasploity su uso respectivo.
Lo mejor sería que también hubieras utilizado el exploit ms17_010_eternalblue para obtener acceso al objetivo.VM.
En las siguientes salas cubriremosMetasploity sus componentes con más detalle. Una vez completado, este módulo debería proporcionarle una buena comprensión de las capacidades deMetasploit.
Sigan entrenando, Hacketones, Nos vemos en el próximo laboratorio!!!