profile.yaml
Ubicación
El archivo profile.yaml debe estar en el mismo directorio que el binario justserver:
dist/
├── justserver
├── profile.yaml ← aquí
├── server.rsa.crt
└── server.rsa.keyEstructura completa
Teamserver:
interface: "0.0.0.0"
port: 4321
endpoint: "/endpoint"
password: "pass"
only_password: true
operators:
operator1: "pass1"
operator2: "pass2"
cert: "server.rsa.crt"
key: "server.rsa.key"
extenders:
- "extenders/beacon_listener_http/config.yaml"
- "extenders/beacon_listener_smb/config.yaml"
- "extenders/beacon_listener_tcp/config.yaml"
- "extenders/beacon_listener_dns/config.yaml"
- "extenders/beacon_agent/config.yaml"
- "extenders/gopher_listener_tcp/config.yaml"
- "extenders/gopher_agent/config.yaml"
axscripts:
# - "Extension-Kit/extension-kit.axs"
access_token_live_hours: 12
refresh_token_live_hours: 168
HttpServer:
error:
status: 404
headers:
Content-Type: "text/html; charset=UTF-8"
Server: "nginx/1.26.2"
page: "404page.html"
http:
max_header_bytes: 8192
read_header_timeout_sec: 0
read_timeout_sec: 0
write_timeout_sec: 0
idle_timeout_sec: 0
request_timeout_sec: 300
request_timeout_message: "504 Gateway Timeout"
disable_keep_alives: false
enable_http2: true
tls:
min_version: "TLS1.2"
max_version: "TLS1.3"
prefer_server_cipher_suites: false
cipher_suites:
- "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
- "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
- "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
- "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
- "TLS_RSA_WITH_AES_128_GCM_SHA256"
- "TLS_RSA_WITH_AES_256_GCM_SHA384"Sección Teamserver
Campos principales
| Campo | Tipo | Descripción | Ejemplo |
|---|---|---|---|
interface | string | Interfaz de red donde escuchar | "0.0.0.0" (todas) |
port | int | Puerto del servidor | 4321 |
endpoint | string | Prefijo URL para la API | "/endpoint" |
password | string | Contraseña maestra del teamserver | "mi_pass_segura" |
only_password | bool | Si true, solo se requiere contraseña (sin usuario) | true |
cert | string | Ruta al certificado TLS | "server.rsa.crt" |
key | string | Ruta a la clave privada TLS | "server.rsa.key" |
Modo de autenticación
JustC2 soporta dos modos de autenticación:
Solo contraseña (only_password: true)
Cualquier usuario puede conectarse proporcionando únicamente la contraseña maestra. El nombre de usuario es informativo:
Teamserver:
password: "contraseña_segura"
only_password: trueOperadores individuales (only_password: false)
Cada operador tiene sus propias credenciales. La contraseña maestra no se usa para login:
Teamserver:
only_password: false
operators:
admin: "pass_admin_segura"
operador1: "pass_op1_segura"
operador2: "pass_op2_segura"Extenders
Lista de rutas a los archivos config.yaml de cada extender que se cargará al inicio:
extenders:
- "extenders/beacon_listener_http/config.yaml"
- "extenders/beacon_agent/config.yaml"Solo los extenders listados aquí se cargan. Puedes comentar los que no necesites para reducir la superficie de ataque.
AxScripts
Scripts de extensión que se cargan al inicio:
axscripts:
- "Extension-Kit/extension-kit.axs"Tokens JWT
| Campo | Descripción | Valor por defecto |
|---|---|---|
access_token_live_hours | Horas de validez del access token | 12 |
refresh_token_live_hours | Horas de validez del refresh token | 168 (7 días) |
El access token se renueva automáticamente usando el refresh token cuando expira.
Sección HttpServer
Ver Configuración del servidor HTTP para documentación detallada de esta sección.
Sección TLS
Ver Configuración SSL/TLS para documentación detallada de esta sección.
Buenas prácticas
- Cambia la contraseña por defecto — Nunca uses
"pass"en producción - Usa operadores individuales — Establece
only_password: falsey define operadores con contraseñas únicas para trazabilidad - Personaliza el endpoint — Cambia
"/endpoint"por algo no predecible - Reduce la vida de tokens — En operaciones sensibles, reduce
access_token_live_hours - Carga solo lo necesario — Comenta los extenders que no vayas a usar
- Personaliza el perfil HTTP — Cambia los headers del servidor para mimetizarse con un servicio legítimo