Metasploit: introducción al pentesting

Metasploit es un proyecto open source creado por H.D Moore que facilita la explotación de vulnerabilidades de seguridad en los tests de intrusión.

Está dividido en módulos que implementan distintas funcionalidades, de forma que es extremadamente sencillo incrementar las funciones de la herramienta.

Metasploit tiene 4 interfaces distintas: msfconsole, msfcli, Armitage y web. Sin embargo, en este post me centraré en explicar la más utilizada, la consola de comandos de metasploit msfconsole.

Acceder a ella es muy sencillo, basta con levantar la base de datos y escribir en la terminal msfconsole. Tanto Kali como Parrot la traen instaslada (si aún no te has decidido por un sistema operativo, quizá deberías leer este post):

Pero antes de empezar, comentar que metasploit dispone de un conjunto de herramientas que se pueden lanzar independientemente, sin necesidad de tener que cargar todo el framework para utilizarlas. A continuación expongo un breve resumen de las más importantes:

Unifica las herramientas Msfpayload y Msfencode. 

Msfpayload permite la generación de shellcodes en distintos lenguajes de programación, así como la creación de ejecutables que inyecten código malicioso en el objetivo. 

Msfencode impide a los IDS, antivirus, etc. la detección del archivo (payload) que hayamos creado con Msfpayload. A grandes rasgos, es un ofuscador.

Msfpescan escanea exes o DLLs de Windows para conseguir el código máquina, mientras que msfelfscan lo hace en aplicaciones ELF de Linux.

Se utiliza para el desarrollo de exploits. Analiza un binario y devuelve los gadgets utilizables.

Permite crear un demonio de Metasploit que quede a la escucha de un puerto, y que se pueda conectar un cliente mediante netcat.

En proximos posts hablaré sobre estas herramientas en específico, dado el tremendo potencial que tienen algunas como msfvenom.

Terminología

Antes de continuar, voy a explicarte algunos términos clave a la hora de realizar un pentesting. 

En primer lugar, entendamos qué es un exploit. Un exploit  es un código que permite a un atacante explotar una vulnerabilidad. Está formado por dos partes: el código malicioso y el payload. 

El código malicioso va a ser aquel que explote cierta vulnerabilidad que tenga un sistema. El payload es el que establece una conexión entre atacante y víctima.

Hay tres tipos de payloads. En primer lugar, tenemos los payloads de tipo single. Estos realizan tareas concretas, como pueden ser crear un usuario, ejecutar un comando, o hacer un bind a una shell. En segundo lugar, encontramos los payload de tipo stagers. Estos se emplean para crear una conexión entre víctima y atacante. Se usan para cargar en la víctima el tercer tipo de payloads, los de tipo staged. Por último, los payload de tipo staged se usan para realizar tareas complejas, como crear una consola meterpreter (una shell especial que te permite realizar muchas más acciones que una normal).

En definitiva, la elección del payload correcto es vital, y de ello dependerá que el exploit tenga éxito o no.  Sin  embargo, cabe destacar que hay otros módulos de tipo “auxiliary” que pueden ser ejecutados por metasploit y no precisan utilizar payload.

Por otro lado, existen bastantes páginas que enumeran exploits.  Entre ellas, podemos encontrar 0day.today, exploit-db o rapid7.

En estas páginas podemos encontrar los últimos exploits conocidos para los distintos sistemas. Sin embargo, al ser la explotación de vulnerabilidades la tercera etapa de una auditoría (precedida por la recolección de información y el análisis de vulnerabilidades) no será de extrañar encontrarnos con que el sistema tiene algunas vulnerabilidades con CVE.

El CVE  (Common Vulnerabilities and Exposures) es el estándar que lista las vulnerabilidades conocidas. Sea cual sea la vulnerabilidad que quieras explotar, es casi seguro que tiene un CVE asociado. Y al utilizar programas como nmap, es probable que descubras estos códigos. Pues bien, una página muy interesante para saber a qué vulnerabilidad corresponde un CVE, que grado de riesgo (o CVSS) tiene, qué se necesita para explotarlo, y mucho más, es cvedetails. Hay otras páginas que contienen esta información, pero lo bueno de cvedetails es que en cada vulnerabilidad te indica qué módulo de metasploit debes utilizar para explotarla:

 

Comandos básicos

ComandoDescripción
db_statusPara ver el estado de la base de datos
db_import Importa el escaneo a la base de datos
hostsMuestra los hosts
servicesmMuestra los servicios de cada puerto
vulnsMuestra las vulnerabilidades
credsMuestra las credenciales
search Busca todos los exploits que tengan que ver con “term”
use Para utilizar el exploit .

Tras escoger un exploit, podremos aplicar los siguientes comandos:

ComandoDescripción
> infoTe da información sobre ese exploit
> show payloads
Todos los exploits deben ir adheridos a un payload. Este comando muestra los payloads que hay para ese exploit. Sin embargo, no es necesario para los auxiliares.
> set payload Selecciona el payload para el exploit actual.
> show optionsTe muestra lo que tienes que rellenar para lanzar con éxito ese exploit. Lo que aparezca aquí como obligatorio y esté vacío, es indispensable rellenarlo para ejecutar exitosamente el exploit.
> set rhost 8.8.8.8Ejemplo de como rellenar las options necesarias para lanzar un exploit. En este caso, se especifica el host remoto.
> set cmd ls Se especifica para un exploit y payload determinados que el comando a lanzar es “ls”.
> exploitLanza el exploit.
> runCuando lo que se ejecuta es un exploit auxiliar, hay que escribir run para ejecutarlo, en lugar de “exploit”.
> unset Elimina la información asociada a la opción “option”.

Estos son los comandos más interesantes, pero podemos obtener un listado completo de comandos escribiendo “help“.

A continuación, a modo de PoC mostraré un ejemplo simple en el que utilizo metasploit para obtener una shell en un windows server 2008 en el que descubrí que se podía explotar la vulnerabilidad CVE-2017-0144, más conocida por su sobrenombre “EthernalBlue“:

PoC: Obtener una shell con metasploit

En primer lugar, al investigar sobre esta vulnerabilidad descubrimos que afecta a los sistemas que emplean SMB 2. Así que procedí a utilizar el módulo auxiliary/scanner/smb/smb2, para averiguar si la máquina victima lo soportaba.

A continuación, y para estar seguros, ejecuté otro módulo auxiliar que indica si la versión es apta para esa vulnerabilidad.

¡Lo es! Por tanto, procedemos a explotarlo, con el exploit “exploit/windows/smb/ms17_010_eternalblue“:

Y listo. Como podemos observar, hemos conseguido una shell en la máquina víctima gracias a metasploit.

Esto ha sido una pequeña prueba de concepto que he realizado para poder enseñarte el uso básico de metasploit. No obstante, en un entorno real no hubiera sido tan fácil.  Metasploit tiene muchísimas funcionalidades más que he tenido que dejar en el tintero porque no tenían cabida en un post de introducción. 

Por no hablar de que ahora que hemos conseguido una shell, tendríamos que pasar a la postexplotación: la escalada de privilegios, el pivoting y las puertas traseras. Pero eso lo dejo para futuros posts.

Lethani.

Deja una respuesta