Isenção de responsabilidade
Este projeto está em desenvolvimento ativo. A maioria dos recursos é experimental, com mais por vir. Espere mudanças radicais.
Características
A) Agentes
Agentes nativos para hosts Linux e Windows.
Agente python mínimo e independente, caso você precise.
Canais HTTP(s).
Execução de tarefas sincronizadas.
Suporte para vários redirecionadores e pode recorrer a outros quando um ativo fica inativo.
B) Back-end / Teamserver
Suporta vários operadores.
A maioria dos recursos expostos por meio da API REST, facilitando a automatização.
Usa soquetes da web para comunicações mais rápidas.
C) Interface do usuário
IU suave e reativa graças a Svelte e SocketIO .
Fácil de configurar, pois compila em arquivos HTML, JavaScript e CSS estáticos, que podem ser hospedados até mesmo no servidor da Web mais básico que você encontrar.
Recurso Teamchat para se comunicar com outros operadores por texto.
Instalando o Striker
Clone o repositório;
$ git clone https://github.com/4g3nt47/Striker.git 3$ CD Atacante
A base de código é dividida em 4 seções independentes;
1. O Servidor C2/Back-end
Isso lida com toda a lógica do lado do servidor para operadores e agentes. É um NodeJSaplicativo feito com;
express- Para a API REST.
socket.io- Para comunicação Web Socket.
mongoose- Para conectar-se ao MongoDB .
multer- Para lidar com uploads de arquivos.
bcrypt- Para hash de senhas de usuário.
O código-fonte está no backend/diretório. Para configurar o servidor;
Configurar um banco de dados MongoDB;
O Striker usa o MongoDB como banco de dados de back-end para armazenar todos os dados importantes. Você pode instalá-lo localmente em sua máquina usando este guia para distribuições baseadas em Debian ou criar um gratuito com o MongoDB Atlas (uma plataforma de banco de dados como serviço).
Mova para o diretório de origem;
infra-estrutura de $cd
Instalar dependências;
instalação de $npm
Crie um diretório para arquivos estáticos;
$ mkdir estático
Você pode usar esta pasta para hospedar arquivos estáticos no servidor. Também deve ser onde você UPLOAD_LOCATIONestá definido no .envarquivo (mais sobre isso mais tarde), mas isso não é necessário. Os arquivos neste diretório serão acessíveis publicamente no caminho /static/.
Crie um .envarquivo;
NOTA: Os valores entre <e >são espaços reservados. Substitua-os pelos valores apropriados (incluindo o <>). Para campos que requerem strings aleatórias, você pode gerá-los 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_KEYe SSL_CERTsã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 por trás de um proxy reverso habilitado para SSL no mesmo host.
Inicie o servidor;
$ node index.js [12:45:30 PM] Conectando ao banco de dados back-end [12:45:31 PM] Iniciando servidor HTTP [12:45:31 PM] Servidor iniciado na porta: 3000
2. O front-end
Esta é a IU da web usada pelos operadores. É um aplicativo da Web de página única escrito em Svelte e o código-fonte está no frontend/diretório.
Para configurar o frontend;
Mova para o diretório de origem;
interface de $ cd
Instalar dependências;
instalação de $npm
Crie um .envarquivo com a variável VITE_STRIKER_APIdefinida para a URL completa do servidor C2 conforme configurado acima;
VITE_STRIKER_API= https://c2.striker.local
Construir;
$ npm executar compilação
O acima irá compilar tudo em um aplicativo da web estático no dist/diretório. Você pode mover todos os arquivos dentro da raiz da web do seu servidor da web ou até mesmo hospedá-lo com um servidor HTTP básico como o do python;
$ cd dist
$ python3 -m http.server 8000
Inscrever-se;
Abra o site em um navegador da web. Você deve ver uma página de login.
Clique no Registerbotão.
Insira um nome de usuário, senha e a chave de registro em uso (consulte REGISTRATION_KEYem 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 atualizar e rebaixar outras contas na Usersguia da interface do usuário da web.
Para criar sua primeira conta de administrador;
Conecte-se ao banco de dados MongoDB usado pelo back-end.
Atualize a userscoleção e defina o admincampo do usuário de destino como true;
Existem diferentes maneiras de fazer isso. Se você tiver mongodisponível em sua CLI, poderá fazê-lo usando;
$ mongo > db.users.updateOne({username: }, {$set: {admin: true}})
Você deve obter a seguinte resposta se funcionar;
{ reconhecido: verdadeiro, matchedCount: 1, modifiedCount: 1 }
Agora você pode fazer login:leve_sorriso:
3. O redirecionador C2
A) Redirecionamento de tubo burro
Um redirecionador de canal burro escrito para o Striker está disponível em redirector/redirector.py. Obviamente, isso funcionará apenas para tráfego HTTP simples ou para HTTPS quando a verificação SSL estiver desativada (você pode fazer isso ativando a INSECURE_SSLmacro no agente C).
O exemplo a seguir escuta na porta 443em todas as interfaces e encaminha para c2.example.orga porta 443;
$ cd redirecionador $ ./redirector.py 0.0.0.0:443 c2.example.org:443 [*] Iniciando o redirecionador em 0.0.0.0:443 [+] Procurando conexões
B) Proxy Reverso Nginx como Redirecionador
Instale o Nginx;
$ sudo apt install nginx
Crie uma configuração de vhost (por exemplo: /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>- O URL completo do servidor C2 para o qual encaminhar solicitações.
AVISO: client_max_body_sizedeve ser tão grande quanto o tamanho definido por MAX_UPLOAD_SIZEem seu backend/.envarquivo, ou os uploads de arquivos grandes falharão.
servidor { escuta 443 ssl; nome do servidor ; ssl_certificate ; ssl_certificate_key ; client_max_body_size 100M; access_log /var/log/nginx/striker.log; localização / { proxy_pass ; proxy_redirect desligado; proxy_ssl_verify desativado; proxy_read_timeout 90; proxy_http_versão 1.0; proxy_set_header Upgrade $http_upgrade; proxy_set_header Conexão 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; } }
Habilitá-lo;
$ sudo ln -s /etc/nginx/sites-available/striker /etc/nginx/sites-enabled/striker
Reinicie o Nginx;
$ sudo service nginx restart
Seu redirecionador agora deve estar funcionando na porta 443e pode ser testado usando (supondo que seu FQDN seja striker.local);
$ curl https://striker.local
Se funcionar, você deve obter a resposta 404 usada pelo back-end, como;
{erro:Rota inválida!}
4. Os Agentes (Implantes)
A) O Agente C
Estes são os implantes usados por Striker. O agente primário é escrito em C e está localizado em agent/C/. Ele suporta hosts Linux e Windows. O agente linux depende externamente do libcurl, que você encontrará instalado na maioria dos sistemas.
O agente do Windows não possui uma dependência externa. Ele usa wininetpara comunicações, que acredito estar disponível em todos os hosts do Windows.
Construindo para Linux
Supondo que você esteja em um host de 64 bits, o seguinte será criado para o host de 64;
$ cd agent/C $ mkdir bin $ make
Para construir para 32 bits em 64;
$ sudo apt install gcc-multilib $ make arch=32
O acima compila tudo no bin/diretório. Você precisará de apenas dois arquivos para gerar implantes funcionais;
bin/stub- Este é o stub do agente que será usado como modelo para gerar implantes funcionais.
bin/builder- Isso é o que você usará para remendar o stub do agente para gerar implantes funcionais.
O construtor aceita os seguintes argumentos;
$ ./bin/builder [-] Uso: ./bin/builder <auth_key>
Onde;
<url>- O servidor ao qual se reportar. Idealmente, isso deve ser um redirecionador, mas uma URL direta para o servidor também funcionará.
<auth_key>- A chave de autenticação a ser usada ao conectar-se ao C2. Você pode criá-lo na guia de chaves de autenticação da interface do usuário da Web.
<delay>- Atraso entre cada retorno de chamada, em segundos. Isso deve ser pelo menos 2, dependendo de quão barulhento você deseja que seja.
<stub>- O arquivo stub a ser lido, bin/stubneste caso.
<outfile>- O nome do arquivo de saída do novo implante.
Exemplo;
$ ./bin/builder https://localhost:3000 979a9d5ace15653f8ffa9704611612fc 5 bin/stub bin/striker [ ] Ofuscando strings [+] 69 strings ofuscadas :leve_sorriso:[ ] Encontrando offsets de nossos marcadores [+] Offsets: URL: 0x0000a2e0 Chave OBFS : 0x0000a280 Auth Key: 0x0000a2a0 Delay: 0x0000a260 [*] Patching [+] Operação concluída!
Edifício para janelas
Você precisará do MinGW para isso. O seguinte instalará o ambiente Windows dev de 32 e 64 bits;
$ sudo apt install mingw-w64
Construir para 64 bits;
$ cd agent/C $ mdkir bin $ make target=win
Para compilar para 32 bits;
$ make target=win arch=32
Isso compilará tudo no bin/diretório e você terá o construtor e o stub como bin\stub.exee bin\builder.exe, respectivamente.
B) O Agente Python
O Striker também vem com um agente python independente (testado no python 2.7.16 e 3.7.3). Este está localizado em agent/python/. Somente os recursos mais básicos são implementados neste agente. Útil para hosts que não podem executar o agente C, mas têm o python instalado.
Existem 2 arquivos neste diretório;
stub.py- Este é o stub de carga para passar para o construtor.
builder.py- Isso é o que você usará para gerar um implante.
Exemplo de uso:
$ ./builder.py [-] Usage: builder.py <auth_key> # O seguinte irá gerar uma carga útil como output.py$ ./builder.py http://localhost:3000 979a9d5ace15653f8ffa9704611612fc 2 stub.py output.py [ ] Carregando stub do agente [ ] Gravando configurações [+] Agente criado com sucesso: output.py # Execute $ python3 output.py
Começando
Depois de seguir as instruções acima, o Striker deve estar pronto para uso. Por favor, leia o guia de uso . Divirta-se e feliz hacking!
Apoiar
Se você gostou do projeto, considere me ajudar a transformar café em código !
GutHub: