PowerShell Empire: Cómo pasar sesiones entre máquinas con HTTP Foreign #penstest #pentesting
Quizá PowerShell Empire ha sido una de las herramientas más populares de los últimos años en lo que a Ethical Hacking se refiere, y especialmente en el mundo del Pentesting con PowerShell. Es un proyecto con aire fresco que ha proporcionado alternativas a la post-explotación con Metasploit. El año pasado tuve la suerte de estar por Ekoparty, en Argentina, hablando de Empire y de nuestro iBombShell.
También hemos ido hablando de diferentes acciones de PowerShell Empire y de sus listeners y las posibilidades que éstos ofrecen. Por ejemplo, hemos visto como es su funcionamiento básico en el pentesting en ataques Pass the Hash, hemos trabajado con canales encubiertos para gestionar los agentes con Dropbox, cómo utilizar saltos intermedios entre el agente y el listener y, también, hemos visto cómo integrar herramientas como Metasploit en el uso del Empire y sus listeners.
Sin duda, una herramienta con bastantes opciones y con más de 300 módulos de acciones disponibles. Hoy vamos a continuar con los listeners en PowerShell Empire, y haciendo algunas demostraciones prácticas con él.
HTTP Foreing
HTTP Foreign es un tipo de listener que permite pasar una sesión de una máquina a otra. El término ‘Session Pass’ es conocido para referirse a esto. Con Empire podemos imaginar un escenario en el que una máquina quiere traspasar una sesión a otra. El concepto clave en este punto es el uso de la misma clave de sesión o Session Key con la que se cifra la comunicación de los agentes con los listeners.
Para este artículo podemos pensar en el siguiente escenario:
Obteniendo la primera sesión: de V a M1
Vamos a ver la configuración básica del listener HTTP clásico de PowerShell Empire. Con el comando uselistener cargamos el módulo http. No hay mucho que configurar, podemos dejar la conexión a la escucha en el puerto 80 y la dirección IP de la máquina.
Una vez que se obtiene la sesión en la máquina M1, ya se puede interactuar con el agente. Ahora queremos pasar la sesión de M1 a M2. Más que pasarla es compartir la máquina V.
Para realizar la siguiente acción se debe configurar en M1 un listener denominado http_foreign. Este listener tiene algo importante y es que el atributo host debe apuntar a la máquina M2 y no a la máquina M1. Es decir, cuando el agente que se está ejecutando en la máquina V se conecte al listener http_foreign será redireccionado a la máquina M2.
En otras palabras, tenemos que configurar el atributo host, en este caso para apuntar a http://10.0.0.31:80. Es importante quedarse con el valor del StagingKey o lo que antes hemos llamado Session Key. Esto es algo fundamental para que la redirección de sesión funcione.
Session Pass: Llegando a la máquina M2
Ahora debemos colocarnos en la máquina M2, en este segundo Empire que estamos utilizando. De algún modo debemos pasarnos el StagingKey utilizado en la máquina M1 a la máquina M2. Una vez copiado, se debe ejecutar la instrucción set StagingKey [Valor]. Esto dentro del listener cargado. El listener que debemos utilizar en la máquina M2 es un listener http clásico.
Una vez configurado el listener en M2 se debe ejecutar y lo tendríamos listo y visible si ejecutamos el comando listeners. A continuación, se muestra la imagen de la configuración del listener y de la configuración del StagingKey.
¿Cómo conseguimos el Session Pass?
Esto es sencillo. Desde la máquina M1 podemos interactuar con el agente a través del comando interact. Desde esa sesión podemos ejecutar el comando spawn. Este comando permite generar una nueva instancia de un agente sobre la máquina V, en este caso.
El detalle es que queremos que la nueva instancia de un agente apunte al listener http_foreign. ¿Por qué? Sencillo, porque cuando la nueva instancia del agente de Empire se conecte al listener http_foreign, éste redirigirá a la M2. En este punto hay que acordarse de la configuración del atributo host en el listener http_foreign.
Cuando se ejecute el comando spawn podemos ver que un módulo es cargado y que éste tiene diferentes opciones. Se puede echar un ojo a lo que se pueda modificar, por ejemplo, la arquitectura. Cuando obtenemos el mensaje de “Agent spawned to http_foreign” sabemos que la nueva instancia de un agente de Empire se está ejecutando.
Si analizásemos con un analizador de tráfico lo que ocurre en la máquina M1 podríamos ver la primera conexión del nuevo agente contra el listener http_foreign.
Si visualizamos lo que ocurre en la máquina M2 veríamos que ha llegado una nueva sesión, la cual viene de la máquina V. La funcionalidad Session Pass ha funcionado y ahora ambas máquinas, tanto M1 como M2, pueden interactuar con la máquina V, cada una desde su agente.
Como se puede ver PowerShell Empire tiene muchas formas de interactuar a través de sus diversos listeners. Una herramienta cada vez más utilizada en el Ethical Hacking y que merece estudiarla y ver todas sus posibilidades. Una herramienta que no debemos quitar de nuestra mochila de pentesting.
Más Referencias de PowerShell Empire
- PowerShell Empire: Postexplotación++ en redes Windows
- PowerShell Empire: El imperio contraataca
- PowerShell Empire: Trabajando el PtH ("Pass the Hassh") con Mimikatz
- PowerShell Empire: Usar Dropbox como canal de hacking en post-explotación
- PowerShell Empire: 'Hop' en Empire para meter saltos en agentes de post-explotación
- PowerShell Empire: Cómo integrar Empire Project con Metasploit
- PowerShell Empire GUI: Un interfaz gráfico al más puro estilo Armitage
Figura 1: PowerShell Empire. "Cómo pasar sesiones entre máquinas con HTTP Foreign" |
También hemos ido hablando de diferentes acciones de PowerShell Empire y de sus listeners y las posibilidades que éstos ofrecen. Por ejemplo, hemos visto como es su funcionamiento básico en el pentesting en ataques Pass the Hash, hemos trabajado con canales encubiertos para gestionar los agentes con Dropbox, cómo utilizar saltos intermedios entre el agente y el listener y, también, hemos visto cómo integrar herramientas como Metasploit en el uso del Empire y sus listeners.
Figura 2: Pentesting con PowerShell 2ª Edición |
Sin duda, una herramienta con bastantes opciones y con más de 300 módulos de acciones disponibles. Hoy vamos a continuar con los listeners en PowerShell Empire, y haciendo algunas demostraciones prácticas con él.
HTTP Foreing
HTTP Foreign es un tipo de listener que permite pasar una sesión de una máquina a otra. El término ‘Session Pass’ es conocido para referirse a esto. Con Empire podemos imaginar un escenario en el que una máquina quiere traspasar una sesión a otra. El concepto clave en este punto es el uso de la misma clave de sesión o Session Key con la que se cifra la comunicación de los agentes con los listeners.
Figura 3: Sesión Pass con HTTP Foreign |
Para este artículo podemos pensar en el siguiente escenario:
• Una máquina comprometida, por ejemplo, vía inyección de DLL generada con Empire y apuntando a nuestro listener. La máquina comprometida será un Windows 7, aunque puede ser cualquier otra versión de Windows, por ejemplo, un 10. La llamaremos V.
• Una máquina con un listener que recibe la conexión desde la máquina Windows. Esta máquina será un Kali Linux. La llamaremos M1.
• Una máquina con Kali Linux y Empire instalado. Se generará un listener a la escucha, el cual debe tener el mismo Session Key que el listener de la máquina anterior. La llamaremos M2.El punto de partida es la sesión creada entre el agente ejecutado en Windows y el listener que está a la escucha en la máquina Kali Linux, la más a la izquierda que se ve en la imagen anterior.
Obteniendo la primera sesión: de V a M1
Vamos a ver la configuración básica del listener HTTP clásico de PowerShell Empire. Con el comando uselistener cargamos el módulo http. No hay mucho que configurar, podemos dejar la conexión a la escucha en el puerto 80 y la dirección IP de la máquina.
Figura 4: Configuración de listener http en PowerShell Empire |
Una vez que se obtiene la sesión en la máquina M1, ya se puede interactuar con el agente. Ahora queremos pasar la sesión de M1 a M2. Más que pasarla es compartir la máquina V.
Para realizar la siguiente acción se debe configurar en M1 un listener denominado http_foreign. Este listener tiene algo importante y es que el atributo host debe apuntar a la máquina M2 y no a la máquina M1. Es decir, cuando el agente que se está ejecutando en la máquina V se conecte al listener http_foreign será redireccionado a la máquina M2.
Figura 5: Sesión obtenida en máquina M1 y configuración de http foreing |
En otras palabras, tenemos que configurar el atributo host, en este caso para apuntar a http://10.0.0.31:80. Es importante quedarse con el valor del StagingKey o lo que antes hemos llamado Session Key. Esto es algo fundamental para que la redirección de sesión funcione.
Session Pass: Llegando a la máquina M2
Ahora debemos colocarnos en la máquina M2, en este segundo Empire que estamos utilizando. De algún modo debemos pasarnos el StagingKey utilizado en la máquina M1 a la máquina M2. Una vez copiado, se debe ejecutar la instrucción set StagingKey [Valor]. Esto dentro del listener cargado. El listener que debemos utilizar en la máquina M2 es un listener http clásico.
Figura 6: Configurando StagingKey |
Una vez configurado el listener en M2 se debe ejecutar y lo tendríamos listo y visible si ejecutamos el comando listeners. A continuación, se muestra la imagen de la configuración del listener y de la configuración del StagingKey.
¿Cómo conseguimos el Session Pass?
Esto es sencillo. Desde la máquina M1 podemos interactuar con el agente a través del comando interact. Desde esa sesión podemos ejecutar el comando spawn. Este comando permite generar una nueva instancia de un agente sobre la máquina V, en este caso.
El detalle es que queremos que la nueva instancia de un agente apunte al listener http_foreign. ¿Por qué? Sencillo, porque cuando la nueva instancia del agente de Empire se conecte al listener http_foreign, éste redirigirá a la M2. En este punto hay que acordarse de la configuración del atributo host en el listener http_foreign.
Figura 7: Comando spawn http_foreign |
Cuando se ejecute el comando spawn podemos ver que un módulo es cargado y que éste tiene diferentes opciones. Se puede echar un ojo a lo que se pueda modificar, por ejemplo, la arquitectura. Cuando obtenemos el mensaje de “Agent spawned to http_foreign” sabemos que la nueva instancia de un agente de Empire se está ejecutando.
Figura 8: Instancia de Empire ejecutándose |
Si analizásemos con un analizador de tráfico lo que ocurre en la máquina M1 podríamos ver la primera conexión del nuevo agente contra el listener http_foreign.
Si visualizamos lo que ocurre en la máquina M2 veríamos que ha llegado una nueva sesión, la cual viene de la máquina V. La funcionalidad Session Pass ha funcionado y ahora ambas máquinas, tanto M1 como M2, pueden interactuar con la máquina V, cada una desde su agente.
Figura 9: Sesión pasada de M1 a M2 |
Como se puede ver PowerShell Empire tiene muchas formas de interactuar a través de sus diversos listeners. Una herramienta cada vez más utilizada en el Ethical Hacking y que merece estudiarla y ver todas sus posibilidades. Una herramienta que no debemos quitar de nuestra mochila de pentesting.
Más Referencias de PowerShell Empire
- PowerShell Empire: Postexplotación++ en redes Windows
- PowerShell Empire: El imperio contraataca
- PowerShell Empire: Trabajando el PtH ("Pass the Hassh") con Mimikatz
- PowerShell Empire: Usar Dropbox como canal de hacking en post-explotación
- PowerShell Empire: 'Hop' en Empire para meter saltos en agentes de post-explotación
- PowerShell Empire: Cómo integrar Empire Project con Metasploit
- PowerShell Empire GUI: Un interfaz gráfico al más puro estilo Armitage
Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDO de Telefónica.
No hay comentarios:
Publicar un comentario