
Pupy
Pupy ist ein Open-Source, plattformübergreifendes (Windows, Linux, OSX, Android) Multi-Funktions-RAT (Remote Administration Tool) und Post-Exploitation-Tool, hauptsächlich in Python geschrieben. Es zeichnet sich durch eine vollständig im Arbeitsspeicher ablaufende Ausführungsrichtlinie aus und hinterlässt eine sehr geringe Spur. Pupy kann verschiedene Transports nutzen, in Prozesse migrieren (reflektives Injecten), entfernten Python-Code, Python-Pakete und Python-C-Erweiterungen aus dem Arbeitsspeicher laden.
Pupy-Module können mithilfe von rpyc transparent auf entfernte Python-Objekte zugreifen, um verschiedene interaktive Aufgaben auszuführen.
Pupy kann Payloads in mehreren Formaten generieren, wie PE-Executables, reflektive DLLs, reine Python-Dateien, PowerShell, APK usw.
Beim Packen eines Payloads können Sie einen Launcher (verbinden, binden, ...), einen Transport (ssl, http, rsa, obfs3, scramblesuit, ...) und mehrere „Scriptlets“ auswählen. Scriptlets sind Python-Skripte, die eingebettet werden, um verschiedene Aufgaben offline (ohne Session) auszuführen, z. B. Starten eines Hintergrundskripts, Hinzufügen von Persistenz, Starten eines Keyloggers, Erkennen einer Sandbox, ...
Installation
git clone https://github.com/n1nj4sec/pupy.git pupy
cd pupy
git submodule init
git submodule update
pip install -r pupy/requirements.txt
oder Siehe Wiki
Funktionen
- Multi-Plattform (getestet auf Windows XP, 7, 8, 10, Kali Linux, Ubuntu, OSX, Android)
- Unter Windows kann der Pupy-Payload als reflektive DLL kompiliert werden und der gesamte Python-Interpreter wird aus dem Arbeitsspeicher geladen. Pupy berührt niemals die Festplatte :)
- Pupy kann auch in eine einzelne .py-Datei gepackt werden und ohne Abhängigkeiten außer der Python-Standardbibliothek auf allen Betriebssystemen ausgeführt werden
- pycrypto wird durch reine Python-AES- und RSA-Implementierungen ersetzt, wenn nicht verfügbar
- Pupy kann reflektiv in andere Prozesse migrieren
- Pupy kann aus dem Arbeitsspeicher reine Python-Pakete (.py, .pyc) und kompilierte Python-C-Erweiterungen (.pyd, .so) remote importieren. Die importierten Python-Module berühren die Festplatte nicht.
- Pupy ist einfach erweiterbar, Module sind recht einfach zu schreiben, sortiert nach Betriebssystem und Kategorie.
- Viele großartige Module sind bereits implementiert!
- Pupy verwendet rpyc und ein Modul kann direkt auf Python-Objekte auf dem entfernten Client zugreifen
- Wir können auch interaktiv von der Pupy-Shell aus auf entfernte Objekte zugreifen und erhalten sogar automatische Vervollständigung entfernter Attribute!
- Kommunikationstransporte sind modular, stapelbar und fantastisch. Sie könnten Daten mit HTTP über HTTP über AES über XOR exfiltrieren. Oder jede beliebige Kombination der verfügbaren Transporte!
- Pupy kann mit obfsproxy pluggable transports kommunizieren.
- Alle nicht interaktiven Module können mit einem Befehl an mehrere Hosts verteilt werden
- Befehle und Skripte, die auf entfernten Hosts ausgeführt werden, sind unterbrechbar
- Automatische Vervollständigung für Befehle und Argumente
- Benutzerdefinierte Konfiguration kann definiert werden: Befehlsaliase, Module, die automatisch bei Verbindung gestartet werden, ...
- Interaktive Python-Shells mit automatischer Vervollständigung im vollständig im Arbeitsspeicher befindlichen entfernten Python-Interpreter können geöffnet werden
- Interaktive Shells (cmd.exe, /bin/bash, ...) können remote geöffnet werden. Entfernte Shells unter Unix & Windows Clients haben ein echtes TTY mit allen Tastatursignalen, die wie bei einer SSH-Shell funktionieren.
- Pupy kann PE-Exe remote und aus dem Arbeitsspeicher ausführen (siehe z. B. mit mimikatz)
- Pupy kann Payloads in verschiedenen Formaten generieren: apk, lin_x86, lin_x64, so_x86, so_x64, exe_x86, exe_x64, dll_x86, dll_x64, py, pyinst, py_oneliner, ps1, ps1_oneliner, rubber_ducky
- Pupy kann aus dem Arbeitsspeicher mit einem einzigen Befehlszeilenbefehl (Python- oder PowerShell-One-Liner von pupygen.py) bereitgestellt werden.
- „Scriptlets“ können in generierte Payloads eingebettet werden, um einige Aufgaben „offline“ ohne Netzwerkverbindung auszuführen (z. B. Keylogger starten, Persistenz hinzufügen, benutzerdefiniertes Python-Skript ausführen, check_vm, ...)
- Tonnenweise weitere Funktionen, sehen Sie sich die implementierten Module an
Implementierte Transporte
Alle Transporte in Pupy sind stapelbar. Das bedeutet, dass Sie durch Erstellen einer benutzerdefinierten Transportkonfiguration (pupy/network/transport/<transport_name>/conf.py) Ihre Pupy-Sitzung wie alles Mögliche aussehen lassen können. Sie könnten zum Beispiel HTTP über HTTP über base64 über HTTP über AES über obfs3 stapeln :o)
- rsa
- Eine Schicht mit Authentifizierung und Verschlüsselung mittels RSA und AES256, oft mit anderen Schichten gestapelt
- aes
- Schicht mit einem statischen AES256-Schlüssel
- ssl (der Standard)
- TCP-Transport mit SSL ummantelt
- ssl_rsa
- wie ssl, jedoch mit einer rsa-Schicht gestapelt
- http
- Schicht, die den Datenverkehr wie HTTP aussehen lässt. HTTP ist mit einer rsa-Schicht gestapelt
- obfs3
- scramblesuit
- udp
- rsa-Schicht, jedoch über UDP (kann fehlerhaft sein, behandelt noch keine Paketverluste)
- andere
- Andere Schichten haben eigentlich keinen Nutzen und dienen als Codebeispiele: (dummy, base64, XOR, ...)
Implementierte Launcher (nicht aktuell, siehe ./pupygen.py -h)
Launcher ermöglichen es Pupy, benutzerdefinierte Aktionen auszuführen, bevor die Reverse-Verbindung gestartet wird
- connect
- bind
- Payload binden anstatt Reverse
- auto_proxy
- Eine Liste möglicher SOCKS/HTTP-Proxys abrufen und jeden ausprobieren. Methoden zum Abrufen von Proxys sind: Registry, WPAD-Anfragen, Gnome-Einstellungen, HTTP_PROXY-Umgebungsvariable
Implementierte Module (nicht aktuell)
- Befehlsausführung
- herunterladen
- hochladen
- interaktive Python-Shell mit automatischer Vervollständigung
- interaktive Shell (cmd.exe, powershell.exe, /bin/sh, /bin/bash, ...)
- TTY-Zuweisung wird sowohl unter Windows als auch *nix gut unterstützt. Fühlt sich an wie eine SSH-Shell
- Shellcode-Ausführung
- Persistenz
- SOCKS5-Proxy
- lokales und entferntes Port-Forwarding
- Bildschirmfoto
- Keylogger
- Das großartige Tool zur Sammlung von Anmeldeinformationen LaZagne aus dem Arbeitsspeicher ausführen!
- Sniff-Tools, netcreds
- Prozessmigration (Windows und Linux, noch nicht OSX)
- ...
- viele andere Tools (UPnP-Client, verschiedene Recon/Pivot-Tools mit impacket remote, ...)
Windows-spezifisch:
- migrieren
- Architekturübergreifende Prozessinjektion funktioniert ebenfalls (x86->x64 und x64->x86)
- In-Memory-Ausführung von PE-Exe, sowohl x86 als auch x64!
- Webcam-Schnappschuss
- Mikrofon-Rekorder
- Mauslogger:
- macht kleine Screenshots um die Maus bei jedem Klick und sendet sie zurück an den Server
- Token-Manipulation
- getsystem
- creddump
- tonnenweise nützliche PowerShell-Skripte
- ...