Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/hassan-pouladi/cisco-fmc-honeypot
Análisis de VulnerabilidadesSeguridad de RedesAnálisis de MalwareInteligencia de AmenazasRespuesta a Incidentes
GitHubhassan-pouladi/cisco-fmc-honeypot

Cisco-FMC-honeypot

Originalmente un honeypot para CVE-2026-20131

Ver Repositorio
11hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

FMC-Trap

Un honeypot de baja interacción que simula la superficie web de un Cisco Secure Firewall Management Center (FMC) y captura tráfico de ataque de serialización Java sin autenticación (sondas de deserialización insegura tipo CVE).

  • Seguro por diseño: la aplicación no deserializa objetos Java; detecta \xac\xed\x00\x05 (y Base64 rO0AB…) y extrae cadenas de shell o URL mediante expresiones regulares y heurísticas.
  • Sin ejecución de comandos: las URL de segunda etapa se recuperan únicamente con Python requests en un volumen de descargas no ejecutable.
  • Stack orientado a producción: Docker Compose con Gunicorn y Caddy opcional (HTTPS, Let’s Encrypt).

¿Por qué ejecutarlo?

Registros JSON de una sola línea (compatibles con Splunk y ELK), alertas Telegram opcionales, artefactos de segunda etapa con hash y un usuario de contenedor no root. El proyecto está dirigido a investigadores que necesiten una trampa de estilo FMC enfocada, sin código de integración adicional.

Requisitos

Inicio rápido (aproximadamente cinco minutos)

1. Clonar

root@kitploit:~
git clone https://github.com/Hassan-Pouladi/Cisco-FMC-honeypot
cd FMC-Trap

2. Configurar el entorno

root@kitploit:~
cp .env.example .env

Edita .env según sea necesario (consulta Variables de entorno). Para despliegues detrás del Caddy incluido, establece TRUST_X_FORWARDED_FOR=1 para que las direcciones IP de los clientes en los registros reflejen al cliente original.

3. Apunta Caddy a tu dominio

Edita Caddyfile: reemplaza los nombres de host de marcador de posición por tu dominio (y www si corresponde):

root@kitploit:~
example.com, www.example.com {
	reverse_proxy fmc-trap:5000
}

Opcionalmente, descomenta el bloque global email [email protected] en Caddyfile para recibir avisos de caducidad de Let’s Encrypt.

4. DNS y cortafuegos (HTTPS)

  • Crea registros A (y AAAA si corresponde): de yourdomain.com a la IP pública de tu servidor, y www si se usa.
  • Permite el tráfico entrante TCP 80 y TCP 443 en el host (grupo de seguridad en la nube y cortafuegos del host, por ejemplo ufw allow 80,443/tcp).

5. Directorios de datos (requerido)

La aplicación se ejecuta con UID 10001 dentro del contenedor. El directorio ./data montado debe ser escribible:

root@kitploit:~
mkdir -p data/logs data/downloads
sudo chown -R 10001:10001 data/logs data/downloads

Sin la propiedad correcta, las solicitudes POST de exploits pueden devolver 500 (Permission denied al escribir registros o blobs sin procesar).

6. Iniciar

root@kitploit:~
docker compose up -d --build

7. Verificar

root@kitploit:~
docker compose ps
curl -sI https://yourdomain.com/

Espera HTTP/2 200 (o 301 o 302) y Via: Caddy. En un navegador, https://yourdomain.com/ debería mostrar la página de inicio de sesión simulada de FMC.

Para saber dónde leer eventos, payloads y la salida de Docker, consulta Cómo encontrar registros, descargas y salida del servicio y Operaciones comunes.

Cómo encontrar registros, descargas y salida del servicio

Todo lo que sigue es relativo a tu directorio de proyecto (la carpeta que contiene docker-compose.yml, normalmente FMC-Trap después de clonar). Las rutas están en el host; Docker las monta dentro del contenedor.

Cuando algo aparece en el archivo de registro: fmc-trap.json recibe un objeto JSON por línea cuando una solicitud coincide con el comportamiento de una sonda de deserialización (bytes mágicos en un POST). Las solicitudes GET ordinarias a la página de inicio de sesión falsa no se escriben en este archivo de forma predeterminada.

Cuando la carpeta de descargas tiene archivos: las entradas aparecen solo si el pipeline extrae una URL de una sonda y el recolector obtiene correctamente el contenido remoto permitido dentro de MAX_DOWNLOAD_MB. Si el directorio permanece vacío, puede que aún no haya URL que cumplan los requisitos, o que las descargas estén bloqueadas por la política de la aplicación.

Impresión legible de JSON (opcional): para una sola línea, canalízala con python -m json.tool o usa jq si está instalado.

Operaciones comunes

Arquitectura

root@kitploit:~
Internet :443/:80 → Caddy (TLS, Let’s Encrypt) → fmc-trap:5000 (Gunicorn/Flask)
                              ↓
                    ./data/logs, ./data/downloads (bind mounts)
  • Solo Caddy publica 80 y 443 al host; el contenedor de la aplicación no está expuesto directamente (consulta expose: "5000" en Compose).
  • Caddy utiliza resolutores DNS públicos (1.1.1.1, 8.8.8.8) dentro del contenedor para que Let’s Encrypt tenga éxito en hosts donde el resolutor de la VPS es inalcanzable desde Docker (una limitación común en algunos proveedores de nube).

