Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ctsub

Alternativa a crt.sh per enumerare sottodomini e certificati. Interroga in parallelo 14 sorgenti pubbliche, unisce e deduplica i risultati, e ti dice sempre quali sorgenti hanno risposto — così sai se il risultato è affidabile o parziale.

Nessuna dipendenza esotica: Python 3.11+, httpx, e dnspython solo per --resolve.

pip install httpx dnspython
sudo apt install postgresql-client   # per la sorgente crtsh-pg
./ctsub.py example.com

Perché non basta una sola alternativa

crt.sh è l'unico servizio pubblico che indicizza tutti i log Certificate Transparency con query SQL libere, ed è gestito da Sectigo come cortesia: il suo frontend web va in 502 molto spesso.

Il suo Postgres pubblico però è una via separata e assai più affidabile, e serve gli stessi dati:

psql -h crt.sh -p 5432 -U guest -d certwatch

È la sorgente crtsh-pg, attiva per default. In test appaiati ha restituito gli stessi 100 host del frontend web nel momento in cui quest'ultimo funzionava — quindi non è un ripiego degradato, è lo stesso dato.

Per il resto la strategia che funziona è unire più sorgenti: quelle marcate CT leggono davvero i log dei certificati, le altre sono passive DNS o storici di scansione che spesso trovano host che i certificati non rivelano.

Uso

./ctsub.py example.com                      # scansione base
./ctsub.py example.com --resolve            # solo host che risolvono in DNS
./ctsub.py example.com --all                # include le sorgenti lente/instabili
./ctsub.py example.com -s certspotter -s crtsh   # solo queste sorgenti
./ctsub.py example.com --json r.json --csv r.csv --txt hosts.txt
./ctsub.py --list-sources
./ctsub.py --serve                          # UI web su http://127.0.0.1:8777

--resolve è quasi sempre quello che vuoi: gli aggregatori restituiscono molto rumore (host mai esistiti, wildcard storiche, spazzatura da domini parcheggiati), e la risoluzione DNS lo taglia via. Su kernel.org: 390 host trovati, 134 effettivamente risolvono.

UI web

--serve avvia un server locale con una pagina di ricerca. Serve un backend — non è un capriccio: quasi nessuna di queste API manda header CORS, quindi una pagina puramente browser-side verrebbe bloccata. Ascolta solo su 127.0.0.1; se lo esponi in rete, mettici davanti un'autenticazione.

L'endpoint JSON è riusabile da altri script:

curl 'http://127.0.0.1:8777/api/scan?domain=example.com&resolve=1' | jq -r '.hosts[]'

Sorgenti

Stato verificato il 2026-08-11:

Sorgente CT Chiave Stato
crtsh-pg no la migliore senza chiave — dati crt.sh via Postgres, ~30-60s
certspotter opzionale ✅ log CT veri, paginata, veloce
crtsh no ⚠️ intermittente: alterna 200, 404, 502 e 503
merklemap obbligatoria 💰 indice CT completo, €49/mese, nessun free tier
subdomain-center no ✅ molti risultati, molto rumore
rapiddns no
anubis no
hackertarget no ✅ quota giornaliera per IP
urlscan opzionale ✅ a tratti 503
wayback no ✅ lento
otx obbligatoria ⚠️ anonimo dà 429
securitytrails obbligatoria non testata (serve chiave)
virustotal obbligatoria non testata (serve chiave)
chaos obbligatoria non testata (serve chiave)

Quando nessuna sorgente CT risponde, il tool stampa un avviso esplicito: in quel caso la copertura non equivale a crt.sh e non devi trattare il risultato come esaustivo.

Chiavi API

Tutte opzionali, tutte via variabili d'ambiente. In ordine di utilità:

Variabile Dove Costo Perché
CERTSPOTTER_API_KEY sslmate.com/certspotter gratis Alza il rate limit; senza chiave si esaurisce in fretta.
OTX_API_KEY otx.alienvault.com gratis Sblocca il passive DNS, che anonimo dà 429.
URLSCAN_API_KEY urlscan.io gratis Alza il rate limit.
VT_API_KEY virustotal.com gratis Free tier 4 req/min.
CHAOS_API_KEY chaos.projectdiscovery.io gratis Dataset ProjectDiscovery.
SECURITYTRAILS_API_KEY securitytrails.com free tier Limitato ma utile.
MERKLEMAP_API_KEY merklemap.com €49/mese Indice CT completo. Vedi sotto prima di pagare.

Su Merklemap

È l'indice CT più completo in circolazione, ma non ha un free tier: il piano parte da €49/mese per 100.000 richieste. Prima di pagarlo, considera che crtsh-pg dà accesso agli stessi log CT gratuitamente, con l'unico costo di essere più lenta (~30-60s) e di dipendere dalla disponibilità di crt.sh.

Merklemap ha senso se ti serve latenza bassa, volumi alti, o non vuoi dipendere dall'uptime di un servizio offerto per cortesia. Per un uso occasionale, crtsh-pg + certspotter coprono lo stesso terreno.

export MERKLEMAP_API_KEY=...
./ctsub.py example.com          # merklemap si attiva da sola

Senza chiave la sorgente viene saltata e segnalata, non fallisce in silenzio.

Note

  • Le sorgenti girano in parallelo, ognuna con timeout indipendente (-t) e un secondo tentativo automatico sugli errori 5xx transitori. Una sorgente rotta non compromette le altre.
  • I nomi vengono normalizzati: wildcard *. rimosse, porte e path tagliati, email nei SAN scartate, e vengono tenuti solo gli host realmente sotto il dominio richiesto (evil-example.com non passa per example.com).
  • Usalo su domini tuoi o per cui hai autorizzazione. I dati CT sono pubblici, ma la scansione DNS massiva su terzi può violare i ToS del tuo provider.

Idee successive

  • Cache su SQLite per non rinterrogare gli stessi domini.
  • certstream per il monitoraggio live di nuovi certificati emessi.
  • Censys Platform API come ulteriore sorgente CT (richiede chiave).

About

Aggregatore di sorgenti Certificate Transparency e subdomain enumeration: alternativa a crt.sh che interroga 14 sorgenti in parallelo

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages