Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
polyshell — Un poliglotta Bash/Batch/PowerShell! | Kitploit
Strumenti/GitHubGitHub/llamasoft/polyshell
Generazione di PayloadScripting e AutomazionePenetration TestingRed TeamingSviluppo Payload
GitHubllamasoft/polyshell

polyshell

Un poliglotta Bash/Batch/PowerShell!

Vedi Repository
225203 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

PolyShell: un poliglotta Bash/Batch/PowerShell

Cos'è

PolyShell è uno script valido contemporaneamente in Bash, Windows Batch e PowerShell (ovvero un poliglotta).

Ciò rende PolyShell un modello utile per i test di penetrazione poiché può essere eseguito sulla maggior parte dei sistemi senza la necessità di payload specifici per il target. PolyShell è anche specificamente progettato per essere distribuito tramite injection di input utilizzando un USB Rubby Ducky, MalDuino, o dispositivo simile.

Batch demo Powershell demo Unix shell demo

Come Usarlo

Come script autonomo

  1. Copia/rinomina lo script in modo che abbia l'estensione corretta (.sh, .bat, o .ps1).
  2. Esegui lo script con una shell Unix, come file batch o con PowerShell.

Usando l'injection di input

  1. Apri un terminale sulla macchina target.
  2. Esegui il payload.
  3. Premi Ctrl-C, poi esegui exit.

Il metodo di injection tramite input si comporterà leggermente diversamente dal metodo script. Se eseguito come script, il payload terminerà immediatamente una volta elaborato un linguaggio. Quando distribuito tramite injection, il payload esegue invece un ciclo di lettura. Senza di esso, il payload chiuderebbe la finestra del terminale ma continuerebbe a digitare in una finestra sconosciuta. Ctrl-C interrompe lo script dal ciclo di lettura, permettendogli di funzionare senza effetti collaterali indesiderati.

Inoltre, incollare lo script in un terminale potrebbe fallire. Una volta che lo script raggiunge il ciclo di lettura, alcuni terminali tratteranno il testo incollato rimanente come input del ciclo di lettura (buono), ma altri potrebbero continuare ad eseguire lo script quando il ciclo di lettura termina (cattivo).

Come Funziona

Il trucco principale è far sì che ogni altro linguaggio 'guardi altrove' quando vogliamo eseguire codice specifico per uno solo di essi. Ciò si ottiene sfruttando le stranezze dei linguaggi relative a quoting, redirezione e commenti.
Considera la seguente riga:

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

Ogni linguaggio vede il comando echo, ma interpreterà il resto della riga in modo diverso.
Ad esempio, ecco cosa interpreterà ogni linguaggio come stringa:

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

Dopo aver eseguito la riga, lo script bash si troverà in un here document, lo script PowerShell in un multiline-comment, e lo script batch continuerà ad eseguire normalmente. Dopo che ogni linguaggio ha terminato l'esecuzione, lo terminiamo. Questo ci evita di dover aggirare le sue stranezze più avanti nello script.

Stranezze

Ovviamente, i trucchi necessari per realizzare questo polyglot non seguono le normali convenzioni di codifica.
Ci sono diverse stranezze che sono state sfruttate o che hanno dovuto essere aggirate:

  • Tutti e tre i linguaggi hanno caratteri di escape diversi:
    • Bash: backslash (\)
    • Batch: caret (^)
    • PowerShell: backtick (`)
  • I caratteri di escape funzionano all'interno delle stringhe Bash e PowerShell, ma non in quelle batch.
  • I redirect (cioè < e >) hanno un significato speciale in tutti e tre i linguaggi se non sono quotati.
  • I redirect non devono essere necessariamente alla fine di un comando.
    • Questo è valido in Bash/Batch/PowerShell: echo >output.txt "Hello World"
  • Batch è l'unico linguaggio senza stringhe o commenti multilinea.
  • Batch tratta > come un redirect anche quando tocca direttamente una stringa, ma PowerShell no.
  • Le istruzioni GOTO dello script batch funzionano solo quando eseguite come script, non in modo interattivo.
  • Il commento multilinea di PowerShell (<#) deve essere immediatamente preceduto da spazi bianchi.
  • Gli here document di Bash possono iniziare ovunque purché non siano quotati e non siano un commento.
Scarica lo strumento