4.3.2. MSFvenom configuración de payload
MSFvenom se sirve de los módulos de tipo payload del framework. Desde Metasploit también se puede usar funciones similares para generar payloads, pero sin ser tan práctico y rápido por decirlo de algún modo. MSFvenom se ejecuta desde la consola de línea de comandos de Kali Linux. Para ver las opciones simplemente indicar lo siguiente en la consola:
msfvenom
MSFvenom genera un payload a través de introducir diferentes opciones con valores. De forma resumida para generar un payload con MSFvenom bastaría con el siguiente formato:
msfvenom [opciones_1] –p [payload_modulo] [parámetros_payload] [opciones_2]
El listado que aparece con la opción help (pantalla anterior) puede resumirse mejor en el siguiente cuadro. En las columnas se indica el grupo de la opción (tipo), si se pueden listar los valores previamente (lista), una descripción y algunos ejemplos frecuentes en algunos casos. También se ha incluido una columna de Obligatorio, siéndolo solo las opciones de formato y payload. En la columna parámetro se indica que letra o texto usar para introducir la opción (algunas tienen ambas formas): si es una letra se añade guion y si es texto doble guion:
Tipo | Parámetro | Lista | Obligatorio | Descripción o comentarios | Ejemplos comunes |
Arquitectura y plataforma | a, arch | archs | No | Permite definir la arquitectura para el target del payload. No es imprescindible. Está asociado a la arquitectura de la computadora aunque existen otras opciones | x86, x64 |
Arquitectura y plataforma | platform | platforms | No | Permite definir el tipo de plataforma; asociado al Sistema Operativo de forma general aunque hay otras opciones. | android, windows, osx, unix, linux |
Payload | p, payload | payloads | Sí | Selección del módulo payload. | android/shell/reverse_tcp |
Formato | f, format | formats | Sí | Define el formato del payload. El formato dependerá del tipo de payload y las características del target. Existen dos tipos de formatos: ejecutables y transformación. | Ejecutable: exe, jar, vba, elf, aspx, hta-psh, jsp, dll |
Nops (avanzado) | n, nopsled | No | Añade instrucciones sin efecto al principio del código del payload para mejorar evasión. | 20, 30 | |
Evasion (avanzado) | e, encoder | encoders | No | Son unos módulos específicos que se añaden al payload para codificar el proceso de generación del payload y evitar ser detectado por algun sistema antiintrusos. | x64/xor_dynamic |
Evasion (avanzado) | i, iterations | – | No | Procesa el encoder el número de veces indicado, para añadir mayor capacidad de ocultación. | 1, 5, 10 |
Evasion (avanzado) | b, bad-chars | – | No | Permite generar el código en hexadecimal del payload omitiendo determinados valores hexadecimales y así añadir una capa adicional para ocultación. | \x00\xff\’ |
Evasion (avanzado) | smallest | – | No | Se solicita que el tamaño en bytes del payload sea el menor posible. En determinados entornos es deseable. | Sin valores |
Evasion (avanzado) | encrypt | encrypt | No | Permite encriptar el canal de comunicación que establece una shell y así evitar que un externo pueda interceptar de forma fácil el contenido de la comunicación. | – |
Template (avanzado) | c, add-code | – | No | Añade una función en código hexadecimal para windows (formato raw) al payload. | – |
Template (avanzado) | x, template | – | No | Función para añadir el payload a un binario o ejecutable. | – |
Template (avanzado) | k, keep | – | No | Función adicional a la opción template. | – |
Otros | s, space | – | No | Limita el tamaño máximo en bytes del payload. | – |
Otros | encoder-space | – | No | Limita el tamaño máximo en bytes del payload con encoder. | – |
Otros | v, var-name | – | No | Permite renombrar la variable para el código del payload para ciertos formatos (por defecto buf). | – |
Salida | o, out | – | No | Define un formato de salida con extensión para el payload generado, acorde al formato escogido. Msfvenom si es necesario ejecuta las acciones para compilar. | [nombre].exe, [nombre].dll |
Salida | > | – | No | Función similar a la anterior, pero generando el resultado en un fichero plano. | nombre |
Comentar también que para listar las opciones se debe usar la opción list. Se adjunta una tabla en Excel con los diferentes valores para casi todas las opciones. Esta tabla también incluye los módulos de payload separando las diferentes raíces en columnas:
msfvenom --list [Lista]
Como es lógico, las diferentes opciones NO son compatibles con todos los payload (dará error en MSFvenom). Por ejemplo, si se escoge un payload para Linux, no tendrá sentido generarlo con formato EXE (ejecutable para Windows), etc. Como se ha indicado es recomendable pensar en términos de para qué tipo de target se va a generar el payload target (sistema operativo, protocolo para el canal de comunicación, forma de ejecución del código, etc.) y a partir de aquí ajustar las opciones.
En este sentido, solo las opciones de formato y el payload van a ser obligatorias. Para los formatos (-f) existen dos tipos: ejecutables que como indica el nombre genera un formato compilado para ser ejecutado en el sistema operativo (p. ej.: macho para MacOS, elf para Linux, etc.) y transformación que incluye formatos para diferentes lenguajes de programación, código web y hexadecimal-raw (shellcode).
El payload también se puede (se debe) parametrizar para cumplir su función. Estas opciones son las mismas que se pueden ver con el comando options (incluyendo las avanzadas) en Metasploit Framework y por lo tanto la obligatoriedad de estas están sujetas al diseño del payload, siendo las habituales HOST y PORT si el objetivo es. Para ver estas opciones con MSFvenom:
msfvenom -p [payload] --list-options
En el siguiente punto se van a mostrar varios ejemplos para familiarizarse con la herramienta, aunque volverá a aparecer en otros puntos (ingeniería social, evasión, etc.). Para terminar, se puede resumir la parametrización del payload con MSFvenom de la siguiente forma (msfv = MSFvenom):
msfvenom [arquitectura_plataforma_msfv] –p [payload] [parámetros_payload] [formato_msfv] [opciones_avanzadas_msfv] [formato_salida_msfv]