
Framework C2 multi-operatore con agenti nativi in C e Python, canali HTTP(S), tasking asincrono e un'interfaccia web reattiva per operazioni di red team.
Striker è un semplice programma di Command and Control (C2).


Questo progetto è in fase di sviluppo attivo. La maggior parte delle funzionalità sono sperimentali, con altre in arrivo. Aspettati modifiche sostanziali.
A) Agenti
B) Backend / Teamserver
C) Interfaccia Utente
Clona il repository;
$ git clone https://github.com/4g3nt47/Striker.git
$ cd Striker
Il codice è suddiviso in 4 sezioni indipendenti;
Gestisce tutta la logica lato server sia per gli operatori che per gli agenti. È un'applicazione NodeJS realizzata con;
express - Per l'API REST.socket.io - Per la comunicazione Web Socket.mongoose - Per connettersi a MongoDB.multer - Per gestire il caricamento dei file.bcrypt - Per l'hash delle password degli utenti.Il codice sorgente si trova nella directory backend/. Per configurare il server;
Striker utilizza MongoDB come database di backend per memorizzare tutti i dati importanti. Puoi installarlo localmente sulla tua macchina usando questa guida per distribuzioni basate su Debian, o crearne uno gratuito con MongoDB Atlas (una piattaforma database-as-a-service).
$ cd backend
$ npm install
$ mkdir static
Puoi usare questa cartella per ospitare file statici sul server. Dovrebbe anche essere dove il tuo UPLOAD_LOCATION è impostato nel file .env (maggiori dettagli in seguito), ma non è necessario. I file in questa directory saranno accessibili pubblicamente sotto il percorso /static/.
.env;NOTA: I valori tra < e > sono segnaposto. Sostituiscili con i valori appropriati (inclusi i <>).
Per i campi che richiedono stringhe casuali, puoi generarli facilmente usando;
$ head -c 100 /dev/urandom | sha256sum
DB_URL=<your MongoDB connection URL>
HOST=<host to listen on (default: 127.0.0.1)>
PORT=<port to listen on (default: 3000)>
SECRET=<random string to use for signing session cookies and encrypting session data>
ORIGIN_URL=<full URL of the server you will be hosting the frontend at. Used to setup CORS>
REGISTRATION_KEY=<random string to use for authentication during signup>
MAX_UPLOAD_SIZE=<max file upload size, in bytes>
UPLOAD_LOCATION=<directory to store uploaded files to (default: static)>
SSL_KEY=<your SSL key file (optional)>
SSL_CERT=<your SSL cert file (optional)>
Nota che SSL_KEY e SSL_CERT sono opzionali. Se qualcuno non è definito, verrà creato un server HTTP semplice. Questo aiuta a evitare overhead inutili quando si esegue il server dietro un proxy inverso con SSL abilitato sullo stesso host.
$ node index.js
[12:45:30 PM] Connecting to backend database...
[12:45:31 PM] Starting HTTP server...
[12:45:31 PM] Server started on port: 3000
Questa è l'interfaccia web utilizzata dagli operatori. È un'applicazione web a pagina singola scritta in Svelte, e il codice sorgente si trova nella directory frontend/.
Per configurare il frontend;
$ cd frontend
$ npm install
.env con la variabile VITE_STRIKER_API impostata sull'URL completo del server C2 come configurato sopra;VITE_STRIKER_API=https://c2.striker.local
$ npm run build
Il comando sopra compilerà tutto in un'applicazione web statica nella directory dist/. Puoi spostare tutti i file al suo interno nella root web del tuo server web, o addirittura ospitarlo con un server HTTP di base come quello di Python;
$ cd dist
$ python3 -m http.server 8000
Register.REGISTRATION_KEY in backend/.env)Questo creerà un account utente standard. Avrai bisogno di un account amministratore per accedere ad alcune funzionalità.
Il tuo primo account amministratore deve essere creato manualmente, dopodiché potrai aggiornare e declassare altri account nella scheda Utenti dell'interfaccia web.
Per creare il tuo primo account amministratore;
users e imposta il campo admin dell'utente target a true;Ci sono diversi modi per farlo. Se hai mongo disponibile nella tua CLI, puoi farlo usando;
$ mongo <your MongoDB connection URL>
> db.users.updateOne({username: "<your username>"}, {$set: {admin: true}})
Dovresti ottenere la seguente risposta se funziona;
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
Ora puoi fare login :)
A) Reindirizzamento a Tubo Semplice
Un redirector a tubo semplice scritto per Striker è disponibile in redirector/redirector.py. Ovviamente funzionerà solo per traffico HTTP semplice, o per HTTPS quando la verifica SSL è disabilitata (puoi farlo abilitando la macro INSECURE_SSL nell'agente C).
Il seguente esempio ascolta sulla porta 443 su tutte le interfacce e inoltra a c2.example.org sulla porta 443;
$ cd redirector
$ ./redirector.py 0.0.0.0:443 c2.example.org:443
[*] Starting redirector on 0.0.0.0:443...
[+] Listening for connections...
B) Proxy Inverso Nginx come Redirector
$ sudo apt install nginx
/etc/nginx/sites-available/striker);Segnaposto;
<domain-name> - Questo è il FQDN del tuo server e dovrebbe corrispondere a quello nel tuo certificato SSL.<ssl-cert> - Il file del certificato SSL da utilizzare.<ssl-key> - Il file della chiave SSL da utilizzare.<c2-server> - L'URL completo del server C2 a cui inoltrare le richieste.ATTENZIONE: client_max_body_size dovrebbe essere grande quanto la dimensione definita da MAX_UPLOAD_SIZE nel tuo file backend/.env, altrimenti i caricamenti di file grandi falliranno.
server {
listen 443 ssl;
server_name <domain-name>;
ssl_certificate <ssl-cert>;
ssl_certificate_key <ssl-key>;
client_max_body_size 100M;
access_log /var/log/nginx/striker.log;