Crafting Payloads with MSFvenom
Debemos tener en cuenta que el uso de ataques automatizados en Metasploit requiere que tengamos acceso a la máquina objetivo vulnerable a través de la red. Consideremos lo que hicimos en la sección anterior. Para ejecutar el módulo de exploit, entregar el payload y establecer la sesión de shell, necesitamos comunicarnos con el sistema en primer lugar. Esto pudo haber sido posible al tener presencia en la red interna o una red que tenga rutas hacia la red donde reside el objetivo. Habrá situaciones en las que no tengamos acceso directo a una máquina vulnerable. En estos casos, necesitaremos ser creativos en la forma de entregar y ejecutar el payload en el sistema. Una forma de hacerlo es usando MSFvenom para crear un payload y enviarlo mediante un mensaje de correo electrónico o a través de otros métodos de ingeniería social, impulsando al usuario a ejecutar el archivo.
Además de proporcionar un payload con opciones flexibles de entrega, MSFvenom también nos permite cifrar y codificar los payloads para evitar las firmas comunes de detección de antivirus. Practiquemos un poco estos conceptos.
Practicando con MSFvenom
En Pwnbox o cualquier host con MSFvenom instalado, podemos emitir el comando msfvenom -l payloads
para listar todos los payloads disponibles. A continuación, se muestran algunos de los payloads disponibles. Algunos han sido redactados para acortar la salida y no distraer del concepto principal. Observa los payloads y sus descripciones:
¿Qué observamos en la salida?
Podemos ver algunos detalles que nos ayudarán a entender mejor los payloads. Primero, vemos que la convención de nombres de los payloads casi siempre empieza listando el sistema operativo del objetivo (Linux, Windows, MacOS, etc.). También vemos que algunos payloads se describen como (staged) o (stageless). Veamos la diferencia.
Payloads Staged vs. Stageless
Los payloads staged crean una manera de enviar más componentes de nuestro ataque. Podemos verlo como "preparar el escenario" para algo más útil. Por ejemplo, el payload linux/x86/shell/reverse_tcp
. Cuando se ejecuta usando un módulo de exploit en Metasploit, este payload enviará una pequeña fase que se ejecutará en el objetivo y luego se conectará de nuevo a la máquina atacante para descargar el resto del payload por la red y luego ejecutar el código para establecer una shell reversa.
Los payloads stageless no tienen una etapa previa. Por ejemplo, el payload linux/zarch/meterpreter_reverse_tcp
. Usando un módulo de exploit en Metasploit, este payload se enviará en su totalidad a través de una conexión de red sin ninguna fase. Esto puede ser útil en entornos donde no tenemos acceso a mucho ancho de banda y la latencia podría interferir. En estos casos, es mejor seleccionar un payload stageless.
Identificando Payloads Staged y Stageless en Metasploit
La respuesta es simple: el nombre del payload te dará tu primera pista. Consideremos estos ejemplos:
linux/x86/shell/reverse_tcp
: Es un payload staged, lo sabemos porque cada / en su nombre representa una fase.linux/zarch/meterpreter_reverse_tcp
: Es un payload stageless, ya que todo está en una única fase, sin separaciones.
Por último, consideremos estos dos payloads para Windows:
windows/meterpreter/reverse_tcp
: Staged (notamos las fases separadas).windows/meterpreter_reverse_tcp
: Stageless (todo en una sola función).
Si el nombre del payload no es lo suficientemente claro, la descripción usualmente detallará si es staged o stageless.
Construcción de un Payload Stageless
Ahora, construyamos un payload stageless sencillo usando msfvenom y desglosamos el comando utilizado.
Comando:
Desglose del Comando:
1. Llamada a MSFvenom
Define la herramienta utilizada para crear el payload.
2. Creación de un Payload
Esta opción indica que msfvenom está creando un payload.
3. Selección del Payload basándose en la Arquitectura
Especifica un payload stageless de 64 bits para Linux que iniciará una shell inversa basada en TCP (shell_reverse_tcp).
4. Dirección IP para Conectar de Vuelta
Cuando se ejecute el payload, se conectará de vuelta a la dirección IP especificada (10.10.14.113) en el puerto (443).
5. Formato para Generar el Payload
La opción -f especifica el formato del archivo binario generado. En este caso, será un archivo .elf (formato utilizado en sistemas Linux).
6. Salida
Genera el binario .elf y lo nombra como createbackup. Podemos asignarle cualquier nombre. Idealmente, elegiríamos algo que no sea sospechoso o que pueda tentar a alguien a descargarlo y ejecutarlo.
Ejecución de un Payload Stageless
En este punto, ya hemos creado el payload en nuestra máquina de ataque. Ahora necesitamos desarrollar una forma de transferir ese payload al sistema objetivo. Existen innumerables formas de hacer esto. A continuación, se mencionan algunos de los métodos más comunes:
Enviar un mensaje de correo electrónico con el archivo adjunto.
Proporcionar un enlace de descarga en un sitio web.
Combinarlo con un módulo de exploit de Metasploit (esto requeriría probablemente que ya estemos en la red interna).
Utilizar una memoria USB como parte de una prueba de penetración física en el sitio.
Una vez que el archivo esté en el sistema, también será necesario ejecutarlo.
Imagina por un momento que la máquina objetivo es una caja Ubuntu que un administrador de TI utiliza para gestionar dispositivos de red (alojar scripts de configuración, acceder a routers y switches, etc.). Podríamos hacer que el administrador haga clic en el archivo que le enviamos por correo electrónico, si estaba utilizando el sistema de manera descuidada, como si fuera una computadora personal o de trabajo.
Payload en Ubuntu
Tendríamos un listener listo para capturar la conexión desde la máquina de ataque una vez que el payload se ejecute correctamente.
Conexión usando Netcat
Cuando el archivo se ejecuta, observamos que hemos capturado una shell.
Conexión Establecida
Este mismo concepto se puede utilizar para crear payloads para varias plataformas, incluyendo Windows.
Construcción de un Payload Stageless simple para un sistema Windows
También podemos usar msfvenom para crear un archivo ejecutable (.exe) que pueda ejecutarse en un sistema Windows y proporcione una shell inversa.
Creación del Payload para Windows
La sintaxis de este comando se puede desglosar de la misma manera que lo hicimos anteriormente. La única diferencia es la plataforma (Windows) y el formato del payload (.exe).
Ejecución de un Payload Stageless simple en un sistema Windows
Este es otro escenario en el que necesitamos ser creativos para entregar el payload al sistema objetivo. Sin codificación o cifrado, el payload en esta forma casi con certeza sería detectado por Windows Defender u otro software antivirus.
Si el antivirus estuviera deshabilitado, todo lo que el usuario tendría que hacer es hacer doble clic en el archivo para ejecutarlo, y entonces tendríamos una sesión shell.
Conexión usando Netcat
Al ejecutar el archivo, capturamos una shell inversa desde el sistema Windows:
Last updated