
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;
location / {
proxy_pass <c2-server>;
proxy_redirect off;
proxy_ssl_verify off;
proxy_read_timeout 90;
proxy_http_version 1.0;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
$ sudo ln -s /etc/nginx/sites-available/striker /etc/nginx/sites-enabled/striker
$ sudo service nginx restart
Il tuo redirector dovrebbe ora essere attivo sulla porta 443, e può essere testato usando (supponendo che il tuo FQDN sia striker.local);
$ curl https://striker.local
Se funziona, dovresti ottenere la risposta 404 usata dal backend, come;
{"error":"Invalid route!"}
A) L'Agente C
Questi sono gli impianti utilizzati da Striker. L'agente principale è scritto in C e si trova in agent/C/. Supporta sia host Linux che Windows. L'agente Linux dipende esternamente da libcurl, che troverai installato nella maggior parte dei sistemi.
L'agente Windows non ha dipendenze esterne. Utilizza wininet per le comunicazioni, che credo sia disponibile su tutti gli host Windows.
Supponendo che tu sia su un host a 64 bit, il seguente comando compilerà per host a 64 bit;
$ cd agent/C
$ mkdir bin
$ make
Per compilare per 32 bit su 64;
$ sudo apt install gcc-multilib
$ make arch=32
Il comando sopra compila tutto nella directory bin/. Avrai bisogno solo di due file per generare impianti funzionanti;
bin/stub - Questo è lo stub dell'agente che verrà usato come modello per generare impianti funzionanti.bin/builder - Questo è ciò che userai per patchare lo stub dell'agente e generare impianti funzionanti.Il builder accetta i seguenti argomenti;
$ ./bin/builder
[-] Usage: ./bin/builder <url> <auth_key> <delay> <stub> <outfile>
Dove;
<url> - Il server a cui riferire. Idealmente dovrebbe essere un redirector, ma anche un URL diretto al server funzionerà.<auth_key> - La chiave di autenticazione da utilizzare per connettersi al C2. Puoi crearla nella scheda chiavi di autenticazione dell'interfaccia web.<delay> - Ritardo tra ogni callback, in secondi. Dovrebbe essere almeno 2, a seconda di quanto rumoroso vuoi che sia.<stub> - Il file stub da leggere, in questo caso bin/stub.<outfile> - Il nome del file di output del nuovo impianto.Esempio;
$ ./bin/builder https://localhost:3000 979a9d5ace15653f8ffa9704611612fc 5 bin/stub bin/striker
[*] Obfuscating strings...
[+] 69 strings obfuscated :)
[*] Finding offsets of our markers...
[+] Offsets:
URL: 0x0000a2e0
OBFS Key: 0x0000a280
Auth Key: 0x0000a2a0
Delay: 0x0000a260
[*] Patching...
[+] Operation completed!
Avrai bisogno di MinGW per questo. Il seguente comando installerà l'ambiente di sviluppo Windows a 32 e 64 bit;
$ sudo apt install mingw-w64
Compila per 64 bit;
$ cd agent/C
$ mdkir bin
$ make target=win
Per compilare per 32 bit;
$ make target=win arch=32
Questo compilerà tutto nella directory bin/, e avrai il builder e lo stub rispettivamente come bin\stub.exe e bin\builder.exe.
B) L'Agente Python
Striker include anche un agente Python autonomo (testato su Python 2.7.16 e 3.7.3). Si trova in agent/python/. Solo le funzionalità più basilari sono implementate in questo agente. Utile per host che non possono eseguire l'agente C ma hanno Python installato.
Ci sono 2 file in questa directory;
stub.py - Questo è lo stub del payload da passare al builder.builder.py - Questo è ciò che userai per generare un impianto.Esempio di utilizzo:
$ ./builder.py
[-] Usage: builder.py <url> <auth_key> <delay> <stub> <outfile>
# The following will generate a working payload as `output.py`
$ ./builder.py http://localhost:3000 979a9d5ace15653f8ffa9704611612fc 2 stub.py output.py
[*] Loading agent stub...
[*] Writing configs...
[+] Agent built successfully: output.py
# Run it
$ python3 output.py
Dopo aver seguito le istruzioni sopra, Striker dovrebbe essere pronto per l'uso. Ti invitiamo a consultare la guida all'uso. Divertiti e buon hacking!
Se ti piace il progetto, considera di aiutarmi a trasformare caffè in codice!