Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
polyshell — Um poliglota Bash/Batch/PowerShell! | Kitploit
Ferramentas/GitHubGitHub/llamasoft/polyshell
Geração de PayloadsScripting e AutomaçãoTestes de PenetraçãoRed TeamingDesenvolvimento de Payloads
GitHubllamasoft/polyshell

polyshell

Um poliglota Bash/Batch/PowerShell!

Ver Repositório
22520há 3 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

PolyShell: um poliglota Bash/Batch/PowerShell

O que é

PolyShell é um script que é simultaneamente válido em Bash, Windows Batch e PowerShell (ou seja, um poliglota).

Isso torna o PolyShell um modelo útil para testes de penetração, pois pode ser executado na maioria dos sistemas sem a necessidade de payloads específicos para o alvo. PolyShell também é projetado especificamente para ser entregue via injeção de entrada usando um USB Rubby Ducky, MalDuino, ou dispositivo similar.

Batch demo Powershell demo Unix shell demo

Como Usar

Como script autónomo

  1. Copie/renomeie o script para que tenha a extensão de arquivo correta (.sh, .bat ou .ps1).
  2. Execute o script com um shell Unix, como um arquivo batch ou com o PowerShell.

Usando injeção de entrada

  1. Abra um terminal na máquina alvo.
  2. Execute o payload.
  3. Pressione Ctrl-C e depois execute exit.

O método de injeção de entrada se comportará de forma ligeiramente diferente do método de script. Quando executado como script, o payload sai imediatamente após o processamento de uma linguagem. Quando entregue via injeção, o payload executa um loop de leitura. Sem ele, o payload fecharia a janela do terminal mas continuaria digitando em uma janela desconhecida. O Ctrl-C interrompe o script do loop de leitura, permitindo que ele execute sem efeitos colaterais indesejados.

Além disso, colar o script em um terminal pode falhar. Uma vez que o script atinge o loop de leitura, alguns terminais tratarão o texto colado restante como entrada do loop de leitura (bom), mas outros podem continuar executando o script quando o loop de leitura sair (ruim).

Como Funciona

O truque principal é fazer com que cada linguagem "desvie o olhar" quando queremos executar código específico para apenas uma delas. Isso é conseguido explorando peculiaridades das linguagens em relação a citações, redirecionamento e comentários.
Considere a seguinte linha:

root@kitploit:~
echo \" <<'BATCH_SCRIPT' >/dev/null ">NUL "\" \`" <#"

Cada linguagem vê o comando echo, mas interpretará o resto da linha de forma diferente.
Por exemplo, isto é o que cada linguagem interpretará como uma string:

root@kitploit:~
      echo \" <<'BATCH_SCRIPT' >/dev/null ">NUL "\" \`" <#"
Bash                                      [-----]     [---]
Batch       [-----------------------------]     [-]   [---]
PS          [-----------------------------]     [-]

Após executar a linha, o script bash estará em um here document, o script PowerShell estará em um comentário multilinha, e o script batch continuará executando normalmente. Após cada linguagem terminar a execução, nós a terminamos. Isso nos impede de precisar contornar suas peculiaridades mais tarde no script.

Peculiaridades

Obviamente, os truques necessários para fazer este poliglota não seguem as convenções normais de codificação.
Existem algumas peculiaridades que foram aproveitadas ou tiveram que ser contornadas:

  • As três linguagens possuem caracteres de escape diferentes:
    • Bash: barra invertida (\)
    • Batch: acento circunflexo (^)
    • PowerShell: crase (`)
  • Os caracteres de escape funcionam dentro de strings Bash e PowerShell, mas não em strings batch.
  • Redirecionamentos (ou seja, < e >) têm significado especial nas três linguagens a menos que sejam citados.
  • Redirecionamentos não precisam estar no final de um comando.
    • Isto é válido em Bash/Batch/PowerShell: echo >output.txt "Hello World"
  • Batch é a única linguagem sem strings ou comentários multilinha.
  • Batch trata > como redirecionamento mesmo quando toca diretamente uma string, mas PowerShell não.
  • As instruções GOTO do script batch funcionam apenas quando executadas como script, não quando executadas interativamente.
  • O comentário multilinha do PowerShell (<#) deve ser imediatamente precedido por espaço em branco.
  • Os here documents do Bash podem começar em qualquer lugar, desde que não estejam entre aspas e não sejam um comentário.
Baixar ferramenta