Guía Definitiva de Footprinting

1. ¿Qué es Footprinting?

El footprinting es la fase inicial de cualquier prueba de seguridad (o pentest), donde recopilamos tanta información como sea posible sobre el objetivo, sin interactuar directamente con los sistemas (pasivo) o realizando sondas mínimas (activo). Pensad en ello como planear una expedición: no vamos a cavar sin criterio, sino a estudiar mapas, rutas y recursos.

Objetivo: Mapear la infraestructura de la víctima para descubrir dominios, subdominios, rangos IP, servicios activos y arquitecturas internas.


2. Principios Fundamentales de la Enumeración

Antes de lanzarnos a las herramientas, debemos interiorizar algunas preguntas guía:

  • ¿Qué vemos?
  • ¿Qué no vemos?
  • ¿Cómo podemos aprovechar lo visible?
  • ¿Qué pistas oculta lo invisible?

Estos principios nos mantienen atentos tanto a la superficie como a lo que subyace, evitando centrarnos solo en lo obvio.


3. Metodología en Seis Capas

Dividimos el footprinting en tres grandes bloques—infraestructura, hosts y sistema operativo—pero, para orientarnos, lo estructuramos en seis capas:

CapaObjetivo
1. Presencia en InternetDominios, subdominios, ASN, IPs, seguridad frontal.
2. Puerta de EnlaceFirewalls, WAF, VPN, proxys.
3. Servicios AccesiblesIdentificar puertos, versiones, configuraciones.
4. ProcesosFlujos de datos, dependencias de procesos.
5. PrivilegiosUsuarios, grupos, permisos en servicios.
6. Configuración SOVersiones, parches, archivos de configuración.

En este post nos centraremos en la enumeración basada en infraestructura y en la enumeración basada en host.


4. Enumeración Basada en Infraestructura

4.1. Información de Dominio y Subdominios

  • Transparencia de Certificados Extraemos detalles de certificados públicos para descubrir subdominios:
curl -s "https://crt.sh/?q=ejemplo.com&output=json" | jq .

Explicación: Esto devuelve un JSON con cada certificado emitido, incluyendo common_name y name_value, valioso para listar subdominios .

  • Filtrar subdominios únicos:
curl -s "https://crt.sh/?q=ejemplo.com&output=json" | jq . | grep name_value | cut -d":" -f2 | tr -d '\" ' | sort -u

Explicación: Tras obtener el JSON, extraemos valores limpios y únicos .

  • Resolución de hosts:
for host in $(cat subdomains.txt);do 	host $host | grep "has address" | awk '{print $1, $4}'
done

Explicación: Asocia cada subdominio con su IP, filtrando solo los alojados internamente.

  • Shodan Automático
for ip in $(cut -d' ' -f2 hosts.txt); do 	shodan host $ip; 
done

Explicación: Detalla servicios y puertos expuestos, perfecto para IoT y sistemas integrados .

  • Registros DNS
dig ANY ejemplo.com

Explicación: A, MX, NS, TXT y SOA revelan direcciones IP, mail servers, DNS delegados y validaciones TXT (SPF, DKIM, etc.) .

4.2. Identificando Proveedores en la Nube

  • Buckets y Blobs: Google Dorks y herramientas como GrayHatWarfare para descubrir S3, GCP y Azure.
  • Cloudflare, WAFs y Proxies: Servicios como Domain.Glass indican si una web está detrás de protección avanzada.

5. Enumeración Basada en Host

5.1. FTP

El FTP es un protocolo de texto claro que aún se utiliza en muchos entornos internos.

  • Cliente FTP:
ftp <FQDN/IP>
  • Conexión sin cifrado:
nc -nv 10.129.14.136 21telnet 10.129.14.136 21
  • Conexión con TLS:
openssl s_client -connect 10.129.14.136:21 -starttls ftp
  • Descubrir scripts NSE:
find /usr/share/nmap/scripts/ -name 'ftp-*.nse'
  • Escaneo Nmap:
sudo nmap -sV -p21 -sC -A 10.129.14.136 --script-trace 

Explicación: Detecta versiones, scripts por defecto y traza la interacción.

  • Anonimato FTP:
sudo apt install vsftpdcat /etc/vsftpd.conf | grep -v "#"cat /etc/ftpusersftp 10.129.14.136
    • anonymous_enable=YES habilita login anónimo.
    • anon_upload_enable=YES permite subir archivos.
  • Uso práctico:
ftp> ls ftp> get Important\ Notes.txt ftp> put testupload.txt ftp> ls -R 

Explicación: Listar, descargar y cargar archivos puede revelar datos y, en caso de subida, servir para payloads de RCE.

  • Descarga masiva:
wget -m --no-passive ftp://anonymous:anonymous@10.129.14.136 tree . 

Explicación: Captura toda la estructura FTP localmente.

TFTP

El Trivial File Transfer Protocol (TFTP) es una versión ligera de FTP que opera sobre UDP en el puerto 69 y carece de autenticación. Solo permite transferencias de archivos en modo lectura o escritura en directorios configurados como compartidos.

Comandos básicos de TFTP:

ComandoDescripción
connect <host> [port]Establece el servidor remoto (puerto opcional).
get <archivo>Descarga el archivo desde el servidor al cliente.
put <archivo>Carga el archivo desde el cliente al servidor.
quitSale de la sesión TFTP.
statusMuestra el estado de la conexión y modo de transferencia.
verboseActiva/desactiva modo detallado.

Práctica: conecta al servicio TFTP y descarga un archivo de prueba.

$ tftp 10.129.14.128 69
tftp> connect 10.129.14.128
tftp> get test.txt
tftp> quit

5.2. SMB

Server Message Block (SMB) es el protocolo Windows para compartir archivos e impresoras (puertos TCP 139 y 445). Con Samba, Unix también puede ofrecer estos servicios.

Herramientas y ejemplos:

  • Listar recursos compartidos con sesión nula:
smbclient -N -L //10.129.14.128
  • Conectarse a un recurso y explorar:
smbclient //10.129.14.128/notessmb: \> lssmb: \> get prep-prod.txt
  • RPC y SAMR:
rpcclient -U "" 10.129.14.128samrdump.py 10.129.14.128
  • Enumeración avanzada con enum4linux-ng:
git clone https://github.com/cddmp/enum4linux-ng.git cd enum4linux-ng pip3 install -r requirements.txt ./enum4linux-ng.py 10.129.14.128 -A
  • SMBMap y CrackMapExec para listar shares y permisos:
smbmap -H 10.129.14.128 crackmapexec smb 10.129.14.128 --shares -u '' -p ''

5.3. NFS (Network File System)

NFS permite montar recursos remotos como si fueran locales. Usa principalmente los puertos UDP/TCP 2049.

Comandos básicos de NFS:

showmount -e <FQDN/IP>             # Muestra exports disponibles
mount -t nfs <FQDN/IP>:/<share> ./target-NFS/ -o nolock  # Montar share en local
umount ./target-NFS/               # Desmontar recurso montado

5.4. DNS (Sistema de Nombres de Dominio)

La enumeración DNS revela registros y posibles subdominios.

dig ns <domain.tld> @<nameserver>      # Solicitud NS específica
dig any <domain.tld> @<nameserver>     # Registros ANY
dig axfr <domain.tld> @<nameserver>    # Transferencia de zona (AXFR)
dnsenum --dnsserver <nameserver> --enum -p 0 -s 0 -o found_subdomains.txt -f ~/subdomains.list <domain.tld>  # Fuerza bruta de subdominios

5.5. SNMP

El Simple Network Management Protocol (SNMP) supervisa y configura dispositivos de red en UDP 161 (traps en 162). Las versiones v1/v2c transmiten en texto claro; v3 añade autenticación y cifrado.

Comandos de enumeración:

snmpwalk -v2c -c public 10.129.14.128
onesixtyone -c community-list.txt 10.129.14.128
braa public@10.129.14.128:.1.3.6.*

Tip: en un laboratorio, configura tu propio servidor SNMP para practicar traps y MIB.


5.6. SMTP / IMAP / POP3

  • SMTP (puerto 25/587/465): prueba con Telnet o STARTTLS:
telnet 10.129.14.128 25 EHLO example.com STARTTLS 

Consulta relé abierto, VRFY y EXPN para verificar buzones.

  • IMAP (puerto 143/993) con cURL o OpenSSL:
