
Multi-Operator-C2-Framework mit nativen C- und Python-Agenten, HTTP(S)-Kanälen, asynchronem Tasking und einer reaktiven Weboberfläche für Red-Team-Operationen.
Striker ist ein einfaches Command-and-Control-Programm (C2).


Dieses Projekt befindet sich in aktiver Entwicklung. Die meisten Funktionen sind experimentell und es werden noch weitere hinzukommen. Es ist mit grundlegenden Änderungen zu rechnen.
A) Agents
B) Backend / Teamserver
C) Benutzeroberfläche
Repository klonen:
$ git clone https://github.com/4g3nt47/Striker.git
$ cd Striker
Der Code-Bestand ist in 4 unabhängige Abschnitte unterteilt:
Dieser übernimmt die gesamte serverseitige Logik für Operateure und Agents. Es handelt sich um eine NodeJS-Anwendung, die mit Folgendem erstellt wurde:
express – Für die REST-API.socket.io – Für die WebSocket-Kommunikation.mongoose – Für die Verbindung zu MongoDB.multer – Für die Handhabung von Datei-Uploads.bcrypt – Zum Hashen von Benutzerpasswörtern.Der Quellcode befindet sich im Verzeichnis backend/. So richtest du den Server ein:
Striker verwendet MongoDB als Backend-Datenbank, um alle wichtigen Daten zu speichern. Du kannst diese lokal auf deinem Rechner installieren – für Debian-basierte Distributionen hilft diese Anleitung, oder erstelle eine kostenlose mit MongoDB Atlas (einer Datenbank-als-Service-Plattform).
$ cd backend
$ npm install
$ mkdir static
Du kannst diesen Ordner verwenden, um statische Dateien auf dem Server zu hosten. Hier sollte auch dein UPLOAD_LOCATION in der .env-Datei gesetzt werden (dazu später mehr). Das ist aber nicht zwingend erforderlich. Dateien in diesem Verzeichnis sind öffentlich unter dem Pfad /static/ zugänglich.
.env-Datei:HINWEIS: Werte zwischen < und > sind Platzhalter. Ersetze sie durch passende Werte (einschließlich der <>).
Für Felder, die zufällige Zeichenfolgen erfordern, kannst du diese einfach mit folgendem Befehl generieren:
$ head -c 100 /dev/urandom | sha256sum
DB_URL=<deine MongoDB-Verbindungs-URL>
HOST=<Host, auf dem gehört werden soll (Standard: 127.0.0.1)>
PORT=<Port, auf dem gehört werden soll (Standard: 3000)>
SECRET=<zufällige Zeichenfolge zum Signieren von Session-Cookies und Verschlüsseln von Session-Daten>
ORIGIN_URL=<vollständige URL des Servers, auf dem du das Frontend hosten wirst. Wird zum Einrichten von CORS verwendet>
REGISTRATION_KEY=<zufällige Zeichenfolge zur Authentifizierung bei der Registrierung>
MAX_UPLOAD_SIZE=<maximale Datei-Upload-Größe in Bytes>
UPLOAD_LOCATION=<Verzeichnis zum Speichern hochgeladener Dateien (Standard: static)>
SSL_KEY=<deine SSL-Key-Datei (optional)>
SSL_CERT=<deine SSL-Cert-Datei (optional)>
Beachte, dass SSL_KEY und SSL_CERT optional sind. Wenn keine definiert ist, wird ein einfacher HTTP-Server erstellt. Dies hilft, unnötigen Overhead zu vermeiden, wenn der Server hinter einem SSL-fähigen Reverse-Proxy auf demselben Host läuft.
$ node index.js
[12:45:30 PM] Verbinde zur Backend-Datenbank...
[12:45:31 PM] Starte HTTP-Server...
[12:45:31 PM] Server gestartet auf Port: 3000
Dies ist die Web-Benutzeroberfläche, die von Operateuren verwendet wird. Es handelt sich um eine Einzelseiten-Webanwendung, geschrieben in Svelte. Der Quellcode befindet sich im Verzeichnis frontend/.
So richtest du das Frontend ein:
$ cd frontend
$ npm install
.env-Datei mit der Variable VITE_STRIKER_API, die auf die vollständige URL des oben konfigurierten C2-Servers gesetzt ist:VITE_STRIKER_API=https://c2.striker.local
$ npm run build
Das oben Genannte kompiliert alles in eine statische Webanwendung im Verzeichnis dist/. Du kannst alle Dateien darin in das Web-Root deines Webservers verschieben oder sie sogar mit einem einfachen HTTP-Server wie dem von Python hosten:
$ cd dist
$ python3 -m http.server 8000
Register.REGISTRATION_KEY in backend/.env).Dadurch wird ein Standard-Benutzerkonto erstellt. Für einige Funktionen benötigst du ein Administratorkonto.
Dein erstes Administratorkonto muss manuell erstellt werden; danach kannst du in der Benutzeroberfläche auf der Registerkarte Users andere Konten hoch- und herabstufen.
So erstellst du dein erstes Administratorkonto:
users und setze das Feld admin des Zielbenutzers auf true.Es gibt verschiedene Möglichkeiten, dies zu tun. Wenn du mongo in deiner CLI verfügbar hast, kannst du es wie folgt machen:
$ mongo <deine MongoDB-Verbindungs-URL>
> db.users.updateOne({username: "<dein Benutzername>"}, {$set: {admin: true}})
Wenn es funktioniert, solltest du die folgende Antwort erhalten:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
Du kannst dich jetzt anmelden :)
A) Dumme Pipe-Weiterleitung
Ein dumme Pipe-Redirector, geschrieben für Striker, ist unter redirector/redirector.py verfügbar. Offensichtlich funktioniert dies nur für einfachen HTTP-Verkehr oder für HTTPS, wenn die SSL-Überprüfung deaktiviert ist (dies kannst du durch Aktivieren des INSECURE_SSL-Makros im C-Agenten erreichen).
Im folgenden Beispiel wird auf Port 443 auf allen Schnittstellen gelauscht und an c2.example.org auf Port 443 weitergeleitet:
$ cd redirector
$ ./redirector.py 0.0.0.0:443 c2.example.org:443
[*] Redirector auf 0.0.0.0:443 gestartet...
[+] Warte auf Verbindungen...
B) Nginx-Reverse-Proxy als Redirector
$ sudo apt install nginx
/etc/nginx/sites-available/striker);Platzhalter:
<domain-name> – Dies ist der vollqualifizierte Domänenname deines Servers und sollte mit dem in deinem SSL-Zertifikat übereinstimmen.<ssl-cert> – Die zu verwendende SSL-Zertifikatsdatei.<ssl-key> – Die zu verwendende SSL-Key-Datei.<c2-server> – Die vollständige URL des C2-Servers, an den Anfragen weitergeleitet werden sollen.