En un proceso de pentesting de auditoría de caja negra (black box) en un principio no tenemos ningún conocimiento de la infraestructura de servidores y comunicaciones de la organización que vamos a auditar. Nos encontramos en una fase de recopilación de información y escaneo de los activos de la compañía públicos en Internet.
Lo habitual es usar footprinting con recursos web, técnicas de recopilación y análisis OSINT (Open Source Intelligence) intentando obtener la mayor cantidad de información posible y que nos pueda ser de utilidad para avanzar a una fase de enumeración de los sistemas “vivos”.
Es importante conocer los subdominios públicos de un dominio principal para así realizar análisis de posibles vulnerabilidades en estos sistemas y encontrar un vector de ataque que nos permita cruzar la seguridad perimetral hacia la red interna de la organización, ejecución de código arbitrario, exfiltración de datos, etc.
Probando multitud de herramientas para este fin, he decidido hacer una recopilación comentando aquellas que me parecieron más interesantes para obtener el descubrimiento y enumeración de los subdominios de un dominio principal.
Podemos usar herramientas de recursos web, accesibles y rápidas o instalar herramientas en local que dependiendo de cuál nos mostrará un poco más de detalle, control y harán reconocimientos pasivos y/o activos si así lo definimos.
Las consultas que se realizan a los dominios no es ilegal ya que se trata de información pública en Internet y accesible por todos, siempre y cuando solo busquemos y visualicemos los resultados sin llegar a interactuar maliciosamente y de manera directa.
- Reconocimiento pasivo: las peticiones no dejarán evidencias ni acciones en los logs ya que no se llegaría a interactuar con los objetivos escaneados. Por ejemplo realizar búsquedas usando Google Dorks.
- Reconocimiento activo: las peticiones o acciones que dejen un rastro registrado en los logs de los objetivos escaneados. Por ejemplo realizar peticiones con diccionarios wordlists de los posibles subdominios.
Herramientas Online
Herramientas Locales
Herramientas Online Link to heading
DNSDumpster - https://dnsdumpster.com/
Aparte de los subdominios y sus IPs relacionadas nos devolverá un mapa geoip y los servidor DNS, registros MX y registros TXT.

Figura 1: DNSDumpster.
Pentest-tools-https://pentest-tools.com/information-gathering/find-subdomains-of-domain
Nos mostrará todos los subdominios e IPs asociadas, el tipo de servidor, tecnología, tipo de página, a mayores con la versión Pro de pago podremos realizar acciones como escaneo de vulnerabilidades con OpenVAS, URL fuzzer entre otras opciones.

Figura 2: Pentest-tools.
Netcraft - http://searchdns.netcraft.com/
Listará subdominios y el tipo de sistema operativo en el que están alojados, también nos dará la posibilidad de consultar un report de cada subdominio con su IP asociada, geoip, versiones del sitio web y más información. Podemos realizar búsquedas que hagan match con el término de subdominio que estamos buscando.

Figura 3: Netcraft.
IPv4info - http://ipv4info.com/
Buscará simplemente los subdominios asociados a un dominio principal.

Figura 4: IPv4info.
RapidDNS - https://rapiddns.io/
Lista los subdominios y el tipo de registro DNS del que se trata.

Figura 5: RapidDNS.
Google Hacking (Google Dorks)
Una manera interesante de poder encontrar subdominios es directamente realizando una búsqueda usando Google Dorks (operadores de búsqueda avanzada). Con el operador site: indicamos el dominio a buscar y con -site: omitimos los resultados que tengan relación con el subdominio www..
De esta forma se listarán todos los subdominios excepto los que hagan match con www.
site:web.com -site:www.web.com

Figura 6: Google Hacking - Dork para buscar subdominios.
Herramientas Locales Link to heading
Subfinder-https://github.com/projectdiscovery/subfinder
Herramienta en Go. Lista subdominios con un reconocimiento pasivo y actualmente con 26 fuentes donde busca la información.
Descarga: https://github.com/projectdiscovery/subfinder/releases
tar -xzvf subfinder-linux-amd64.tar
mv subfinder-linux-amd64 /usr/bin/subfinder
subfinder -v -d web.com
Dispone de una implementación en Docker:

Figura 7: Subfinder.
Sudomy-https://github.com/Screetsec/Sudomy
Utiliza la biblioteca cURL para obtener el HTTP Response Body de sitios de terceros para ejecutar la expresión regular y así obtener los subdominios, puede establecerse en un modo de reconocimiento pasivo o activo.
Puede implementarse en Docker. Instalación y dependencias:

Figura 8: Sudomy.
Amass - https://github.com/OWASP/Amass
Parte del proyecto OWASP, puede realizar diversas tareas usando recursos OSINT y un reconocimiento activo, entre ellas la búsqueda de subdominios por adivinación basada en similitud de FQDN, transferencias de zona, barrido inverso de DNS y fuerza bruta.
Se puede instalar de manera independiente o usando Docker:
apt install amass
amass enum --passive -d web.com

Figura 9: Amass.
Sublist3r - https://github.com/aboul3la/Sublist3r
Herramienta en python. Realiza diversas búsquedas en buscadores y sitios web para obtener la información.
Instalación de pip (pip es el instalador del paquete para Python).
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
Instalación:
git clone https://github.com/aboul3la/Sublist3r.git
cd sublist3r
pip install -r requirements.txt
python sublist3r.py -h
python sublist3r.py -v -d web.com -o subdomweb.txt

Figura 10: Sublist3r.
Knockpy - https://github.com/guelfoweb/knock
Herramienta en python. Nos mostrará IP, estado, tipo de registro, subdominio y tipo de servicio web.
git clone https://github.com/guelfoweb/knock.git
cd knock/knockpy
python knockpy.py web.com

Figura 11: Knockpy.
dnscan - https://github.com/rbsec/dnscan
Herramienta en python. Busca transferencias de zona, registros TXT, MX, registros DMARC y finalmente realiza un escaneo de registros tipo A mediante wordlists.
git clone https://github.com/rbsec/dnscan.git
cd dnscan
python3 dnscan.py -d web.com

Figura 12: dnscan.
Findomain - https://github.com/Edu4rdSHL/findomain
Dispone de planes de pago con diversas funcionalidades, entre ellas la búsqueda continua y activa de subdominios y la notificación de un nuevo dominio. En su versión free simplemente lista los subdominios actuales.
wget https://github.com/Edu4rdSHL/findomain/releases/latest/download/findomain-linux
chmod +x findomain-linux
./findomain-linux -t web.com

Figura 13: Findomain.
theHarvester - https://github.com/laramies/theHarvester
Herramienta en python. A través de diversos motores de búsqueda y sitios web dado un dominio intenta encontrar emails, perfiles en Linkedin, Twitter, Github, virtual hosts, etc. A mayores también muestra subdominios y su IP asociada.
Está integrado en Kali Linux. Instalación independiente:

Figura 14: theHarvester.
Saludos!