Variables de entorno

Compose pasa estas variables al servicio fmc-trap; consulta docker-compose.yml para más detalles.

Campos del registro JSON (referencia)

Cada línea en data/logs/fmc-trap.json es un objeto JSON. Las claves comunes incluyen timestamp, event_type, src_ip, headers, raw_payload_hash, extracted_commands y downloaded_file_hash cuando se almacenó un archivo. Los blobs guardados en data/downloads/ usan modo 0400 (solo lectura para el propietario).

Solución de problemas

Opcional: exponer la aplicación en localhost (depuración)

Para acceder a Gunicorn directamente sin Caddy, añade lo siguiente bajo fmc-trap en docker-compose.yml:

root@kitploit:~
ports:
  - "127.0.0.1:5000:5000"

No vincules la aplicación a 0.0.0.0 en producción cuando Caddy termina TLS.

Seguridad

  • Despliega en una VPS dedicada o en una red aislada. El servicio maneja tráfico malicioso y puede descargar malware para su análisis.
  • Almacena los tokens de Telegram y otros secretos solo en .env en el host (nunca hagas commit de .env).
  • Restringe el cortafuegos a los puertos mínimos requeridos (80 y 443 para HTTPS).

Uso legal y ético

Despliega solo en sistemas que poseas o en los que estés explícitamente autorizado a desplegar instrumentación. Los honeypots pueden recopilar tráfico de ataque y malware; cumple con la legislación aplicable y la política de la organización. Este software está destinado a la investigación de seguridad.

Descargar herramienta
ElementoNotas
Docker y Docker Compose v2Instalar Docker
VPS u hostSe recomienda un segmento de red dedicado o aislado
Dominio (opcional)Para HTTPS: configura el DNS y permite el tráfico entrante TCP 80 y TCP 443 al host
QuéRuta en el hostCómo abrir o seguir
Registro de eventos (líneas JSON)data/logs/fmc-trap.jsontail -f data/logs/fmc-trap.json (flujo en vivo), o ábrelo en un editor, o ingéstalo en Splunk o ELK
Payloads de segunda etapa descargadosdata/downloads/Los archivos aparecen solo cuando el recolector guarda una respuesta remota; cada archivo se nombra con su hash SHA256 (64 caracteres hexadecimales), sin extensión. Enuméralos con ls -la data/downloads (Linux o macOS) o Get-ChildItem data\downloads (Windows PowerShell)
Salida del proceso de la aplicaciónNo es un archivo; Dockerdocker compose logs -f fmc-trap
Caddy (TLS, proxy, ACME)No es un archivo; Dockerdocker compose logs -f caddy
Alertas de Telegram (opcional)No se almacenan en data/Establece TELEGRAM_BOT_TOKEN y TELEGRAM_CHAT_ID en .env; las alertas se disparan cuando se registran eventos
ObjetivoComando o acción
Ver si los contenedores están en ejecucióndocker compose ps
Reiniciar después de editar .env o Caddyfiledocker compose up -d --build (o docker compose up -d --force-recreate si solo cambió el entorno)
Detener el stackdocker compose down
Seguir nuevos eventos JSON continuamentetail -f data/logs/fmc-trap.json
Inspeccionar los últimos eventostail -n 50 data/logs/fmc-trap.json
Contar los artefactos descargadosAbre data/downloads en tu administrador de archivos, o usa un conteo de archivos de shell en ese directorio (los archivos se nombran por SHA256)
Confirmar que la página del honeypot cargaAbre https://yourdomain.com/ en un navegador o usa curl -sI como en el paso de verificación
VariablePropósitoPredeterminado / nota
TRUST_X_FORWARDED_FORUsar el primer salto de X-Forwarded-For como src_ipSe recomienda 1 con Caddy
DECEPTION_STATUS200 devuelve un cuerpo HTML; 302 devuelve una redirección200
DECEPTION_REDIRECT_URLRuta de destino cuando el estado es 302/
MAX_DOWNLOAD_MBLímite del recolector por URL16
TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_IDAlertas opcionalesVacío desactiva las alertas
FMC_SERVER_HEADERCabecera de respuesta Servernginx
VT_API_KEYReservadoOpcional
SíntomaResolución
Permission denied al escribir en data/Ejecuta sudo chown -R 10001:10001 data/logs data/downloads
Bind for 0.0.0.0:80 failed: port is already allocatedOtro servicio o contenedor está vinculado al puerto 80. Detén ese servicio o libera el 80; solo un proceso puede escuchar en el 80 por host.
Errores de Let’s Encrypt o ACME en los registros de CaddyConfirma que DNS resuelve a este servidor y que 80 y 443 son accesibles desde internet. Compose configura DNS 1.1.1.1 y 8.8.8.8 para Caddy cuando el resolutor del host falla dentro de Docker.
curl a HTTPS devuelve salida vacía o falla en el primer intentoEspera hasta que certificate obtained successfully aparezca en docker compose logs caddy.
La IP del cliente en los registros es 172.x.x.xEstablece TRUST_X_FORWARDED_FOR=1 cuando uses Caddy y luego recrea los contenedores: docker compose up -d --force-recreate.