
Framework C2 multioperador com agentes nativos em C e Python, canais HTTP(S), tarefas assíncronas e uma interface web reativa para operações de red team.
Striker é um simples programa de Comando e Controle (C2).


Este projeto está em desenvolvimento ativo. A maioria das funcionalidades é experimental, com mais por vir. Espere mudanças que quebram a compatibilidade.
A) Agentes
B) Backend / Servidor de Equipe
C) Interface do Usuário
Clone o repositório;
$ git clone https://github.com/4g3nt47/Striker.git
$ cd Striker
A base de código está dividida em 4 seções independentes;
Isso lida com toda a lógica do lado do servidor para operadores e agentes. É uma aplicação NodeJS feita com;
express - Para a API REST.socket.io - Para comunicação Web Socket.mongoose - Para conectar ao MongoDB.multer - Para lidar com uploads de arquivos.bcrypt - Para hash de senhas de usuários.O código fonte está no diretório backend/. Para configurar o servidor;
O Striker usa MongoDB como banco de dados backend para armazenar todos os dados importantes. Você pode instalá-lo localmente na sua máquina usando este guia para distribuições baseadas em Debian, ou criar um gratuito com MongoDB Atlas (uma plataforma de banco de dados como serviço).
$ cd backend
$ npm install
$ mkdir static
Você pode usar esta pasta para hospedar arquivos estáticos no servidor. Este também deve ser o local onde a UPLOAD_LOCATION está definida no arquivo .env (mais sobre isso depois), mas não é obrigatório. Os arquivos neste diretório estarão acessíveis publicamente sob o caminho /static/.
.env;NOTA: Os valores entre < e > são espaços reservados. Substitua-os pelos valores apropriados (incluindo os <>). Para campos que exigem strings aleatórias, você pode gerá-las 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)>
Observe que SSL_KEY e SSL_CERT são opcionais. Se algum não for definido, um servidor HTTP simples será criado. Isso ajuda a evitar sobrecarga desnecessária ao executar o servidor atrás de um proxy reverso com SSL no mesmo 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
Esta é a interface web usada pelos operadores. É uma aplicação web de página única escrita em Svelte, e o código fonte está no diretório frontend/.
Para configurar o frontend;
$ cd frontend
$ npm install
.env com a variável VITE_STRIKER_API definida para a URL completa do servidor C2 conforme configurado acima;VITE_STRIKER_API=https://c2.striker.local
$ npm run build
O comando acima compilará tudo em uma aplicação web estática no diretório dist/. Você pode mover todos os arquivos para a raiz web do seu servidor web, ou até mesmo hospedá-lo com um servidor HTTP básico como o do python;
$ cd dist
$ python3 -m http.server 8000
Registrar.REGISTRATION_KEY em backend/.env)Isso criará uma conta de usuário padrão. Você precisará de uma conta de administrador para acessar alguns recursos.
Sua primeira conta de administrador deve ser criada manualmente, depois você pode promover e rebaixar outras contas na aba Usuários da interface web.
Para criar sua primeira conta de administrador;
users e defina o campo admin do usuário alvo como true;Existem diferentes maneiras de fazer isso. Se você tiver mongo disponível na sua linha de comando, pode fazer usando;
$ mongo <your MongoDB connection URL>
> db.users.updateOne({username: "<your username>"}, {$set: {admin: true}})
Você deve obter a seguinte resposta se funcionar;
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
Agora você pode fazer login :)
A) Redirecionamento Dumb Pipe
Um redirecionador dumb pipe escrito para o Striker está disponível em redirector/redirector.py. Obviamente, isso só funcionará para tráfego HTTP simples, ou para HTTPS quando a verificação SSL estiver desabilitada (você pode fazer isso ativando a macro INSECURE_SSL no agente C).
O exemplo a seguir escuta na porta 443 em todas as interfaces e encaminha para c2.example.org na 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 Reverso Nginx como Redirecionador
$ sudo apt install nginx
/etc/nginx/sites-available/striker);Espaços reservados;
<domain-name> - Este é o FQDN do seu servidor, e deve corresponder ao do seu certificado SSL.<ssl-cert> - O arquivo de certificado SSL a ser usado.<ssl-key> - O arquivo de chave SSL a ser usado.<c2-server> - A URL completa do servidor C2 para o qual encaminhar as requisições.AVISO: client_max_body_size deve ser tão grande quanto o tamanho definido por MAX_UPLOAD_SIZE no seu arquivo backend/.env, caso contrário, uploads de arquivos grandes falharão.
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;