curl -k 'imaps://10.129.14.128' --user user:pass openssl s_client -connect 10.129.14.128:993

Navega carpetas y usa comandos LOGIN, LIST, FETCH.

  • POP3 (puerto 110/995): conecta y usa USER, PASS, STAT, LIST, RETR, QUIT.

5.7. Bases de Datos

MySQL

mysql -u <user> -p<pass> -h 10.129.14.128

Escanea con Nmap (--script=mysql*) y prueba credenciales vacías.

MSSQL

mssqlclient.py <user>@10.129.14.128 -windows-auth

También hay scripts de Impacket para enumerar login y bases.

Oracle (TNS)

Para interactuar con el listener Oracle TNS y verificar la conectividad básica:

curl -X GET http://10.129.204.235/testing.txt

Prueba tnsping y Nmap (--script tnscmds).


Herramientas y pasos adicionales para Oracle

  1. Instalación de dependencias y clientes:
sudo apt-get install libaio1 python3-dev alien -y git clone https://github.com/quentinhardy/odat.git cd odat/ git submodule init && git submodule update wget https://download.oracle.com/otn_software/linux/instantclient/2112000/instantclient-basic-linux.x64-21.12.0.0.0dbru.zip unzip instantclient-basic-linux.x64-21.12.0.0.0dbru.zip wget https://download.oracle.com/otn_software/linux/instantclient/2112000/instantclient-sqlplus-linux.x64-21.12.0.0.0dbru.zip unzip instantclient-sqlplus-linux.x64-21.12.0.0.0dbru.zip export LD_LIBRARY_PATH=$(pwd)/instantclient_21_12:$LD_LIBRARY_PATH export PATH=$(pwd)/instantclient_21_12:$PATH pip3 install cx_Oracle python3-scapy colorlog termcolor passlib python-libnmap pycryptodome
  1. Ver ayuda de ODAT:
./odat.py -h
  1. Escaneo del listener con Nmap:
sudo nmap -p1521 -sV 10.129.204.235 --open
  1. Fuerza bruta de SID con Nmap:
sudo nmap -p1521 -sV 10.129.204.235 --open --script oracle-sid-brute
  1. Enumeración completa con ODAT:
./odat.py all -s 10.129.204.235
  1. Conexión manual con SQL*Plus:
sqlplus scott/tiger@10.129.204.235/XE
  1. Enumeración con SQL*Plus:
SELECT table_name FROM all_tables;SELECT * FROM user_role_privs;sqlplus scott/tiger@10.129.204.235/XE AS SYSDBASELECT * FROM user_role_privs;
  1. Carga de archivos con ODAT (utlfile):
echo "Oracle File Upload Test" > testing.txt ./odat.py utlfile -s 10.129.204.235 -d XE -U scott -P tiger --sysdba --putFile C:\inetpub\wwwroot testing.txt ./testing.txt curl -X GET http://10.129.204.235/testing.txt

5.8. IPMI

La Interfaz de Gestión Inteligente de la Plataforma usa UDP 623 para gestión en out‑of‑band.

msf6 auxiliary(scanner/ipmi/ipmi_version) RHOSTS=10.129.14.128
msf6 auxiliary(scanner/ipmi/ipmi_dumphashes) RHOSTS=10.129.14.128

5.9. SSH

SSH es el estándar para administración remota segura en el puerto TCP 22.

Comandos de exploración y autenticación:

ssh-audit.py <FQDN/IP>
ssh -v user@10.129.14.128
ssh -i private.key user@10.129.14.128
ssh user@10.129.14.128 -o PreferredAuthentications=password
nmap -sV -p22 --script=ssh* 10.129.14.128

5.10. RDP

RDP es el protocolo de escritorio remoto de Windows en el puerto TCP 3389.

git clone https://github.com/CiscoCXSecurity/rdp-sec-check.git
cd rdp-sec-check
./rdp-sec-check.pl 10.129.201.248	# Verificar cifrado y NLA
xfreerdp /u:<user> /p:"<password>" /v:<FQDN/IP>		# Cliente RDP en Linux
evil-winrm -i <FQDN/IP> -u <user> -p <password> 	# WinRM remoto
nwmiexec.py <user>:"<password>"@<FQDN/IP> "<system command>" 	# Comandos WMI

Comparte esta Publicación en Redes Sociales