Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
polyshell — Ein Bash/Batch/PowerShell-Polyglott! | Kitploit
Tools/GitHubGitHub/llamasoft/polyshell
Payload-GenerierungScripting & AutomatisierungPenetrationstestsRed TeamingPayload-Entwicklung
GitHubllamasoft/polyshell

polyshell

Ein Bash/Batch/PowerShell-Polyglott!

Repository anzeigen
22520vor 3 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

PolyShell: Ein Bash/Batch/PowerShell-Polyglott

Was es ist

PolyShell ist ein Skript, das gleichzeitig in Bash, Windows Batch und PowerShell gültig ist (d.h. ein Polyglott).

Dies macht PolyShell zu einer nützlichen Vorlage für Penetrationstests, da es auf den meisten Systemen ohne die Notwendigkeit zielspezifischer Payloads ausgeführt werden kann. PolyShell ist außerdem speziell dafür ausgelegt, mittels Eingabeinjektion über einen USB Rubby Ducky, MalDuino oder ein ähnliches Gerät ausgeliefert zu werden.

Batch demo Powershell demo Unix shell demo

Wie man es verwendet

Als eigenständiges Skript

  1. Kopieren/umbenennen Sie das Skript, damit es die richtige Dateierweiterung hat (.sh, .bat oder .ps1).
  2. Führen Sie das Skript mit einer Unix-Shell, als Batch-Datei oder mit PowerShell aus.

Mittels Eingabeinjektion

  1. Öffnen Sie ein Terminal auf dem Zielrechner.
  2. Führen Sie den Payload aus.
  3. Drücken Sie Strg-C, dann führen Sie exit aus.

Die Eingabeinjektionsmethode verhält sich etwas anders als die Skriptmethode. Bei Ausführung als Skript beendet sich der Payload sofort, sobald eine Sprache verarbeitet wurde. Bei Lieferung per Injektion führt der Payload stattdessen eine Leseschleife aus. Ohne diese würde der Payload das Terminalfenster schließen, aber stattdessen in ein unbekanntes Fenster weitertippen. Strg-C unterbricht die Leseschleife des Skripts und ermöglicht so eine Ausführung ohne unbeabsichtigte Nebeneffekte.

Zusätzlich kann das Einfügen des Skripts in ein Terminal fehlschlagen. Sobald das Skript die Leseschleife erreicht, behandeln einige Terminals den restlichen eingefügten Text als Eingabe für die Leseschleife (gut), andere hingegen führen das Skript möglicherweise weiter aus, wenn die Leseschleife beendet wird (schlecht).

Wie es funktioniert

Der Haupttrick besteht darin, die jeweils andere Sprache 'wegschauen' zu lassen, wenn wir nur für eine von ihnen spezifischen Code ausführen wollen. Dies wird erreicht, indem sprachspezifische Eigenheiten bei Anführungszeichen, Umleitungen und Kommentaren ausgenutzt werden.
Betrachten Sie die folgende Zeile:

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

Jede Sprache sieht den Befehl echo, interpretiert den Rest der Zeile jedoch unterschiedlich.
Zum Beispiel interpretiert jede Sprache Folgendes als Zeichenkette:

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

Nach Ausführung der Zeile befindet sich das Bash-Skript in einem Here-Dokument, das PowerShell-Skript in einem mehrzeiligen Kommentar und das Batch-Skript wird normal weiter ausgeführt. Nachdem jede Sprache ihre Ausführung beendet hat, beenden wir sie. Dies verhindert, dass wir uns später im Skript mit ihren Eigenheiten auseinandersetzen müssen.

Eigenheiten

Offensichtlich folgen die Tricks, die für dieses Polyglott benötigt werden, nicht den normalen Codierungskonventionen.
Es gibt einige Eigenheiten, die ausgenutzt oder umgangen werden mussten:

  • Alle drei Sprachen haben unterschiedliche Escape-Zeichen:
    • Bash: Backslash (\)
    • Batch: Caret (^)
    • PowerShell: Backtick (`)
  • Escape-Zeichen funktionieren in Bash- und PowerShell-Zeichenketten, aber nicht in Batch-Zeichenketten.
  • Umleitungen (d.h. < und >) haben in allen drei Sprachen eine besondere Bedeutung, sofern sie nicht in Anführungszeichen gesetzt sind.
  • Umleitungen müssen nicht am Ende eines Befehls stehen.
    • Dies ist gültiges Bash/Batch/PowerShell: echo >output.txt "Hello World"
  • Batch ist die einzige Sprache ohne mehrzeilige Zeichenketten oder Kommentare.
  • Batch behandelt > auch dann als Umleitung, wenn es direkt an eine Zeichenkette grenzt, PowerShell hingegen nicht.
  • Batch-Skript GOTO-Anweisungen funktionieren nur, wenn sie als Skript ausgeführt werden, nicht interaktiv.
  • Dem mehrzeiligen Kommentar von PowerShell (<#) muss unmittelbar ein Leerzeichen vorausgehen.
  • Bashs Here-Dokumente können überall beginnen, solange sie nicht in Anführungszeichen gesetzt sind und kein Kommentar sind.
Tool herunterladen