Du fängst eine Reverse Shell ab, aber sie ist instabil. Wie verbesserst du sie?
Kurzantwort
Man startet ein Pseudoterminal (meist python -c 'import pty; pty.spawn("/bin/bash")'), legt es mit Ctrl-Z in den Hintergrund, führt lokal stty raw -echo aus, holt es wieder in den Vordergrund und setzt TERM sowie die Zeilen-/Spaltenzahl zurück. Das ergibt ein vollständiges TTY mit Jobsteuerung, Tab-Vervollständigung und funktionierenden Editoren.
Eine rohe Reverse Shell aus nc ist eine „primitive“ Shell: keine Jobsteuerung, keine Tab-Vervollständigung, keine Pfeiltasten, und Ctrl-C beendet die gesamte Sitzung statt nur des laufenden Befehls. Werkzeuge wie su, ssh, sudo und Texteditoren verweigern den Start, weil kein echtes Terminal angebunden ist. Der Ausbau zu einem richtigen TTY ist vor der Rechteausweitung nahezu Pflicht.
Der Standardablauf
Die häufigste Sequenz:
- Ein PTY starten auf dem Ziel:
python3 -c 'import pty; pty.spawn("/bin/bash")'. Das alloziert ein Pseudoterminal, damit Programme glauben, ein echtes Terminal zu haben. - Die Shell in den Hintergrund legen mit
Ctrl-Z. - Dein lokales Terminal korrigieren:
stty raw -echo; fg. Der Raw-Modus reicht Tastenanschläge direkt durch (Ctrl-C geht so an den Remote-Prozess, nicht an dein nc), und das Deaktivieren des Echos verhindert doppelte Zeichen. - Die Umgebung wiederherstellen:
export TERM=xtermund die Fenstergröße mitstty rows <r> cols <c>setzen, damit Editoren korrekt dargestellt werden.
Danach hast du Tab-Vervollständigung, Befehlsverlauf, ein Ctrl-C, das nur den Vordergrund-Job unterbricht, und Vollbild-Werkzeuge.
Wenn python fehlt
Greife auf script -qc /bin/bash /dev/null zurück oder nutze socat für ein voll interaktives PTY in einem Schritt, wenn du die Binary auf den Host bekommst. expect und bestimmte Laufzeitumgebungen (perl, ruby) können ebenfalls ein PTY starten.
Warum das wichtig ist
Ohne TTY kannst du nicht per su zu einem anderen Benutzer wechseln, sudo ausführen oder die interaktiven Werkzeuge zur Rechteausweitung nutzen, die Maschinen knacken. Dieser Ausbau ist die Brücke zwischen „ich habe Codeausführung“ und „ich kann tatsächlich arbeiten“.
Worauf Interviewer achten
Sie wollen die genaue Beschwörungsformel — pty.spawn, Ctrl-Z, stty raw -echo, fg und das Korrigieren von TERM — plus den Grund für jeden Schritt und eine Ausweichlösung, falls python fehlt.
Wahrscheinliche Anschlussfragen
- Warum killt Ctrl-C deine ganze Shell, bevor du sie verbesserst?
- Was tust du, wenn python auf dem Ziel nicht installiert ist?