
Genera configuraciones de redireccionador Caddy a partir de perfiles de Cobalt Strike o Sliver C2.
CaddySmith es un pequeño script en Python que lee un perfil C2 de Cobalt Strike o Sliver y genera una configuración de servidor web Caddy a partir de él. El Caddyfile generado convierte una máquina Linux normal en un redireccionador: el tráfico legítimo de balizas se redirige a tu servidor del equipo, y todo lo demás (escáneres, bots de búsqueda, sondas de equipos azules, curl aleatorio) se envía a una URL señuelo.
Lo escribí porque Caddy es un servidor web mucho más amigable para levantar rápidamente que Apache, un único binario estático, certificados automáticos de Let's Encrypt, sin el baile de a2enmod.
Solo para compromisos autorizados. Esto es una herramienta ofensiva de seguridad. Ejecútala solo contra entornos para los que tengas permiso por escrito para probar.
CaddySmith detecta automáticamente el formato a partir del contenido del archivo:
set uri "/foo". Cada URI de HTTP-GET / HTTP-POST se convierte en su propia ruta exacta con los encabezados del cliente definidos en el perfil.path /api* /static* /resources*) y realizando una coincidencia de subcadena en el número de compilación de Chrome del UA (que sobrevive a las reescrituras de UA específicas de plataforma de Sliver).También puedes forzar un analizador específico con --profile-type cobaltstrike o --profile-type sliver.
Dado un archivo de perfil, el script extrae:
--server-name)set host_stage)Luego construye un Caddyfile que:
.env, /wp-admin, .php, etc.)pip install)python3 caddysmith.py my.profile \
--backend https://teamserver.internal:443 \
--decoy https://www.example.com/ \
--server-name redirector.example.com \
--email [email protected] \
--forbid-http \
-o redirector.caddy
Esto escribe la configuración generada en redirector.caddy e imprime un resumen de lo que hizo en stderr.
Copia el archivo generado al redireccionador y ejecuta Caddy con él. Necesitas la bandera --adapter caddyfile porque Caddy por defecto usa configuración JSON:
caddy run --config /etc/caddy/redirector.caddy --adapter caddyfile
Para recargar una instancia en ejecución con una configuración actualizada:
caddy reload --config /etc/caddy/redirector.caddy --adapter caddyfile
Si Caddy advierte sobre inconsistencias de formato, límpialas con:
caddy fmt --overwrite /etc/caddy/redirector.caddy
Coloca el archivo en /etc/caddy/ e impórtalo desde tu Caddyfile principal:
# /etc/caddy/Caddyfile
import /etc/caddy/redirector.caddy
Si pasaste --email (recomendado), el fragmento generado ya contiene el bloque de opciones globales, por lo que el Caddyfile principal solo necesita la línea import. Si no lo hiciste, agrega el email manualmente en un bloque { } antes de la importación.
Luego valida y recarga:
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
Caddy aprovisionará automáticamente un certificado de Let's Encrypt para el dominio en --server-name siempre que el registro A apunte al redireccionador.
| Banderas | Por defecto | Qué hace |
|---|---|---|
profile | (obligatorio) | Ruta al archivo .profile |
--backend | https://teamserver.local:443 | Adónde redirigir el tráfico coincidente |
--decoy | https://www.example.com/ | Adónde redirige el tráfico no coincidente |
--server-name | c2.example.com | El nombre de dominio de tu redireccionador |
--policy | strict | strict, lax o none |
--profile-type | auto | Forzar cobaltstrike o sliver (por defecto: auto-detect) |
--extra-uri PATH | — | URI adicional para redirigir (con verificación de UA). Se puede repetir. |
--lax-uri PATH | — | URI adicional para redirigir (sin comprobaciones). Se puede repetir. |
--allow-ua STRING | — | UA adicional permitido en rutas --extra-uri. Se puede repetir. |
--forbid-http | desactivado | Devuelve 403 en HTTP plano |
--email EMAIL | — | Email para registro y avisos de renovación de Let's Encrypt |
-o, --output FILE | stdout | Escribe la configuración en un archivo |
Strict es lo que normalmente quieres. Lax es útil cuando estás depurando por qué una baliza real no se conecta.
Supón que tienes un perfil que imita un endpoint de Amazon y quieres desplegarlo en redirector.0xtb.sh:
python3 caddysmith.py amazon.profile \
--backend https://10.1.1.10:443 \
--decoy https://www.amazon.com/ \
--server-name redirector.0xtb.sh \
--forbid-http \
--policy strict \
-o /etc/caddy/redirector.caddy
El resumen te muestra exactamente qué rutas se construyeron, por ejemplo:
Routes built: 2
- [profile-get] /broadcast
- [profile-post] /1/events/com.amazon.csm.csa.prod
Si regeneras y ves ninguna ruta, probablemente el script falló al analizar tu perfil — revisa las advertencias en stderr.
Para una configuración de implante de Sliver (JSON):
python3 caddysmith.py sliver-implant.json \
--backend https://10.1.1.10:443 \
--decoy https://www.amazon.com/ \
--server-name redirector.0xtb.sh \
--email [email protected] \
--forbid-http \
--policy strict \
-o /etc/caddy/redirector.caddy
El resumen te indicará que se detectó Sliver y mostrará la ruta de prefijo:
Profile type: sliver
Routes built: 1
- [sliver] /api /public /resources /services /static (prefix)