Invoke-TheHash
Invoke-TheHash contém funções PowerShell para realizar tarefas de pass the hash WMI e SMB. As conexões WMI e SMB são acessadas através do .NET TCPClient. A autenticação é realizada passando um hash NTLM para o protocolo de autenticação NTLMv2. Privilégio de administrador local não é necessário no lado do cliente.
Requisitos
PowerShell 2.0 mínimo
Importar
Import-Module ./Invoke-TheHash.psd1
ou
. ./Invoke-WMIExec.ps1
. ./Invoke-SMBExec.ps1
. ./Invoke-SMBEnum.ps1
. ./Invoke-SMBClient.ps1
. ./Invoke-TheHash.ps1
Funções
- Invoke-WMIExec
- Invoke-SMBExec
- Invoke-SMBEnum
- Invoke-SMBClient
- Invoke-TheHash
Invoke-WMIExec
- Função de execução de comandos WMI.
Parâmetros:
- Target - Nome do host ou endereço IP do alvo.
- Username - Nome de usuário para autenticação.
- Domain - Domínio para autenticação. Este parâmetro não é necessário com contas locais ou ao usar @domain após o nome de usuário.
- Hash - Hash de senha NTLM para autenticação. Esta função aceitará o formato LM:NTLM ou NTLM.
- Command - Comando a ser executado no alvo. Se um comando não for especificado, a função apenas verificará se o nome de usuário e o hash têm acesso ao WMI no alvo.
- Sleep - Padrão = 10 Milissegundos: Define os valores de Start-Sleep da função em milissegundos.
Exemplo:
Invoke-WMIExec -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Command "comando ou lançador a executar" -verbose
Captura de tela:

Invoke-SMBExec
- Função de execução de comandos SMB (PsExec) com suporte a SMB1, SMB2.1, com e sem assinatura SMB.
Parâmetros:
- Target - Nome do host ou endereço IP do alvo.
- Username - Nome de usuário para autenticação.
- Domain - Domínio para autenticação. Este parâmetro não é necessário com contas locais ou ao usar @domain após o nome de usuário.
- Hash - Hash de senha NTLM para autenticação. Esta função aceitará o formato LM:NTLM ou NTLM.
- Command - Comando a ser executado no alvo. Se um comando não for especificado, a função apenas verificará se o nome de usuário e o hash têm acesso ao SCM no alvo.
- CommandCOMSPEC - Padrão = Habilitado: Precede %COMSPEC% /C ao Comando.
- Service - Padrão = 20 Caracteres Aleatórios: Nome do serviço a ser criado e excluído no alvo.
- Sleep - Padrão = 150 Milissegundos: Define os valores de Start-Sleep da função em milissegundos.
- Version - Padrão = Auto: (Auto,1,2.1) Força a versão SMB. O comportamento padrão é realizar negociação de versão SMB e usar SMB2.1 se suportado pelo alvo.
Exemplo:
Invoke-SMBExec -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Command "comando ou lançador a executar" -verbose
Exemplo:
Verificar requisitos de assinatura SMB no alvo.
Invoke-SMBExec -Target 192.168.100.20
Captura de tela:

Invoke-SMBEnum
- Invoke-SMBEnum realiza tarefas de enumeração de Usuários, Grupos, NetSession e Compartilhamentos sobre SMB2.1 com e sem assinatura SMB.
Parâmetros:
- Target - Nome do host ou endereço IP do alvo.
- Username - Nome de usuário para autenticação.
- Domain - Domínio para autenticação. Este parâmetro não é necessário com contas locais ou ao usar @domain após o nome de usuário.
- Hash - Hash de senha NTLM para autenticação. Esta função aceitará o formato LM:NTLM ou NTLM.
- Action - (All,Group,NetSession,Share,User) Padrão = Share: Ação de enumeração a ser executada.
- Group - Padrão = Administrators: Grupo a ser enumerado.
- Sleep - Padrão = 150 Milissegundos: Define os valores de Start-Sleep da função em milissegundos.
- Version - Padrão = Auto: (Auto,1,2.1) Força a versão SMB. O comportamento padrão é realizar negociação de versão SMB e usar SMB2.1 se suportado pelo alvo. Nota: apenas a verificação de assinatura funciona com SMB1.
Exemplo:
Invoke-SMBEnum -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -verbose
Captura de tela:

Invoke-SMBClient
- Função de cliente SMB com suporte a SMB2.1 e assinatura SMB. Esta função fornece principalmente capacidades de compartilhamento de arquivos SMB para trabalhar com hashes que não possuem privilégio de execução remota de comandos. Esta função também pode ser usada para preparar payloads para uso com Invoke-WMIExec e Invoke-SMBExec. Note que Invoke-SMBClient é construído sobre o .NET TCPClient e não usa o cliente SMB do Windows. Invoke-SMBClient é muito mais lento que o cliente Windows.
Parâmetros:
- Username - Nome de usuário para autenticação.
- Domain - Domínio para autenticação. Este parâmetro não é necessário com contas locais ou ao usar @domain após o nome de usuário.
- Hash - Hash de senha NTLM para autenticação. Esta função aceitará o formato LM:NTLM ou NTLM.
- Action - Padrão = List: (List/Recurse/Delete/Get/Put) Ação a ser executada.
-
- List: Lista o conteúdo de um diretório.
-
- Recurse: Lista o conteúdo de um diretório e todos os subdiretórios.
-
- Delete: Exclui um arquivo.
-
-
- Put: Envia um arquivo e define os tempos de criação, acesso e última gravação para corresponder ao arquivo de origem.
- Source
-
- List e Recurse: Caminho UNC para um diretório.
-
- Delete: Caminho UNC para um arquivo.
-
- Get: Caminho UNC para um arquivo.
-
- Put: Arquivo para enviar. Se um caminho completo não for especificado, o arquivo deve estar no diretório atual. Ao usar a opção 'Modify', 'Source' deve ser um array de bytes.
- Destination
-
- List e Recurse: Não usado.
-
-
- Get: Se usado, o valor será o novo nome do arquivo baixado. Se um caminho completo não for especificado, o arquivo será criado no diretório atual.
-
- Put: Caminho UNC para o arquivo enviado. O nome do arquivo deve ser especificado.
- Modify
-
- List e Recurse: A função produzirá um objeto contendo o conteúdo do diretório.
-
-
- Get: A função produzirá um array de bytes do arquivo baixado em vez de escrevê-lo no disco. É aconselhável usar isso apenas com arquivos menores e enviar a saída para uma variável.
-
- Put: Envia um array de bytes para um novo arquivo de destino.
- NoProgress - Impede a exibição de uma barra de progresso de upload e download.
Exemplo:
Listar o conteúdo de um diretório raiz de compartilhamento.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Source \\server\share -verbose
Exemplo:
Listar recursivamente o conteúdo de um compartilhamento começando pela raiz.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Recurse -Source \\server\share
Exemplo:
Listar recursivamente o conteúdo de um subdiretório de compartilhamento e retornar apenas o conteúdo para uma variável.
$directory_contents = Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Recurse -Source \\server\share\subdirectory -Modify
Exemplo:
Excluir um arquivo em um compartilhamento.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Delete -Source \\server\share\file.txt
Exemplo:
Excluir um arquivo em subdiretórios dentro de um compartilhamento.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Delete -Source \\server\share\subdirectory\subdirectory\file.txt
Exemplo:
Baixar um arquivo de um compartilhamento.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\file.txt
Exemplo:
Baixar um arquivo de um subdiretório de compartilhamento e definir um novo nome de arquivo.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\subdirectory\file.txt -Destination file.txt
Exemplo:
Baixar um arquivo de um compartilhamento para uma variável de array de bytes em vez do disco.
$password_file = Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Get -Source \\server\share\file.txt -Modify
Exemplo:
Enviar um arquivo para um subdiretório de compartilhamento.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Put -Source file.exe -Destination \\server\share\subdirectory\file.exe
Exemplo:
Enviar um arquivo para um compartilhamento a partir de uma variável de array de bytes.
Invoke-SMBClient -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Action Put -Source $file_byte_array -Destination \\server\share\file.txt -Modify
Captura de tela:

Invoke-TheHash
- Função para executar funções Invoke-TheHash contra múltiplos alvos.
Parâmetros:
- Type - Define a função Invoke-TheHash desejada. Defina como SMBClient, SMBEnum, SMBExec ou WMIExec.
- Target - Lista de nomes de host, endereços IP, notação CIDR ou intervalos de IP para os alvos.
- TargetExclude - Lista de nomes de host, endereços IP, notação CIDR ou intervalos de IP a serem excluídos da lista de alvos.
- PortCheckDisable - (Switch) Desabilita a verificação de porta WMI ou SMB. Como esta função ainda não é multi-thread, a verificação de porta serve para acelerar a função verificando se há uma porta WMI ou SMB aberta antes de tentar uma conexão TCPClient síncrona completa.
- PortCheckTimeout - Padrão = 100: Define o tempo limite de não resposta em milissegundos para a verificação de porta WMI ou SMB.
- Username - Nome de usuário para autenticação.
- Domain - Domínio para autenticação. Este parâmetro não é necessário com contas locais ou ao usar @domain após o nome de usuário.
- Hash - Hash de senha NTLM para autenticação. Este módulo aceitará o formato LM:NTLM ou NTLM.
- Command - Comando a ser executado no alvo. Se um comando não for especificado, a função apenas verificará se o nome de usuário e o hash têm acesso ao WMI ou SCM no alvo.
- CommandCOMSPEC - Padrão = Habilitado: Apenas para tipo SMBExec. Precede %COMSPEC% /C ao Comando.
- Service - Padrão = 20 Caracteres Aleatórios: Apenas para tipo SMBExec. Nome do serviço a ser criado e excluído no alvo.
- SMB1 - (Switch) Força SMB1. Apenas para tipo SMBExec. O comportamento padrão é realizar negociação de versão SMB e usar SMB2 se suportado pelo alvo.
- Sleep - Padrão = WMI 10 Milissegundos, SMB 150 Milissegundos: Define os valores de Start-Sleep da função em milissegundos.
Exemplo:
Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administrator -Hash F6F38B793DB6A94BA04A52F1D3EE92F0
Captura de tela:
