
PowerSploit - Um Framework de Pós-Exploração PowerShell
Executar código em uma máquina alvo.
Invoke-DllInjectionInjeta uma DLL no ID do processo de sua escolha.
Invoke-ReflectivePEInjectionCarrega reflexivamente um arquivo PE do Windows (DLL/EXE) no processo do PowerShell, ou injeta reflexivamente uma DLL em um processo remoto.
Invoke-ShellcodeInjeta shellcode no ID do processo de sua escolha ou localmente dentro do PowerShell.
Invoke-WmiCommandExecuta um ScriptBlock do PowerShell em um computador alvo e retorna sua saída formatada usando WMI como um canal C2.
Modificar e/ou preparar scripts para execução em uma máquina comprometida.
Out-EncodedCommandComprime, codifica em Base-64 e gera uma saída de linha de comando para um script de payload do PowerShell.
Out-CompressedDllComprime, codifica em Base-64 e gera código para carregar uma DLL gerenciada na memória.
Out-EncryptedScriptCriptografa arquivos de texto/scripts.
Remove-CommentRemove comentários e espaços extras de um script.
Adicionar capacidades de persistência a um script PowerShell
New-UserPersistenceOptionConfigura opções de persistência em nível de usuário para a função Add-Persistence.
New-ElevatedPersistenceOptionConfigura opções de persistência elevada para a função Add-Persistence.
Add-PersistenceAdiciona capacidades de persistência a um script.
Install-SSPInstala uma DLL de provedor de suporte de segurança (SSP).
Get-SecurityPackagesEnumera todos os pacotes de segurança carregados (SSPs).
O AV não tem chance contra o PowerShell!
Find-AVSignatureLocaliza assinaturas de AV de byte único utilizando o mesmo método do DSplit do 'class101'.
Todos os seus dados pertencem a mim!
Invoke-TokenManipulationLista os tokens de logon disponíveis. Cria processos com tokens de logon de outros usuários e personifica tokens de logon no thread atual.
Invoke-CredentialInjectionCria logons com credenciais em texto claro sem disparar o suspeito Event ID 4648 (Logon de Credencial Explícita).
Invoke-NinjaCopyCopia um arquivo de um volume particionado NTFS lendo o volume bruto e analisando as estruturas NTFS.
Invoke-MimikatzCarrega reflexivamente o Mimikatz 2.0 na memória usando PowerShell. Pode ser usado para extrair credenciais sem gravar nada no disco. Pode ser usado para qualquer funcionalidade fornecida pelo Mimikatz.
Get-KeystrokesRegistra as teclas pressionadas, o horário e a janela ativa.
Get-GPPPasswordRecupera a senha em texto claro e outras informações de contas enviadas por meio de Preferências de Política de Grupo (Group Policy Preferences).
Get-GPPAutologonRecupera o nome de usuário e a senha de logon automático do registry.xml se enviado por meio de Preferências de Política de Grupo.
Get-TimedScreenshotUma função que captura screenshots em intervalos regulares e os salva em uma pasta.
New-VolumeShadowCopyCria uma nova cópia de sombra de volume.
Get-VolumeShadowCopyLista os caminhos de dispositivo de todas as cópias de sombra de volume locais.
Mount-VolumeShadowCopyMonta uma cópia de sombra de volume.
Remove-VolumeShadowCopyExclui uma cópia de sombra de volume.
Get-VaultCredentialExibe objetos de credencial do cofre do Windows, incluindo credenciais da web em texto claro.
Out-MinidumpGera um minidump de memória completa de um processo.
Get-MicrophoneAudioGrava áudio do microfone do sistema e salva no disco
Causar caos geral com PowerShell.
Set-MasterBootRecordCódigo de prova de conceito que sobrescreve o registro mestre de inicialização (Master Boot Record) com a mensagem de sua escolha.
Set-CriticalProcessFaz com que sua máquina exiba uma tela azul ao sair do PowerShell.
Ferramentas para ajudar na escalação de privilégios em um alvo.
PowerUpCentral de verificações comuns de escalação de privilégios, juntamente com alguns vetores de weaponização.
Ferramentas para auxiliar na fase de reconhecimento de um teste de penetração.
Invoke-PortscanFaz uma varredura simples de portas usando sockets regulares, baseado (bem) livremente no nmap.
Get-HttpStatusRetorna os Códigos de Status HTTP e a URL completa para caminhos especificados quando fornecido com um arquivo de dicionário.
Invoke-ReverseDnsLookupEscaneia um intervalo de endereços IP em busca de registros DNS PTR.
PowerViewPowerView é uma série de funções que realiza enumeração e exploração de rede e domínio Windows.
Uma coleção de dicionários usados para auxiliar na fase de reconhecimento de um teste de penetração. Os dicionários foram retirados das seguintes fontes.
O projeto PowerSploit e todos os scripts individuais estão sob a licença BSD 3-Clause a menos que explicitamente indicado de outra forma.
Consulte a ajuda baseada em comentários em cada script individual para obter informações detalhadas de uso.
Para instalar este módulo, coloque toda a pasta PowerSploit em um dos seus diretórios de módulos. Os caminhos padrão do módulo PowerShell estão listados na variável de ambiente $Env:PSModulePath.
O caminho padrão do módulo por usuário é: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" O caminho padrão do módulo em nível de computador é: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
Para usar o módulo, digite Import-Module PowerSploit
Para ver os comandos importados, digite Get-Command -Module PowerSploit
Se você estiver executando o PowerShell v3 e quiser remover o irritante aviso 'Você realmente deseja executar scripts baixados da Internet', depois de ter colocado o PowerSploit em seu caminho de módulo, execute o seguinte one-liner:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerSploit) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
Para ajuda em cada comando individual, o Get-Help é seu amigo.
Nota: As ferramentas contidas neste módulo foram todas projetadas para serem executadas individualmente. Incluí-las em um módulo simplesmente favorece a portabilidade.
Precisamos de contribuições! Se você tem uma ótima ideia para o PowerSploit, adoraríamos adicioná-la. Novas adições exigirão o seguinte:
Para todos os contribuidores e futuros contribuidores do PowerSploit, peço que sigam este guia de estilo ao escrever seus scripts/módulos.
Evite Write-Host a todo custo. Funções/cmdlets do PowerShell não são utilitários de linha de comando! Pull requests contendo código que usa Write-Host não serão considerados. Você deve gerar objetos personalizados. Para mais informações sobre como criar objetos personalizados, leia estes artigos:
Se você quiser exibir informações relevantes de depuração na tela, use Write-Verbose. O usuário pode sempre adicionar '-Verbose'.
Sempre forneça ajuda descritiva baseada em comentários para cada script. Além disso, certifique-se de incluir seu nome e uma licença BSD 3-Clause (a menos que haja circunstâncias atenuantes que impeçam a aplicação da licença BSD).
Certifique-se de que todas as funções sigam a concordância verbo-substantivo adequada do PowerShell. Use Get-Verb para listar os verbos padrão usados pelo PowerShell. Exceções aos verbos suportados serão consideradas caso a caso.
Prefiro que os nomes de variáveis sejam capitalizados e tão descritivos quanto possível.
Forneça espaçamento lógico entre seu código. Indente seu código para torná-lo mais legível.
Se você se pegar repetindo código, escreva uma função.
Capture todos os erros antecipados e forneça uma saída significativa. Se você tiver um erro que deve interromper a execução do script, use 'Throw'. Se você tiver um erro que não precisa interromper a execução, use Write-Error.
Se você estiver escrevendo um script que interage com a API Win32, tente evitar compilar C# embutido com Add-Type. Tente usar o módulo PSReflect, se possível.
Não use caminhos codificados. Um script deve ser utilizável imediatamente. Ninguém deve ter que modificar o código a menos que queira.
A compatibilidade com PowerShell v2 é altamente desejada.
Use parâmetros posicionais e torne os parâmetros obrigatórios quando fizer sentido. Por exemplo, estou procurando algo como o seguinte:
[Parameter(Position = 0, Mandatory = $True)]Não use aliases a menos que faça sentido para receber entrada de pipeline. Eles tornam o código mais difícil de ler para pessoas que não estão familiarizadas com um alias específico.
Tente não deixar os comandos continuarem por muito tempo. Por exemplo, um pipeline é um lugar natural para uma quebra de linha.
Não exagere nos comentários inline. Use-os apenas quando certos aspectos do código podem ser confusos para um leitor.
Em vez de usar Out-Null para suprimir saída indesejada/irrelevante, salve a saída indesejada em $null. Fazer isso proporciona um ligeiro ganho de desempenho.
Use valores padrão para seus parâmetros quando fizer sentido. Idealmente, você quer um script que funcione sem exigir nenhum parâmetro.
Se um script criar objetos personalizados complexos, inclua um arquivo ps1xml que formatará adequadamente a saída do objeto.