
Um framework modular de descoberta de ativos escrito em python para automatizar o trabalho manual repetitivo
Cygor é um framework modular de descoberta de ativos que reúne varredura, análise e enumeração de serviços em um único fluxo de trabalho. Ele substitui a colcha de retalhos de ferramentas separadas por um processo automatizado que lida com descoberta, enriquecimento e enumeração direcionada de forma integrada — reduzindo a sobrecarga manual e permitindo que você se concentre nos resultados em vez do gerenciamento de ferramentas.
A Interface Web do Cygor transforma o caos dos dados brutos de varredura em um centro de comando visual único. Em vez de vasculhar intermináveis XML, JSON ou texto simples, os resultados são automaticamente analisados, enriquecidos e exibidos em um espaço projetado para triagem rápida e tomada de decisões.
Alimentado por FastAPI e Bootstrap 5, o painel facilita:
A Interface Web não é apenas para apresentação — é sobre eficiência e clareza. Ao reunir todos os dados coletados em um único espaço de trabalho interativo, reduz o tempo gasto analisando arquivos ou reconciliando saídas e permite que os testadores se concentrem no que importa: entender o ambiente e agir sobre ele.
Muitas ferramentas, técnicas e práticas que crio são inspiradas no Universo Spawn. Se você nunca leu uma HQ do Spawn, tudo bem, pois compartilharei algumas informações sobre por que selecionei o personagem para ser o nome desta ferramenta.
O nome Cygor deriva de Cy-Gor, um anti-herói trágico no universo Spawn. Outrora Michael Konieczny — um agente governamental e amigo próximo de Al Simmons — ele tentou expor a corrupção após o assassinato de Simmons. No entanto, foi capturado e forçado a participar do Projeto Sim, os experimentos símios do Dr. Frederick Willheim, onde o corpo de um gorila foi fundido com a mente de Konieczny por meio de cibernética invasiva. O resultado foi a besta conhecida como Cy-Gor — abreviação de Gorila Cibernético.
Após escapar do cativeiro, Cy-Gor realizou ataques violentos, chegando a destruir centros de dados governamentais em acessos de confusão e fúria. Embora caçado e recapturado várias vezes, ele eventualmente lutou contra os sistemas que tentavam controlá-lo — removendo implantes de rastreamento e se libertando para forjar seu próprio caminho, dividido entre máquina, besta e homem.
webenum (apenas as ferramentas instaladas são executadas).Existem alguns métodos suportados para instalar o Cygor: pip, pipx, uv e docker.
Algumas dependências (ex.: gssapi para Kerberos/WinRM) constroem extensões C, então instale as ferramentas de build e os cabeçalhos Kerberos primeiro:
# Debian/Ubuntu/Kali:
sudo apt install -y build-essential python3-dev libkrb5-dev
# Versão estável:
pipx install cygor
# Instalar a partir do código fonte:
git clone https://github.com/tjnull/cygor
cd cygor
pipx install .
A configuração Docker do Cygor inclui tanto a aplicação quanto um serviço de banco de dados PostgreSQL. O sistema utiliza SQLite como fallback automaticamente se o PostgreSQL não estiver disponível.
Produção (recomendado):
# Opção 1: Usar o script wrapper (resolve automaticamente conflitos de porta)
./docker-compose-up.sh up --build
# Opção 2: Docker compose direto (usa portas padrão)
docker compose up --build
Desenvolvimento (com código fonte montado):
# Opção 1: Usar o script wrapper (resolve automaticamente conflitos de porta)
./docker-compose-up.sh dev up --build
# Opção 2: Docker compose direto (usa portas padrão)
docker compose -f docker-compose-dev.yaml up --build
A configuração do Docker Compose inclui:
results/: Saídas de varredura, resultados de credrecon e arquivos de banco de dadoscygor-config/: Volume de configuração local (criado automaticamente)Por padrão:
5432 do host (se disponível)5434 do host (se disponível)5432 internamente (rede Docker)Se as portas estiverem em uso, você pode:
Usar o script wrapper (recomendado - detecta portas disponíveis automaticamente):
./docker-compose-up.sh up --build
Definir a porta manualmente:
export POSTGRES_HOST_PORT=5435
docker compose up --build
Remover o mapeamento de porta (se não precisar de acesso externo ao PostgreSQL):
Comente a seção ports: no docker-compose.yaml
Para construir a imagem Docker manualmente:
docker build -t cygor .
Executar um único contêiner (sem o serviço PostgreSQL):
docker run --rm -v ./results:/opt/cygor/results \
-e CYGOR_RESULTS_DIR=/opt/cygor/results \
cygor web --host 0.0.0.0 --port 8080 --load-dir /opt/cygor/results
CYGOR_DB_URL esteja definido)Variáveis de ambiente chave para Docker:
Dados & Espaço de Trabalho:
CYGOR_RESULTS_DIR: Diretório de resultados (padrão: /opt/cygor/results)CYGOR_WORKSPACE: Diretório do espaço de trabalho (padrão: /opt/cygor/results)CYGOR_RESULTS_PATH: Caminho do host para o volume de resultados (padrão: ./results)CYGOR_CONFIG_PATH: Caminho do host para o volume de configuração de autenticação (padrão: ./cygor-config)Banco de Dados:
CYGOR_DB_URL: String de conexão do banco de dados (definida automaticamente pelo docker-compose)CYGOR_DB_USER: Usuário do banco de dados PostgreSQL (padrão: cygor)CYGOR_DB_PASSWORD: Senha do banco de dados PostgreSQLPOSTGRES_HOST_PORT: Mapeamento da porta do host para o PostgreSQL (para resolução de conflito de porta)Depuração & Verbosidade:
CYGOR_DEBUG: Ativar modo de depuração (defina como 1 para ativar)CYGOR_VERBOSE: Nível de verbosidade (0=normal, 1=verboso, 2=depuração)Guias detalhados estão em cygor/wiki/ — instalação, os 11 módulos de enumeração integrados, desenvolvimento de plugins, gerenciamento de espaços de trabalho e muito mais. O GitHub renderiza o diretório como um site de documentação navegável (comece em cygor/wiki/README.md). As mesmas páginas também são servidas pela interface web em /docs após executar cygor web start.
Use o comando Cygor de nível superior para acessar as ferramentas disponíveis. Cada subcomando tem sua própria tela de ajuda (Cygor --help) que documenta flags e ações.
tjnull@kali:~$ cygor
Usage:
cygor <command> [args]
Commands:
banner Banner da ferramenta Cygor (Aviso: é grande!)
scan Scanner automatizado para descobrir hosts e serviços. (Requer privilégios root/sudo para varredura).
parse Analisar um arquivo de varredura NMAP (nmap, gnmap, xml) e extrair listas de hosts categorizadas por serviço comum.
enum Carrega módulos de enumeração localizados no diretório de módulos do cygor.
workspace Gerenciar espaços de trabalho (init/set-default/show).
web Controlar/iniciar a Interface Web do Cygor (start/stop/status) ou executar diretamente.
Environment:
CYGOR_WORKSPACE Sobrescrever o espaço de trabalho padrão apenas para esta execução.
CYGOR_RESULTS_DIR Usado pela web e módulos se definido. (Definido automaticamente a partir do espaço de trabalho padrão.)
Você precisará de privilégios sudo (root) para executar o scanner no cygor:
Executar descoberta de host apenas com Masscan:
cygor scan -i eth0 -f scope.txt --discover masscan
Executar descoberta de host com Masscan e Naabu, depois Nmap nos resultados mesclados:
cygor scan -i eth0 -f scope.txt --discover masscan naabu --nmap-source merge
Apenas descoberta (sem Nmap), salvar resultados em results/discovery/:
cygor scan -i eth0 -f scope.txt --discover masscan naabu --discover-only
Reutilizar resultados de descoberta salvos para varredura de portas principais do Nmap:
cygor scan --use-discovery results/discovery/merged-discovered.txt --scan-type top-ports
Executar Nmap com portas personalizadas nos hosts descobertos:
cygor scan --use-discovery results/discovery/masscan-discovered.txt --ports 80,443,8443
Executar Nmap com 10 processos paralelos em todo o escopo (Máximo é 100):
\cygor scan -i eth0 -f scope.txt --discover naabu --processes 10 --scan-type fullscan:
Executar Cygor para descobrir hosts e escaneá-los com Nmap com uma lista fornecida de endereços IP ou CDRs:
cygor scan -i eth0 --ips 10.10.10.1 10.10.10.5 10.10.20.0/24 --discover naabu --processes 10 --scan-type fullscan
Excluir sub-redes ou hosts específicos da varredura:
cygor scan -i eth0 -f scope.txt --exclusions exclusions.txt --discover masscan
Analisar um diretório de resultados do Nmap e imprimir listas de hosts:
cygor parse results/nmap
Analisar um único XML e escrever listas de hosts em results/parsed-hostlists:
cygor parse results/nmap/scan1.xml -o results
Analisar recursivamente arquivos .xml/.nmap/.gnmap e escrever saídas:
cygor parse /path/to/scans --out-dir results
O Cygor fornece um conjunto crescente de módulos de enumeração específicos para protocolos. Cada um encapsula ferramentas comprovadas, analisa a saída em linhas tipadas ("analise-não-despeje") e insere os resultados no inventário (BD + Interface Web), onde são pesquisáveis e correlacionáveis por host. Observações de alto sinal também são alimentadas automaticamente no mecanismo de próximos passos, que exibe achados priorizados e comandos prontos para execução na Interface Web.
Listar todos os módulos disponíveis:
cygor enum --list
Executar lockon contra uma lista de hosts http:
cygor enum lockon web -f results/parsed-hostlists/http/http-hostlist.txt -o results/enum/lockon
Executar descoberta de conteúdo web (multiferramenta, com screenshots):
cygor enum webenum -f results/parsed-hostlists/http-https/http-https-hostlist.txt --screenshot
Executar nfsexplorer contra alvos NFS (apenas exportações):
cygor enum nfsexplorer -i results/parsed-hostlists/nfs/nfs-hostlist.txt --info
Executar smbexplorer e listar arquivos:
cygor enum smbexplorer -i results/parsed-hostlists/smb/smb-hostlist.txt --list-files
Enumerar MSRPC (sessão nula) com política de senhas + ciclo de RID:
cygor enum rpcexplorer -i results/parsed-hostlists/smb/smb-hostlist.txt --rid-cycle
Sondar bancos de dados para acesso não autenticado (apontar para qualquer lista de hosts de serviço de BD):
cygor enum dbprobe -i results/parsed-hostlists/mysql/mysql-hostlist.txt
Execute cygor enum <módulo> --help para a referência completa de opções por módulo.
O Cygor é extensível — coloque um arquivo Python em ~/.cygor/plugins/ e ele aparecerá em cygor enum --list (e na Interface Web) como qualquer módulo integrado. Encapsule suas próprias ferramentas, distribua scanners internos pela sua equipe ou estenda o Cygor para um engajamento específico sem fazer um fork.
Criar um novo plugin (escreve ~/.cygor/plugins/my_scanner.py):
cygor plugin create "My Scanner"
Instalar um plugin de um arquivo local ou URL git:
cygor plugin install ./my_scanner.py
cygor plugin install https://github.com/example/cygor-myscanner
Validar, listar, atualizar, remover:
cygor plugin validate ./my_scanner.py
cygor plugin list
cygor plugin update --all
cygor plugin remove my_scanner
Executar um plugin instalado (mesmo que um módulo integrado):
cygor enum my_scanner -t 10.10.10.5
Três plugins de referência estão em docs/examples/modules/: um exemplo mínimo, um wrapper de ferramenta externa e um modelo anotado completo. Consulte o Guia de Desenvolvimento de Plugins para o formato completo do plugin, opções/colunas/visualizações, tratamento de dependências, compatibilidade de versões e a lista de permissões opcional para plugins.
Após coletar dados, você pode carregá-los na Interface Web do Cygor para transformar os resultados da varredura em uma visualização clara de hosts, serviços e outros achados importantes. O Cygor criará um arquivo chamado cygor.db que conterá os dados necessários para modelar na Interface Web do Cygor.
# Uso básico - iniciar no host/porta padrão (127.0.0.1:8000)
cygor web start
# Iniciar em todas as interfaces, porta 8080
cygor web start -H 0.0.0.0 -p 8080
# Iniciar com diretório de resultados personalizado
cygor web start --load-dir /path/to/results
# Iniciar com saída verbosa
cygor web start -vv
# Iniciar com todas as opções
cygor web start -H 0.0.0.0 -p 8080 --load-dir ~/scan-results -vv
Execute cygor web start --help para a lista completa de opções.
# Verificar se o servidor web está em execução
cygor web status
# Parar um servidor web em execução
cygor web stop
O Cygor detecta e usa automaticamente o PostgreSQL se disponível; caso contrário, utiliza SQLite como fallback:
PostgreSQL (recomendado para produção):
psql estiver disponívelpostgresql+psycopg_async://user:pass@host/dbSQLite (fallback padrão):
cygor.db no diretório de resultadosCygor é um framework de pesquisa e educacional em segurança. Ele é destinado a ser usado apenas em ambientes onde você tenha autorização explícita e por escrito — como em engajamentos de teste de penetração, operações de equipe vermelha, laboratórios de sala de aula ou ambientes de teste pessoais.
Este software não deve ser usado para acesso não autorizado, intrusão ou interrupção de sistemas que você não possua ou controle. Fazê-lo pode violar leis e regulamentos em sua jurisdição e pode resultar em processo criminal ou penalidades civis.
Ao baixar, executar ou modificar o Cygor, você concorda que:
Os autores e contribuidores do Cygor não aceitam nenhuma responsabilidade por uso indevido, danos ou consequências decorrentes do uso deste software.
Se você não tiver certeza se está autorizado a usar o Cygor em um determinado ambiente, não o execute.
| Módulo | Serviço | O que faz |
|---|
lockon | HTTP/S, RDP, VNC, X11 | Captura screenshots em vários protocolos para triagem visual rápida. |
webenum | HTTP/S | Descoberta de conteúdo com múltiplas ferramentas em paralelo (ffuf, feroxbuster, gobuster, dirsearch) com dedup/correlação entre ferramentas e screenshots opcionais. |
smbexplorer | SMB (445) | Enumera compartilhamentos, permissões e arquivos acessíveis; NTLM/Kerberos/pass-the-hash. |
nfsexplorer | NFS (2049) | Enumera exportações, versões e arquivos; spoofing de UID/GID e verificação de no_root_squash. |
rpcexplorer | MSRPC (445) | Sessão nula/autenticada: informações do servidor, SID do domínio, usuários, grupos, política de senhas completa e ciclo de RID. |
ldapexplorer | LDAP/AD (389/636) | rootDSE, bind anônimo/pesquisa e dump de domínio autenticado. |
snmpexplorer | SNMP (161) | Força bruta de comunidades v1/v2c, informações do sistema do dispositivo e varredura MIB (usuários/processos/software/portas/interfaces). |
dnsexplorer | DNS (53) | Versão, detecção de resolvedor aberto e transferência de zona AXFR. |
ftpexplorer | FTP (21) | Banner, login anônimo, listagem de diretório, FEAT, teste de escrita anônima. |
smtpexplorer | SMTP (25/587) | Banner, STARTTLS, mecanismos AUTH, enumeração de usuário VRFY, teste de relay aberto. |
dbprobe | Bancos de Dados | Sonda Redis/MySQL/PostgreSQL/MongoDB/Elasticsearch/CouchDB para acesso não autenticado e versão. |