
PowerSploit - A PowerShell Post-Exploitation Framework
Forkado para adicionar alguns recursos ao PowerView.ps1 que costumo executar manualmente
Execute código em uma máquina de destino.
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 dentro do PowerShell localmente.
Invoke-WmiCommandExecuta um ScriptBlock do PowerShell em um computador de destino e retorna sua saída formatada usando WMI como um canal de C2.
Modifique e/ou prepare scripts para execução em uma máquina comprometida.
Out-EncodedCommandComprime, codifica em Base-64 e gera 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 em memória.
Out-EncryptedScriptCriptografa arquivos de texto/scripts.
Remove-CommentRemove comentários e espaços em branco extras de um script.
Adicione capacidades de persistência a um script do 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 elevadas 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 antivírus não tem chance contra o PowerShell!
Find-AVSignatureLocaliza assinaturas de antivírus 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 acionar um ID de Evento 4648 suspeito (Logon com Credencial Explícita).
Invoke-NinjaCopyCopia um arquivo de um volume particionado em 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, a hora e a janela ativa.
Get-GPPPasswordRecupera a senha em texto claro e outras informações de contas distribuídas por meio das Preferências de Política de Grupo.
Get-GPPAutologonRecupera o nome de usuário e a senha de logon automático do registry.xml, se distribuídos por meio das Preferências de Política de Grupo.
Get-TimedScreenshotUma função que tira capturas de tela em intervalos regulares e as 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
Cause o caos geral com o PowerShell.
Set-MasterBootRecordCódigo de prova de conceito que sobrescreve o registro mestre de inicialização com a mensagem de sua escolha.
Set-CriticalProcessFaz sua máquina entrar em tela azul ao sair do PowerShell.
Ferramentas para ajudar a escalar privilégios em um alvo.
PowerUpCentral de verificações comuns de escalonamento de privilégios, junto com alguns vetores de weaponização.
Ferramentas para auxiliar na fase de reconhecimento de um teste de penetração.
Invoke-PortscanRealiza uma verificação simples de portas usando soquetes comuns, baseado (bastante) livremente no nmap.
Get-HttpStatusRetorna os códigos de status HTTP e a URL completa para caminhos especificados quando um arquivo de dicionário é fornecido.
Invoke-ReverseDnsLookupVarre uma faixa 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 de domínio do 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, salvo indicação explícita em contrário.
Consulte a ajuda baseada em comentários em cada script individual para obter informações detalhadas de uso.
Para instalar este módulo, coloque a pasta inteira do PowerSploit em um de seus diretórios de módulos. Os caminhos padrão dos módulos do 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 usando o PowerShell v3 e quiser remover o irritante aviso 'Você realmente deseja executar scripts baixados da Internet', depois de colocar o PowerSploit em seu caminho de módulos, execute o seguinte one-liner:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerSploit) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
Para obter ajuda sobre cada comando individual, o Get-Help é seu amigo.
Nota: As ferramentas contidas neste módulo foram todas projetadas para que possam ser executadas individualmente. Incluí-las em um módulo simplesmente contribui para maior 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 o 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 use Write-Host não serão considerados. Você deve gerar objetos personalizados em vez disso. Para obter mais informações sobre como criar objetos personalizados, leia estes artigos:
Se você quiser exibir informações relevantes de depuração na tela, use o Write-Verbose. O usuário pode simplesmente 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 o 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 das variáveis sejam capitalizados e sejam 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 previstos e forneça uma saída significativa. Se você tiver um erro que deva interromper a execução do script, use 'Throw'. Se você tiver um erro que não precise interromper a execução, use o Write-Error.
Se você estiver escrevendo um script que interage com a API Win32, tente evitar compilar C# inline com o 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 precisar modificar o código, a menos que queira.
A compatibilidade com o 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 do 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 se estenderem 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 possam ser confusos para o leitor.
Em vez de usar o Out-Null para suprimir saída indesejada/irrelevante, salve a saída indesejada em $null. Fazer isso proporciona uma pequena melhoria 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 formate adequadamente a saída do objeto.