Demostración en vídeo del post:
Las reverse shell representan uno de los payloads más comunes, se trata de un tipo de rutina que le permite a un atacante recibir una conexión desde el sistema comprometido y sobre ésta, ejecutar instrucciones en dicha máquina. Existen decenas de alternativas a la hora de crear este tipo de payloads, desde la posibilidad de utilizar un programa tan conocido como «netcat» hasta la creación de rutinas en un lenguaje de programación como Python.
No obstante, una de las cosas que en ocasiones olvidamos es que estas conexiones suelen ser planas y fáciles de detectar por cualquier IDS. Por este motivo es una buena idea conocer alternativas que permitan cifrar la conexión que se establece en una bind o reverse shell.
Para ver claramente lo que pasa cuando se establece una conexión reversa con netcat u otra utilidad, se puede iniciar un sniffer y capturar el tráfico. Si la herramienta o rutina utilizada no implementa algún mecanismo de cifrado, se podrán ver en los paquetes de datos los comandos enviados por el atacante y las respuestas devueltas por la víctima.
Esto por supuesto que no es bueno, pero tiene fácil solución si cuando creas tu shell con Python u otro lenguaje, utilizas alguna librería o protocolo de cifrado.
La primera opción que se nos puede ocurrir es utilizar OpenSSL, ya que además de generar claves y certificados, también permite el establecimiento de conexiones mediante SSL/TLS.
Lo primero que se debe hacer es crear la clave privada y luego el certificado con el que se establecerá la conexión
openssl req -newkey rsa:2048 -nodes -keyout atacante.key -x509 -days 1000 -subj ‘/CN=thehackerway.com/O=The HackerWay’ -out atacante.crt
Se puede generar un PEM partiendo de la clave privada y certificado generado previamente, para ello basta con copiar los contenidos del fichero «atacante.key» y «atacante.crt» en un nuevo fichero llamado «atacante.pem».
Ahora es posible levantar el componente servidor en la máquina del atacante y finalmente, establecer la conexión desde la máquina víctima.
Partiendo del fichero PEM generado anteriormente, otra alternativa que puede ser interesante consiste en utilizar Socat. El procedimiento también es muy sencillo, aunque en la máquina comprometida tiene que estar instalada dicha herramienta y este requisito no siembre se cumple. En todo caso, es otra opción que merece la pena conocer y tener en cuenta.
Ncat ha sido desarrollada con la idea de evolucionar Netcat y soportar protocolos como TCP y UDP sobre IPv4/IPv6. Partiendo de esta idea, es tan potente como Socat y permite establecer todo tipo de conexiones siguiendo el modelo cliente-servidor. Una de alternativas de uso de Ncat consiste en el cifrado de la conexión, sin embargo, tal y como ocurre con Socat, la herramienta debe estar instalada tanto en el cliente como en el servidor.
He explicado algunas alternativas, aunque lo cierto es que hay muchas más que sirven para lo mismo. En el siguiente post mencionaré algunas dos más, incluyendo un proyecto que ha sido publicado recientemente y que tiene buena pinta 🙂
Un saludo y Happy Hack!
Adastra.