Docly Child

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 help

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

Selección del módulo payload.

android/shell/reverse_tcp  

Formato

f, format

formats

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
Transform: c, base64, ruby, raw, python, java, perl

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-key
encrypt-iv

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]
				
			
Tablas Excel para payload y opciones

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
				
			
Msfvenom payload opciones

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]