Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
polyshell — Un polyglotte Bash/Batch/PowerShell ! | Kitploit
Outils/GitHubGitHub/llamasoft/polyshell
Génération de PayloadsScripting et AutomatisationTests d'IntrusionRed TeamingDéveloppement de Charges Utiles
GitHubllamasoft/polyshell

polyshell

Un polyglotte Bash/Batch/PowerShell !

Voir le dépôt
22520il y a 3 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

PolyShell : un polyglotte Bash/Batch/PowerShell

Ce que c'est

PolyShell est un script valide simultanément en Bash, Windows Batch et PowerShell (c'est-à-dire un polyglotte).

Cela fait de PolyShell un modèle utile pour les tests de pénétration, car il peut être exécuté sur la plupart des systèmes sans avoir besoin de charges utiles spécifiques à la cible. PolyShell est également conçu spécifiquement pour être délivré par injection d'entrée à l'aide d'un USB Rubby Ducky, d'un MalDuino, ou d'un appareil similaire.

Démo Batch Démo Powershell Démo shell Unix

Comment l'utiliser

En tant que script autonome

  1. Copiez/renommez le script pour qu'il ait la bonne extension de fichier (.sh, .bat ou .ps1).
  2. Exécutez le script avec un shell Unix, en tant que fichier batch ou avec PowerShell.

En utilisant l'injection d'entrée

  1. Ouvrez un terminal sur la machine cible.
  2. Exécutez la charge utile.
  3. Appuyez sur Ctrl-C, puis exécutez exit.

La méthode d'injection d'entrée se comportera légèrement différemment de la méthode script. Lorsqu'il est exécuté en tant que script, la charge utile se termine immédiatement une fois qu'un langage a été traité. Lorsqu'elle est délivrée par injection, la charge utile exécute plutôt une boucle de lecture. Sans cela, la charge utile fermerait la fenêtre du terminal mais continuerait à taper dans une fenêtre inconnue. Le Ctrl-C sort le script de la boucle de lecture, lui permettant de s'exécuter sans effets secondaires indésirables.

De plus, coller le script dans un terminal peut échouer. Une fois que le script atteint la boucle de lecture, certains terminaux traiteront le texte restant collé comme l'entrée de la boucle de lecture (bon), mais d'autres peuvent continuer à exécuter le script lorsque la boucle de lecture se termine (mauvais).

Comment ça fonctionne

L'astuce principale est de faire en sorte que chaque autre langage « détourne le regard » lorsque nous voulons exécuter du code spécifique à un seul d'entre eux. Ceci est accompli en exploitant les particularités des langages concernant les guillemets, la redirection et les commentaires.
Considérez la ligne suivante :

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

Chaque langage voit la commande echo, mais interprète le reste de la ligne différemment.
Par exemple, voici ce que chaque langage interprétera comme une chaîne :

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

Après avoir exécuté la ligne, le script bash sera dans un here document, le script PowerShell sera dans un commentaire multi-ligne, et le script batch continuera à s'exécuter normalement. Après que chaque langage a fini de s'exécuter, nous le terminons. Cela nous évite d'avoir à contourner ses particularités plus tard dans le script.

Particularités

Évidemment, les astuces nécessaires pour réaliser ce polyglotte ne suivent pas les conventions de codage normales.
Il y a pas mal de particularités qui ont été exploitées ou contournées :

  • Tous les trois langages ont des caractères d'échappement différents :
    • Bash : antislash (\)
    • Batch : accent circonflexe (^)
    • PowerShell : guillemet inversé (`)
  • Les caractères d'échappement fonctionnent dans les chaînes Bash et PowerShell, mais pas dans les chaînes batch.
  • Les redirections (c'est-à-dire < et >) ont une signification spéciale dans les trois langages sauf si elles sont entre guillemets.
  • Les redirections n'ont pas besoin d'être à la fin d'une commande.
    • Ceci est valide en Bash/Batch/PowerShell : echo >output.txt "Hello World"
  • Batch est le seul langage sans chaînes ou commentaires multi-lignes.
  • Batch traite > comme une redirection même lorsqu'il touche directement une chaîne, mais PowerShell non.
  • Les instructions GOTO du script Batch ne fonctionnent que lorsqu'il est exécuté en tant que script, pas de manière interactive.
  • Le commentaire multi-ligne de PowerShell (<#) doit être immédiatement précédé d'un espace.
  • Les here documents de Bash peuvent commencer n'importe où tant qu'ils ne sont pas entre guillemets et ne sont pas un commentaire.
Télécharger l’outil