JSRAT: Una Remote Administration Tool (RAT) con PowerShell & JavaScript
Hace unos años, Chema Alonso y Manuel Fernández trabajaron el concepto de la Javascript Botnet, exponiéndola en diferentes congresos internacionales. Poco después, en el libro de Hacking a dispositivos iOS Ioseba Palop mostraba cómo llevar a cabo esta prueba de concepto a un iPhone o un iPad y se podía observar como las consecuencias eran fatales para cualquier dispositivo que navegase por la red. Este hecho tiene que ver con el artículo de hoy, ya que hoy en día tenemos diferentes soluciones para utilizar Javascript como un payload y poder utilizarlo para lograr el control de una máquina, dentro del contexto de pentesting en un proyecto de hacking ético.
El investigador Casey Smith, originalmente, desarrolló un prototipo de herramienta que utiliza Javascript como un payload y permite conectar contra un servidor web que se encuentra a la escucha. Un investigador de seguridad llamado 3gstudent extendió las funcionalidades de la herramienta de Casey Smith para que ésta trabajase con Powershell, añadiendo algo de funcionalidades extra. Existen más variaciones de la herramienta, por ejemplo, una en Python. En el caso de la herramienta en Powershell está basada en PoshC2.
La herramienta JSRat es un Command and Control o C&C, el cual utiliza Javascript y el protocolo HTTP para ejecutar payloads y tener comunicación entre el servidor y las máquinas comprometidas. Como comenté anteirormente, hay dos implementaciones, una en Powershell y otra en Python. Son totalmente embebibles en el Pentesting con Powershell y en el Pentesting con Python.
Jugando con JSRat y PoshC2 en Powershell
El esquema de JSRat y PoshC2 es sencillo. Tenemos un servidor, el cual será ejecutado en nuestra Powershell, con privilegios. Por otro lado, están los hosts que pueden haber sido comprometidos o que ejecuten el código Javascript desde cualquier parte del sistema.
En primer lugar, vamos a ejecutar en un Windows 10 el script JSRat.ps1. Esto nos deja el puerto 80 del equipo abierto para recibir las conexiones. Como se puede leer, obtenemos el estado de "Listening…". Hay que tener en cuenta que la dirección IP del servidor viene "hardcodeada" en el código, por lo que es recomendable que se observe el código, se entienda y se cambie lo necesario.
¿Cómo se puede ejecutar el código para que se conecten las máquinas? Nosotros lo vamos a hacer desde la consola con el binario rundll32.exe, pero se podría utilizar una máquina comprometida con otros mecanismos para lograr ejecutar este tipo de código.
Como se puede ver en la imagen, en la máquina que será comprometida se utiliza rundll32.exe para ejecutar el código Javascript. Hay que indicar que este código tiene la dirección IP que hay que modificar, como ocurría en el servidor.
Cuando en el equipo se ejecuta el código se obtiene el control remoto. Obtenemos una pequeña shell con varias opciones. El script de JSRat nos proporciona las siguientes posibilidades:
En el caso de ejecutar algo podemos utilizar el comando run. Una vez introducido la shell nos pedirá información sobre el binario que queremos ejecutar y sus argumentos. En este caso, y a modo de ejemplo, vamos a ejecutar rundll32.exe para ejecutar una DLL creada con msfvenom y que contiene un Meterpreter. Para ello, escribimos la instrucción rundll32 shell32.dll,Control_RunDLL [ruta DLL con Meterpreter].
Si hemos configurado un handler de Metasploit para recibir la conexión, la DLL nos otorgará una sesión de Meterpreter en nuestra máquina Kali Linux, tal y como se puede ver en la imagen. Realmente, esto es para simplificar que podemos ejecutar cualquier cosa con el comando run de JSRat, como se puede observar.
Una de las grandes ventajas que nos ofrece este Command & Control o C&C es que no necesita ser escrito en disco. Proporciona una comunicación vía HTTP rápida a través de un protocolo común. La detección de JSRat a través de Javascript es difícil, a no ser que, en este caso, rundll32 esté siendo monitorizado. Sea como sea, y de todos modos, habilitando y configurando AppLocker para denegar la ejecución de rundll32.exe se evita el ataque.
Figura 8: PoC JSRat: Una R.A.T. con PowerShell & Javascript
Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths
Figura 1: JSRAT: Una Remote Administration Tool (RAT) con PowerShell & JavaScript |
El investigador Casey Smith, originalmente, desarrolló un prototipo de herramienta que utiliza Javascript como un payload y permite conectar contra un servidor web que se encuentra a la escucha. Un investigador de seguridad llamado 3gstudent extendió las funcionalidades de la herramienta de Casey Smith para que ésta trabajase con Powershell, añadiendo algo de funcionalidades extra. Existen más variaciones de la herramienta, por ejemplo, una en Python. En el caso de la herramienta en Powershell está basada en PoshC2.
Figura 2: Owning bad guys {and mafia} with Javascript Botnet
La herramienta JSRat es un Command and Control o C&C, el cual utiliza Javascript y el protocolo HTTP para ejecutar payloads y tener comunicación entre el servidor y las máquinas comprometidas. Como comenté anteirormente, hay dos implementaciones, una en Powershell y otra en Python. Son totalmente embebibles en el Pentesting con Powershell y en el Pentesting con Python.
Jugando con JSRat y PoshC2 en Powershell
El esquema de JSRat y PoshC2 es sencillo. Tenemos un servidor, el cual será ejecutado en nuestra Powershell, con privilegios. Por otro lado, están los hosts que pueden haber sido comprometidos o que ejecuten el código Javascript desde cualquier parte del sistema.
En primer lugar, vamos a ejecutar en un Windows 10 el script JSRat.ps1. Esto nos deja el puerto 80 del equipo abierto para recibir las conexiones. Como se puede leer, obtenemos el estado de "Listening…". Hay que tener en cuenta que la dirección IP del servidor viene "hardcodeada" en el código, por lo que es recomendable que se observe el código, se entienda y se cambie lo necesario.
Figura 3: JSRat listening |
¿Cómo se puede ejecutar el código para que se conecten las máquinas? Nosotros lo vamos a hacer desde la consola con el binario rundll32.exe, pero se podría utilizar una máquina comprometida con otros mecanismos para lograr ejecutar este tipo de código.
Como se puede ver en la imagen, en la máquina que será comprometida se utiliza rundll32.exe para ejecutar el código Javascript. Hay que indicar que este código tiene la dirección IP que hay que modificar, como ocurría en el servidor.
Figura 4: Ejecución de código Javascript con rundll32.exe |
Cuando en el equipo se ejecuta el código se obtiene el control remoto. Obtenemos una pequeña shell con varias opciones. El script de JSRat nos proporciona las siguientes posibilidades:
- Poder abrir una cmd, con la que se pueda ejecutar comandos.
- Eliminar un fichero de la máquina comprometida.
- Leer un fichero de la máquina comprometida.
- Ejecutar un binario.
- Descargar un archivo desde la máquina comprometida.
- Subir un fichero hacia la máquina comprometida.
Figura 5: Menú de comandos JSRat |
En el caso de ejecutar algo podemos utilizar el comando run. Una vez introducido la shell nos pedirá información sobre el binario que queremos ejecutar y sus argumentos. En este caso, y a modo de ejemplo, vamos a ejecutar rundll32.exe para ejecutar una DLL creada con msfvenom y que contiene un Meterpreter. Para ello, escribimos la instrucción rundll32 shell32.dll,Control_RunDLL [ruta DLL con Meterpreter].
Figura 6: Ejecución de una DLL creada con msfvenom |
Si hemos configurado un handler de Metasploit para recibir la conexión, la DLL nos otorgará una sesión de Meterpreter en nuestra máquina Kali Linux, tal y como se puede ver en la imagen. Realmente, esto es para simplificar que podemos ejecutar cualquier cosa con el comando run de JSRat, como se puede observar.
Figura 7: Ejecución de un Meterpreter |
Una de las grandes ventajas que nos ofrece este Command & Control o C&C es que no necesita ser escrito en disco. Proporciona una comunicación vía HTTP rápida a través de un protocolo común. La detección de JSRat a través de Javascript es difícil, a no ser que, en este caso, rundll32 esté siendo monitorizado. Sea como sea, y de todos modos, habilitando y configurando AppLocker para denegar la ejecución de rundll32.exe se evita el ataque.
Figura 8: PoC JSRat: Una R.A.T. con PowerShell & Javascript
Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths
1 comentario:
hola chema soy un chaval ehh y estoy empezando en el mundo del hacking y la seguridad informatica desde hace aproximadamente 2 años.Me seria util que dejaras el R.A.T aqui o su codigo en el post
Muchas gracias saludos
Publicar un comentario