jueves, marzo 26, 2020

Pentesting con Powershell sin tener Powershell en Windows

Por supuesto que Powershell es una herramienta de administración y gestión en el mundo IT poderosa, pero si estás leyendo este blog sabes que para los profesionales del Ethical Hacking también tiene un potencial excepcional en todas las fases, pero sobretodo para la fase de pos-explotación.

Figura 1: Pentesting con Powershell sin tener Powershell en Windows

Pero, ¿qué ocurre si estamos en un entorno que no es el ideal y no podemos tener acceso a esta poderosa herramienta? Muchas veces los pentesters o los equipos de Red Team no pueden ejecutar Powershell directamente, ya sea por permisos en el usuario actual o bien por que han aplicado una política de seguridad de fortificación tipo "Máxima Seguridad en Windows" para evitar la  ejecución de Powershell. ¿Qué podemos hacer frente a esta limitación ?

Figura 2: Máxima Seguridad en Windows Gold Edition

Es en este punto donde marca la diferencia el pentester, aquel que destaca con su creatividad y pensamiento lateral y consigue llegar donde otros no llegan. Es eso lo que para nosotros es un "hacker", que consigue inventar un camino nuevo y llevar la tecnología a un lugar más allá del que había estado antes. Por ese motivo, y en honor a los creativos, vamos a saltarnos esta limitación de no poder utilizar una powershell.exe para aún así poder ejecutar código en Powershell.

Figura 3: Relájate y be a good hacker

Tanto Powershell como C# son “frontends” para el framework .NET, por ello vamos a utilizar esto a nuestro favor. Utilizaremos los ejecutables de C# para llamar a la misma funcionalidad de .NET con la que accederíamos a través de Powershell, y así sacar el máximo provecho a esta herramienta con sus infinitas posibilidades.

Figura 4: Pentesting con Powershell 2ª Edición

Si quieres conocer lo que puedes hacer con ella, no puedo dejar de recomendaros el libro de nuestro compañero el gran Pablo González de "Pentesting con Powershell" si quieres descubrir todas sus posibilidades.

Preparando el entorno

El proceso que voy a describir, que es muy "hacker", viene muy bien explicado y detallado en el siguiente post de Brian Fehrman. Vamos a necesitar el uso de varias herramientas que vienen por defecto en cualquier entorno de Windows donde puede variar la ubicación donde encontrar dichas herramientas en función de su arquitectura y versión. Primero necesitamos crearnos nuestro pequeño código en C#:

Figura 5: Código en C#

Como se puede observar en el código lo que se va a ejecutar es el texto íntegro que tengamos en nuestro “Script.ps1”. Tenemos nuestro fichero "codigo.cs" y, ¿ahora qué? El sistema operativo Windows nos brinda una herramienta que nos permite compilar el código de C#. En esta prueba de concepto el compilador se encuentra en el siguiente directorio :
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe
Ejecutando el código anterior en una CMD, compilamos el fichero “codigo.cs” y obtenemos el binario “Poc.exe”. Podemos encontrarnos limitados también al no poder ejecutar una simple cmd.exe, que también es un proceso habitual de los que quieren tener Máxima Seguridad en Windows. En el caso de no poder ejecutar la consola, crearemos un acceso directo del ejecutable.

Figura 6: Compilación de codigo.cs con csc.exe

Abrimos después las propiedades del acceso directo que hemos creado y en el "target" o "destino" introducimos el comando anterior, salvo la parte de la ruta de nuestro codigo.cs, ya que también estamos limitados a cierto número de caracteres en este campo. Aplicamos los cambios y arrastramos nuestro "codigo.cs" dentro del acceso directo.

Figura 7: Configuración del acceso directo

De cualquiera de las dos formas conseguimos nuestro binario, pero podemos seguir limitados en la ejecución de binarios por no estar incluido en una lista blanca. No pasa nada. Hay que seguir resolviendo problemas y en este caso volvemos a tirar de otra herramienta del propio Windows:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe
Como en el caso anterior, crearemos un acceso directo en el escritorio que apunte a este ejecutable, en sus propiedades, modificaremos el “target” - para que ejecute el binario y hacer un volcado de todo el proceso resultado en un fichero de log - con el siguiente comando:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe
  /logfile=C:\Users\IEUser\Desktop\nps\log.txt /LogToConsole=false /U
Guardamos los cambios, arrastramos nuestro binario “Poc.exe” dentro del acceso directo y esto ejecutará nuestro Script.ps1, que en nuestro ejemplo es coo sigue en la imagen siguiente.

Figura 8: Script.ps1

Este script trata de descargarse la consola de nuestra querida iBombshell, que utilizamos en una entrada anterior del blog. Si abrimos el fichero “todo.txt” podemos ver que se ejecuta nuestro script y ha hecho la tarea que necesitábamos.

Figura 9: Hemos conseguido ejecutar iBombShell

Así podemos lanzar pequeños script para volcar información que queramos recopilar en un test de intrusión sin vernos limitados por no poder utilizar una PowerShell. Es un buen ejemplo de pensamiento lateral que todo pentester debe desarrollar y no conformarse con las limitaciones con las que se puede encontrar en sus auditorías.

Saludos,

Autor: Víctor Rodríguez Boyero, Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica.

No hay comentarios:

Publicar un comentario