SubCat es una potente herramienta de descubrimiento de subdominios que recopila pasivamente datos de diversas fuentes online para identificar subdominios válidos de sitios web. Diseñada con una arquitectura modular y eficiente, SubCat es ideal para testers de penetración, cazadores de recompensas y investigadores de seguridad.
Creada para cumplir con las restricciones de licencia y uso de sus fuentes pasivas, SubCat garantiza un impacto mínimo en los sistemas objetivo a la vez que proporciona información detallada sobre los subdominios.

Características
- Enumeración rápida: Aprovecha un módulo de resolución y eliminación de comodines de alto rendimiento.
- Fuentes pasivas seleccionadas: Recopila subdominios de fuentes online de confianza para maximizar la cobertura.
- Ligera y eficiente: Optimizada para la velocidad con un consumo mínimo de recursos.
- Integración STDIN/STDOUT: Se integra perfectamente con otras herramientas y flujos de trabajo.
- Filtrado por rango IP: Filtra los resultados por direcciones IP utilizando un rango proporcionado (CIDR o basado en archivos).
- Salida detallada: Opciones para mostrar códigos de estado HTTP, títulos de páginas, direcciones IP y detección de tecnología.
- Modo de búsqueda inversa: Admite la búsqueda inversa para cargar solo los módulos que gestionan la enumeración inversa (requiere un rango IP válido).
- Selección de módulos personalizada: Incluye o excluye módulos específicos mediante indicadores de línea de comandos.
- Multi-threading mejorado: Utiliza 50 hilos concurrentes por defecto para un procesamiento rápido.
Instalación
#Linux, Windows, MacOS
pip3 install -r requirements.txt
Después de la instalación
Antes de consultar servicios de terceros, configura tus claves API en el archivo config.yaml
. No todos los módulos requieren una clave API, pero las siguientes fuentes sí:
- BinaryEdge
- Virustotal
- SecurityTrails
- Shodan
- Bevigil
- Chaos
- DNSDumpster
- Netlas
- DigitalYama
- Censys
- AlienVault
- CertSpotter
- URLScan (para uso avanzado)
Ejemplo de archivo de configuración del proveedor:
codebinaryedge:
- e3a2f1c4-9d2b-47f3-a1e2-4b8d7f0a1c2e
virustotal:
- b1e2d3c4f5a6978877665544332211ffeeddccbbaa99887766554433221100ff
securitytrails:
- X7a9B2c4D6e8F0g1H3i5J7k9L1m3N5o7
- P8q6R4s2T0u8V6w4X2y0Z8a6B4c2D0e2
shodan:
- M3n4O5p6Q7r8S9t0U1v2W3x4Y5z6A7b8
bevigil:
- F1g2H3i4J5k6L7m8
chaos:
- d2c4b6a8-90ef-12ab-34cd-56ef78ab90cd
dnsdumpster:
- c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4
- e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5
netlas:
- Z1x2C3v4B5n6M7a8S9d0F1g2H3j4K5l6
digitalyama:
- Q1w2E3r4T5y6U7i8O9p0
Uso
python3 subcat.py -h
Esto mostrará la ayuda de la herramienta. Aquí están todos los modificadores que admite:
INPUT:
-d DOMAIN, --domain DOMAIN
Target domain to scan
-l LIST, --list LIST File containing list of domains
--scope SCOPE IP scope filter: provide either a file containing CIDR ranges or a single IP/CIDR string (e.g., '8.8.8.8' or
'8.8.4.0/24'). This filter is required when reverse lookup is enabled.
OUTPUT:
-o OUTPUT, --output OUTPUT
Output file
-title, --title Show page titles
-ip, --ip Resolve IP addresses
-sc, --status-code Show HTTP status codes
--up Show only domains that are up (exclude TIMEOUT)
-td, --tech Show detected technologies
-nc, --no-colors Disable colored output in console
FILTERS:
-mc MATCH_CODES, --match-codes MATCH_CODES
Comma separated list of HTTP status codes to filter (e.g., 200,404)
SOURCE:
-ls List available modules and exit
-s SOURCES, --sources SOURCES
Specific sources to use for discovery (comma-separated, e.g., crtsh,wayback)
-es EXCLUDE_SOURCES, --exclude-sources EXCLUDE_SOURCES
Sources to exclude from enumeration (comma-separated, e.g., alienvault,crtsh)
-r, --reverse Enable reverse lookup mode for enumeration (loads only modules supporting reverse lookup). Requires --scope
to be provided.
CONFIGURATION:
-t THREADS, --threads THREADS
Number of concurrent threads (default: 50)
-c CONFIG, --config CONFIG
Path to YAML config file (default: config.yaml)
DEBUG:
-v, --verbose Increase verbosity level (-v, -vv, -vvv)
-silent, --silent Suppress all output except results
-h, --help Show this help message and exit
Ejecutando SubCat
Aquí tienes varios ejemplos para ayudarte a empezar:
Escanear un solo dominio:
python3 subcat.py -d hackerone.com --sc --title --tech --up
; ;
ρββΚ ;ββΝ
έΆχββββββββββββββββββΒ
;ΣΆχΜ΅΅ΫΝββββββββ Ϋ΅ΫβββΝ
όΆΆχβ Ά ββββ΅ Ά΅ βββββ
χΆΆΆφβΒ; Ϋ΅;έββββΒ; Ϋ΅ ρββββββ
ΆΆΆΆδβββββββββ;χββββββμβββββββ
ΪχχχχΧβββββββββββββββββββθθθθΚ
·ϊβθβζ Ϊθθβββββββββββββββμ ;όβΫ΅
·΅ ΅ΫΫΫΆΆθβββββββββθθΫ΅ ΅Ϋ΅
;ΣΆθββββΒΝρρρμ
;ΣΆΆβββββββββββμ
▄∞∞∞∞∞▄, ╒∞∞▄ ∞∞▄ ▄∞∞∞∞∞∞▄ ,▄∞∞∞∞▄ ▄∞∞4▄ ╒∞∞∞∞∞∞∞▄,
▐▄ ═▄▄▄ ▐█▐ ,▀ j' █▌█ ▄▄▄ ▀█▌█▀ ╓▄▄ ▀▄ ¡█ , ▐█ ▐▄▄▄ ▄▄██
▐▄ `'""▀██▐ █▌ j █▌█ `"" ▄█▌█ ▐█▀`▀▄██' M $██ █, `█ ▐█```
j▀▀███▌ ▐█▐ ▀▌▄█ ▀▀█ ▐███ █▌▄ ▀█▄▄▀ ▐█M▀. ▀█▄.▀ J▀
╚▄,,¬¬⌐▄█▌ ▀▄,,, ▄██ █,,,,,▓██▌ ▀▄,,,,▄█╩j▌,██▀▀▀▀▌,█▌`█,▐█
▀▀▀▀▀▀▀ ▀▀▀▀▀▀ ""▀▀▀▀▀▀ ▀▀▀""` ▀▀▀ ▀▀▀ ▀▀▀
΅qΆΆΆΆβββββββββββββββββββββΡ΅
ΫθΆΆΆββββββββββββββββΡ΅
΅ΫΫΫ΅ΝNNΝΫΫΫΐ΅Ϋ
v{1.3.0#dev}@duty1g
[07:43:51][INF]: Starting enumeration for hackerone.com
[07:43:51][INF]: Loaded 19 modules
https://mta-sts.managed.hackerone.com [Page not found · GitHub] [Fastly,GitHub Pages]
https://www.hackerone.com [HackerOne | #1 Trusted Securit] [Google Tag Manager,Drupal,HSTS,Cloudflare,Pantheon,PHP,Fastly,MariaDB,Nginx]
https://gslink.hackerone.com [404 Not Found] [Nginx,Amazon CloudFront,Amazon Web Services]
https://mta-sts.hackerone.com [Page not found · GitHub] [GitHub Pages,Fastly]
https://api.hackerone.com [HackerOne API] [Algolia,HSTS,Cloudflare]
http://resources.hackerone.com [Sorry, no Folders found.] [Amazon Web Services]
https://hackerone.com [HackerOne | #1 Trusted Securit] [Cloudflare,Drupal,Google Tag Manager,HSTS,Pantheon,PHP,Fastly,MariaDB,Nginx]
https://mta-sts.forwarding.hackerone.com [Page not found · GitHub] [Fastly,GitHub Pages]
https://docs.hackerone.com [HackerOne Help Center] [Cloudflare,HSTS]
https://support.hackerone.com [Sign into : HackerOne Support ] [HSTS,Envoy,Cloudflare,HTTP/3]
[07:44:00][INF]: Completed with 23 subdomains for hackerone.com in 9 seconds 58 milliseconds
- Canalizar dominios desde un archivo con resolución IP y códigos de estado HTTP:
cat domains.txt | python3 subcat.py -ip -sc
- Ejecutar con modo de búsqueda inversa (requiere rango IP):
python3 subcat.py -d example.com --scope 8.8.8.0/24 -r
- Escanear un dominio y guardar la salida en un archivo (modo detallado):
python3 subcat.py -d hackerone.com -o output.txt -v
- Integrar con HTTPx para procesamiento posterior o cualquier otra herramienta:
echo hackerone.com | python3 subcat.py -silent -td -title | httpx -silent
- Escanear múltiples dominios desde una lista:
python3 subcat.py -l domains.txt
- Selección de módulos personalizada:
python3 subcat.py -d example.com -s dnsdumpster,virustotal,urlscan -es digitalyama,anubis
Módulos disponibles
SubCat actualmente admite los siguientes módulos para el descubrimiento pasivo de subdominios:
- dnsdumpster
- digitalyama
- virustotal
- binaryedge
- chaos
- bevigil
- dnsarchive
- netlas
- wayback
- shodan
- securitytrails
- urlscan
- crtsh
- threatcrowd
- anubis
- censys
- alienvault
- hackertarget
- certspotter
La arquitectura modular de SubCat está diseñada para la flexibilidad y la facilidad de extensión. Si tienes una idea para un nuevo módulo o quieres contribuir con mejoras, no dudes en enviar una solicitud de extracción (pull request). ¡Tus contribuciones ayudan a que SubCat sea aún mejor!