Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
polyshell — ¡Un políglota de Bash/Batch/PowerShell! | Kitploit
Herramientas/GitHubGitHub/llamasoft/polyshell
Generación de PayloadsScripting y AutomatizaciónPruebas de PenetraciónRed TeamingDesarrollo de Payloads
GitHubllamasoft/polyshell

polyshell

¡Un políglota de Bash/Batch/PowerShell!

Ver Repositorio
225203hace 3 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

PolyShell: un políglota de Bash/Batch/PowerShell

Qué es

PolyShell es un script que es válido simultáneamente en Bash, Windows Batch y PowerShell (es decir, un políglota).

Esto convierte a PolyShell en una plantilla útil para pruebas de penetración, ya que se puede ejecutar en la mayoría de los sistemas sin necesidad de cargas útiles específicas del objetivo. PolyShell también está diseñado específicamente para ser entregable mediante inyección de entrada utilizando un USB Rubber Ducky, MalDuino, o un dispositivo similar.

Demostración de Batch Demostración de PowerShell Demostración de shell Unix

Cómo usarlo

Como script independiente

  1. Copia/renombra el script para que tenga la extensión de archivo correcta (.sh, , o ).
Descargar herramienta
.bat
.ps1
  • Ejecuta el script con un shell Unix, como archivo por lotes, o con PowerShell.
  • Usando inyección de entrada

    1. Abre una terminal en la máquina objetivo.
    2. Ejecuta la carga útil.
    3. Presiona Ctrl-C, luego ejecuta exit.

    El método de inyección de entrada se comportará ligeramente diferente al método de script. Cuando se ejecuta como script, la carga útil saldrá inmediatamente una vez que se haya procesado un lenguaje. Cuando se entrega mediante inyección, la carga útil ejecuta un bucle de lectura en su lugar. Sin él, la carga útil cerraría la ventana de la terminal pero seguiría escribiendo en una ventana desconocida. Ctrl-C interrumpe el script del bucle de lectura, permitiéndole ejecutarse sin efectos secundarios no deseados.

    Además, pegar el script en una terminal podría fallar. Una vez que el script llega al bucle de lectura, algunas terminales tratarán el texto pegado restante como la entrada del bucle de lectura (bueno), pero otras pueden continuar ejecutando el script cuando el bucle de lectura sale (malo).

    Cómo funciona

    El truco principal es lograr que cada otro lenguaje "mire hacia otro lado" cuando queremos ejecutar código específico para solo uno de ellos. Esto se logra explotando peculiaridades de los lenguajes en torno a las comillas, la redirección y los comentarios.
    Considere la siguiente línea:

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

    Cada lenguaje ve el comando echo, pero interpretará el resto de la línea de manera diferente.
    Por ejemplo, esto es lo que cada lenguaje interpretará como una cadena:

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

    Después de ejecutar la línea, el script bash estará dentro de un here document, el script de PowerShell estará dentro de un comentario multilínea, y el script batch continuará ejecutándose normalmente. Una vez que cada lenguaje termina de ejecutarse, lo terminamos. Esto evita que necesitemos trabajar alrededor de sus peculiaridades más adelante en el script.

    Peculiaridades

    Obviamente, los trucos necesarios para hacer este políglota no siguen las normales convenciones de codificación.
    Hay bastantes peculiaridades que se aprovecharon o que tuvieron que ser resueltas:

    • Los tres lenguajes tienen caracteres de escape diferentes:
      • Bash: barra invertida (\)
      • Batch: acento circunflejo (^)
      • PowerShell: acento grave (`)
    • Los caracteres de escape funcionan dentro de las cadenas de Bash y PowerShell, pero no dentro de las cadenas de Batch.
    • Las redirecciones (es decir, < y >) tienen un significado especial en los tres lenguajes a menos que estén entre comillas.
    • Las redirecciones no tienen que estar al final de un comando.
      • Esto es Bash/Batch/PowerShell válido: echo >output.txt "Hello World"
    • Batch es el único lenguaje sin cadenas o comentarios multilínea.
    • Batch trata > como una redirección incluso cuando toca directamente una cadena, pero PowerShell no.
    • Las instrucciones GOTO de Batch solo funcionan cuando se ejecutan como script, no cuando se ejecutan de forma interactiva.
    • El comentario multilínea de PowerShell (<#) debe estar inmediatamente precedido por un espacio en blanco.
    • Los here documents de Bash pueden comenzar en cualquier lugar siempre que no estén entre comillas y no sean un comentario.