Como ya sabéis por la cantidad de artículos que he escrito ya sobre ibombshell, éste fue un proyecto que empecé junto a mi compañero Álvaro Nuñez y hemos tenido la suerte de que BlackHat Europe 2018 lo quisiera tener en su Arsenal. Todavía le falta madurez, pero la idea a mí personalemnete me encanta, para poder utilizar en los proyectos de Ethical Hacking. La idea, como sabéis, es tan simple como tener una shell de pentesting basada en Powershell, que puedes ejecutar en cualquier máquina con sistema operativo MS Windows y que puede ir obteniendo funcionalidades de forma dinámica en función de las necesidades llamó mi atención.
Esto que he descrito encaja con el modo Everywhere y luego la segunda parte la posibilidad de cambiar el rol y poder ser una shell remota que se ejecuta en una post-explotación aportando un valor añadido y que ayuda a aprovechar el potencial de Powershell en la máquina. Así que nos veremos el miércoles, 6 de Diciembre, en el London Excel.
Esto es lo que intentaremos mostrar en el Arsenal, el potencial de una herramienta que recién empieza. Lo que hemos trabajado en estos meses y que la gente vea que puede hacer Ethical Hacking y aprovechar la fase de post-explotación al máximo gracias a ibombshell y la base de Powershell. Lógicamente no queremos reinventar la rueda, por lo que la posibilidad de cargar funciones externas es importante, y de esta parte va el artículo de hoy.
Esta funcionalidad es algo que queríamos aprovechar para diferenciar la herramienta de otras. Uno no puede adaptar o implementar todo, puede aprovechar el trabajo de la comunidad para brindar de forma sencilla y útil el poder de la funcionalidad. Para ello, creamos una función llamada loaderext para el modo Everywhere de ibombshell. La idea era sencilla, la función loader de ibombshell cargará funciones especificadas en el fichero functions.txt y que son creadas por nosotros, mientras que con la función loaderext se puede descargar cualquier función de pentesting que se encuentre en Github.
A modo de ejemplo: Invoke-LoginPrompt de Enigma0x3 en Everywhere mode
Esta es una funcionalidad más que interesante. Esta función escrita por el investigador Matt Nelson o Enigma0x3, permite presentar un pop-up al usuario solicitándole credenciales. Es similar al módulo ask de post-explotación de Metasploit. Lo interesante de la función es que se valida que las credenciales que introduce el usuario al que se le presenta el pop-up sean válidas, ya que, en caso contrario, se vuelve a solicitar credenciales.
Por defecto, la función configura el usuario y el dominio, si el usuario es de dominio, que se debe mostrar al usuario víctima. Al ver la función en funcionamiento - valga la redundancia - uno puede pensar que es difícil que un usuario caiga, pero si pensamos un poco más, entendemos que es probable que el usuario pueda introducir su contraseña de usuario. Todo es posible en un Ethical Hacking.
Visto esto, toca hablaros de la función system/loaderext del modo Everywhere de ibombshell. Como se puede ver en la imagen, la función loaderext se carga desde la carpeta system de ibombshell del repositorio de Github de ElevenPaths. Una vez se carga esta función se encargará de descargarnos y ejecutar en memoria cualquier función que queramos.
Hay que tener en cuenta que necesitamos pasarle la URL de una función que se encuentre en texto sin formato, por eso nos apoyamos en el subdominio RAW de Github, donde son recursos de texto. En este ejemplo conseguimos la carga de la función Invoke-LoginPrompt. Iremos añadiendo más funciones interesantes, donde se especifica el autor, la ruta al raw de la función y el nombre con el que se cargará la función.
En este instante, cuando ejecutamos Invoke-LoginPrompt se levanta un pop-up y nos solicita las credenciales. Cuando el usuario introduzca las credenciales se obtienen en la Powershell.
A modo de ejemplo: Invoke-LoginPrompt de Enigma0x3 en Silently mode
Cuando ves este tipo de funciones siempre piensas en llevarlo al modo Silently, pensando en un proyecto de Ethical Hacking. Por ello, disponemos de un módulo llamado loaderext para el modo Silently que permite cargar en el ámbito o scope de ejecución de la Powershell cualquier función externa, es decir, descargada desde el raw de Github.
El módulo se encuentra en modules/system/loaderext.py. Presenta dos atributos, el primero es el warrior que ejecutará esto. Hay que recordar que el warrior es la instancia de ibombshell ejecutada en una máquina en modo Silently. El segundo atributo a configurar es la ruta para descargar la función. Es muy importante entender que esto descargará la función al ámbito o instancia de Powershell donde se ejecuta nuestro ibombshell, por lo que después deberemos ejecutar un módulo que permita interactuar con este entorno.
Para ello disponemos del módulo modules/system/pshell-local. Vamos a ir viéndolo poco a poco. Partimos de la situación en la que ya disponemos de una sesión de ibombshell.
Como vemos, tenemos una conexión desde una instancia de ibombshell, es decir, un warrior llamado MikNxl. Estos identificados se generan de forma aleatoria. A continuación, podemos ver la configuración del módulo de forma sencilla.
En este instante, en el ámbito de ejecución de nuestra ibombshell disponemos de la función Invoke-LoginPrompt cargada en memoria. Para poder verlo de forma sencilla, vamos a utilizar un módulo llamado modules/system/pshell-local. Este módulo es una especie de Shell que va a ejecutar instrucciones.
En otras palabras, podemos indicar que la instrucción que queremos ejecutar es Invoke-LoginPrompt. Aunque sea vea un poco enrevesado es una forma sencilla de conseguir un gran potencial. Además, hemos incluido algunos módulos que implementar de forma sencilla esto. Por ejemplo, si echáis un ojo al código de modules/credentials/invoke-powerdump o modules/execution/invoke-smbexec. En estos módulos se utilizan atributos para configurarlos y sencillamente se descargan dinámicamente sobre la máquina remota a través de Internet.
Por último, os dejo un vídeo para que lo veáis en funcionamiento y se entienda de forma sencilla el potencial que tiene el loaderext. En este caso es un simple phishing de un prompt de credenciales de Windows. Pero que puede ser de gran utilidad.
Referencias sobre ibombshell:
- MacOS & Windows: Pentesting it with ibombshell
- ibombsehll: Whitepaper disponible
- ibombshell: Shell de pentesting en MacOS con Powershell
- ibombshell 0.0.1b liberada en el repositorio GitHub de ElevenPaths
- ibombshell: Crear una función de pentesting para MacOS
- ibombshell: Crear un módulo de extracción de claves privadas SSH en Windows 10
- ibombshell 0.0.1b en GitHub & Environment Injection UAC Bypass en Windows 10
- ibombshell: Mocking Trusted Directories UAC Bypass en Windows 10
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 el equipo de "Ideas Locas" de la unidad CDO de Telefónica.
Figura 1: ibombshell en BlackHat Europe: Nuevas funciones |
Esto que he descrito encaja con el modo Everywhere y luego la segunda parte la posibilidad de cambiar el rol y poder ser una shell remota que se ejecuta en una post-explotación aportando un valor añadido y que ayuda a aprovechar el potencial de Powershell en la máquina. Así que nos veremos el miércoles, 6 de Diciembre, en el London Excel.
Esto es lo que intentaremos mostrar en el Arsenal, el potencial de una herramienta que recién empieza. Lo que hemos trabajado en estos meses y que la gente vea que puede hacer Ethical Hacking y aprovechar la fase de post-explotación al máximo gracias a ibombshell y la base de Powershell. Lógicamente no queremos reinventar la rueda, por lo que la posibilidad de cargar funciones externas es importante, y de esta parte va el artículo de hoy.
Figura 2: iBombShell en Black Hat Europe 2018 Arsenal |
Esta funcionalidad es algo que queríamos aprovechar para diferenciar la herramienta de otras. Uno no puede adaptar o implementar todo, puede aprovechar el trabajo de la comunidad para brindar de forma sencilla y útil el poder de la funcionalidad. Para ello, creamos una función llamada loaderext para el modo Everywhere de ibombshell. La idea era sencilla, la función loader de ibombshell cargará funciones especificadas en el fichero functions.txt y que son creadas por nosotros, mientras que con la función loaderext se puede descargar cualquier función de pentesting que se encuentre en Github.
A modo de ejemplo: Invoke-LoginPrompt de Enigma0x3 en Everywhere mode
Esta es una funcionalidad más que interesante. Esta función escrita por el investigador Matt Nelson o Enigma0x3, permite presentar un pop-up al usuario solicitándole credenciales. Es similar al módulo ask de post-explotación de Metasploit. Lo interesante de la función es que se valida que las credenciales que introduce el usuario al que se le presenta el pop-up sean válidas, ya que, en caso contrario, se vuelve a solicitar credenciales.
Figura 3: Función de Enigma0x3 |
Por defecto, la función configura el usuario y el dominio, si el usuario es de dominio, que se debe mostrar al usuario víctima. Al ver la función en funcionamiento - valga la redundancia - uno puede pensar que es difícil que un usuario caiga, pero si pensamos un poco más, entendemos que es probable que el usuario pueda introducir su contraseña de usuario. Todo es posible en un Ethical Hacking.
Visto esto, toca hablaros de la función system/loaderext del modo Everywhere de ibombshell. Como se puede ver en la imagen, la función loaderext se carga desde la carpeta system de ibombshell del repositorio de Github de ElevenPaths. Una vez se carga esta función se encargará de descargarnos y ejecutar en memoria cualquier función que queramos.
Figura 4: Función system/loadtext |
Hay que tener en cuenta que necesitamos pasarle la URL de una función que se encuentre en texto sin formato, por eso nos apoyamos en el subdominio RAW de Github, donde son recursos de texto. En este ejemplo conseguimos la carga de la función Invoke-LoginPrompt. Iremos añadiendo más funciones interesantes, donde se especifica el autor, la ruta al raw de la función y el nombre con el que se cargará la función.
Figura 5: Pop-up solicitando credenciales |
En este instante, cuando ejecutamos Invoke-LoginPrompt se levanta un pop-up y nos solicita las credenciales. Cuando el usuario introduzca las credenciales se obtienen en la Powershell.
A modo de ejemplo: Invoke-LoginPrompt de Enigma0x3 en Silently mode
Cuando ves este tipo de funciones siempre piensas en llevarlo al modo Silently, pensando en un proyecto de Ethical Hacking. Por ello, disponemos de un módulo llamado loaderext para el modo Silently que permite cargar en el ámbito o scope de ejecución de la Powershell cualquier función externa, es decir, descargada desde el raw de Github.
El módulo se encuentra en modules/system/loaderext.py. Presenta dos atributos, el primero es el warrior que ejecutará esto. Hay que recordar que el warrior es la instancia de ibombshell ejecutada en una máquina en modo Silently. El segundo atributo a configurar es la ruta para descargar la función. Es muy importante entender que esto descargará la función al ámbito o instancia de Powershell donde se ejecuta nuestro ibombshell, por lo que después deberemos ejecutar un módulo que permita interactuar con este entorno.
Para ello disponemos del módulo modules/system/pshell-local. Vamos a ir viéndolo poco a poco. Partimos de la situación en la que ya disponemos de una sesión de ibombshell.
Figura 6: Sesión de ibombshell activa funcionando |
Como vemos, tenemos una conexión desde una instancia de ibombshell, es decir, un warrior llamado MikNxl. Estos identificados se generan de forma aleatoria. A continuación, podemos ver la configuración del módulo de forma sencilla.
Figura 7: Configuración del módulo |
En este instante, en el ámbito de ejecución de nuestra ibombshell disponemos de la función Invoke-LoginPrompt cargada en memoria. Para poder verlo de forma sencilla, vamos a utilizar un módulo llamado modules/system/pshell-local. Este módulo es una especie de Shell que va a ejecutar instrucciones.
Figura 8: Ejecución de instrucciones |
En otras palabras, podemos indicar que la instrucción que queremos ejecutar es Invoke-LoginPrompt. Aunque sea vea un poco enrevesado es una forma sencilla de conseguir un gran potencial. Además, hemos incluido algunos módulos que implementar de forma sencilla esto. Por ejemplo, si echáis un ojo al código de modules/credentials/invoke-powerdump o modules/execution/invoke-smbexec. En estos módulos se utilizan atributos para configurarlos y sencillamente se descargan dinámicamente sobre la máquina remota a través de Internet.
Figura 9: iBombShell: Demo de loaderext para hacer phishing de prompt
Por último, os dejo un vídeo para que lo veáis en funcionamiento y se entienda de forma sencilla el potencial que tiene el loaderext. En este caso es un simple phishing de un prompt de credenciales de Windows. Pero que puede ser de gran utilidad.
Referencias sobre ibombshell:
- MacOS & Windows: Pentesting it with ibombshell
- ibombsehll: Whitepaper disponible
- ibombshell: Shell de pentesting en MacOS con Powershell
- ibombshell 0.0.1b liberada en el repositorio GitHub de ElevenPaths
- ibombshell: Crear una función de pentesting para MacOS
- ibombshell: Crear un módulo de extracción de claves privadas SSH en Windows 10
- ibombshell 0.0.1b en GitHub & Environment Injection UAC Bypass en Windows 10
- ibombshell: Mocking Trusted Directories UAC Bypass en Windows 10
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 el equipo de "Ideas Locas" de la unidad CDO de Telefónica.
No hay comentarios:
Publicar un comentario