OsintHunters BrasilOsintHunters Brasil
← Todos os artigos
Guia

Certificate Transparency: como descobrir subdomínios com crt.sh e Censys

Equipe OsintHunters Brasil· 11/10/2026· 10 min de leitura

Mapear os subdomínios de um alvo é uma das primeiras etapas de qualquer reconhecimento. A boa notícia para quem faz OSINT é que existe uma fonte pública, confiável e passiva para isso: os logs de Certificate Transparency (CT). Toda vez que uma autoridade certificadora emite um certificado TLS, esse evento é registrado em logs públicos e auditáveis. Como quase todo subdomínio acaba recebendo um certificado em algum momento, esses logs revelam nomes que a enumeração tradicional dificilmente encontraria, e tudo isso sem enviar um único pacote ao servidor do alvo.

O que é Certificate Transparency

Certificate Transparency é um padrão criado para detectar certificados emitidos de forma indevida. Autoridades certificadoras publicam cada certificado em logs append-only, que qualquer pessoa pode consultar. Do ponto de vista de OSINT, isso tem um efeito colateral valioso: os campos Subject Alternative Name (SAN) de cada certificado contêm os nomes de host cobertos, incluindo subdomínios internos, ambientes de homologação e ativos esquecidos.

Duas ferramentas se destacam para consultar esses logs: o crt.sh (um front-end gratuito mantido pela Sectigo) e o Censys (plataforma de busca de ativos na internet).

Consultando o crt.sh

O crt.sh agrega dados de vários logs CT e permite buscas com curingas no estilo SQL. O caractere % funciona como curinga.

Pela interface web

No campo de busca de crt.sh, uma consulta como %.exemplo.com.br retorna certificados que cobrem subdomínios de exemplo.com.br. Já %exemplo.com.br amplia a busca para qualquer nome que contenha o termo.

Pela API JSON (linha de comando)

O crt.sh pode devolver JSON diretamente, o que permite montar um fluxo de consulta, extração e deduplicação em uma linha. Lembre que o % precisa ser codificado como %25 na URL:

curl -s 'https://crt.sh/?q=%25.exemplo.com.br&output=json' \
  | jq -r '.[].name_value' \
  | sed 's/\*\.//g' \
  | sort -u

O que cada parte faz:

  • curl -s baixa o JSON em modo silencioso.
  • jq -r '.[].name_value' extrai o campo name_value, que traz os nomes de host (um certificado pode listar vários, separados por quebra de linha).
  • sed 's/\*\.//g' remove o prefixo de curinga *. dos certificados wildcard.
  • sort -u ordena e elimina duplicatas.

Uma saída típica se parece com isto:

api.exemplo.com.br
homolog.exemplo.com.br
mail.exemplo.com.br
vpn.exemplo.com.br
www.exemplo.com.br

Monitoramento contínuo via feed

Para acompanhar novos certificados de um domínio ao longo do tempo, o crt.sh oferece um feed Atom:

https://crt.sh/atom?q=exemplo.com.br

Basta assinar esse feed em um leitor de RSS para ser avisado quando um novo subdomínio ganhar certificado. Isso é especialmente útil para detectar ambientes recém-publicados.

Consultando o Censys

O Censys mantém um índice próprio de certificados e usa a Censys Query Language. Na plataforma atual, o operador de regex é o =~, que casa com qualquer parte do campo.

Para buscar nomes de certificado por regex, a documentação indica o campo cert.parsed.subject.common_name com o operador =~:

cert.parsed.subject.common_name=~`exemplo\.com\.br$`

O operador : usa tokenização de subdomínio nos campos de certificado, então para casar por um componente específico da string a forma recomendada é o regex com =~. Vale lembrar que o uso de regex em consultas é um recurso restrito a clientes pagos no Censys.

Para automação, o Censys oferece um cliente Python e há projetos de código aberto, como o censys-subdomain-finder, que consomem a API para enumerar subdomínios a partir dos certificados.

Na prática: fluxo de enumeração passiva

Um roteiro enxuto para um alvo autorizado:

  1. Colete pelo crt.sh. Rode o comando curl/jq acima e salve a lista bruta de nomes em um arquivo.
  2. Complemente com o Censys. Use a busca por cert.names ou regex para pegar certificados que o crt.sh eventualmente não tenha indexado.
  3. Deduplique e normalize. Junte as duas listas, remova wildcards e ordene (sort -u).
  4. Resolva o DNS. Nem todo nome em certificado ainda aponta para um host ativo. Resolva cada candidato para separar o que está vivo:
cat subdominios.txt | while read d; do
  dig +short "$d" | grep -q . && echo "$d"
done
  1. Documente a origem. Registre que a coleta foi 100% passiva, via logs públicos.

Armadilhas comuns

  • Wildcards mascarando subdomínios: um certificado *.exemplo.com.br não revela os subdomínios reais por trás dele. Trate o wildcard como pista, não como resposta.
  • Ruído histórico: os logs guardam certificados antigos. Muitos nomes já não resolvem. Sempre valide com DNS antes de concluir que algo existe.
  • Domínios compartilhados: certificados de CDNs e provedores de hospedagem podem listar nomes de vários clientes. Confirme a titularidade.
  • Limites de taxa: o crt.sh pode ficar lento ou aplicar limites em consultas pesadas. Espace as requisições e evite loops agressivos.

Tabela comparativa

Recursocrt.shCensys
CustoGratuitoGratuito com limites; regex é pago
Saída programáticaJSON e feed AtomAPI e cliente Python
Monitoramento contínuoFeed Atom por domínioAlertas na plataforma
Ponto forteRapidez e simplicidadeRiqueza de metadados

Ética e legalidade

Consultar logs de Certificate Transparency é coleta passiva de informação pública: você não toca a infraestrutura do alvo. Ainda assim, no Brasil a LGPD e o Marco Civil da Internet exigem finalidade legítima para qualquer tratamento de dados. Use essas técnicas em alvos próprios, em programas de bug bounty autorizados ou em investigações com base legal. Resolver DNS e varrer portas já deixa o campo passivo e pode exigir autorização: tenha clareza sobre o escopo antes de avançar.

Mapeou a superfície de um domínio com CT logs e quer validar seu método? Traga seu fluxo para a comunidade OsintHunters Brasil e compare notas com outros investigadores.