La fase de recolección de información, también conocida como reconocimiento o footprinting, es el pilar fundamental de cualquier auditoría de seguridad o prueba de penetración. Este proceso permite identificar la superficie de ataque y comprender la arquitectura tecnológica de un objetivo.
1. Fundamentos de Comunicación Web
Para interceptar y analizar datos, es crucial entender el flujo de una petición HTTP. Cuando un usuario accede a una URL (por ejemplo, http://ejemplo.com), ocurren los siguientes pasos:
- El navegador solicita al sistema operativo la resolución del nombre de dominio.
- Se consulta a un servidor DNS para traducir el dominio en una dirección IP.
- Se establece una conexión con el servidor web mediante el protocolo HTTP/HTTPS.
- El servidor procesa la solicitud y devuelve una respuesta (código de estado, cabeceras y cuerpo).
- El navegador interpreta el código (HTML, CSS, JS) y renderiza la interfaz gráfica.
2. Identificación de Infraestructura
El direccionamiento IP representa la ubicación lógica de un dispositivo en la red. Es importante distinguir entre:
- IP Pública: Accesible desde cualquier punto de Internet.
- IP Privada: Utilizada dentro de redes locales (LAN) mediante protocolos como DHCP.
- CDN (Content Delivery Network): Servicios como Cloudflare que ocultan la IP real del servidor para mejorar el rendimiento y la seguridad.
3. Análisis de Dominios y Subdominios
El registro Whois proporciona datos sobre la propiedad de un dominio, fechas de registro y servidores DNS. Herramientas como whois.com o chinaz.com son esenciales para este fin.
La enumeración de subdominios permite expandir el alcance del ataque, ya que los entornos de desarrollo o pruebas (ej. dev.target.com) suelen tener medidas de seguridad más laxas que el sitio principal.
Script para Enumeración de Subdominios (Python)
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse
import sys
def rastrear_bing(objetivo, num_paginas):
hallazgos = set()
cabeceras = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko/20100101 Firefox/89.0'
}
for pag in range(int(num_paginas)):
inicio = pag * 10
query = f"https://www.bing.com/search?q=site%3a{objetivo}&first={inicio}"
try:
res = requests.get(query, headers=cabeceras, timeout=5)
sopa = BeautifulSoup(res.text, 'html.parser')
enlaces = sopa.find_all('h2')
for etiqueta in enlaces:
url_limpia = etiqueta.find('a').get('href')
dominio = f"{urlparse(url_limpia).scheme}://{urlparse(url_limpia).netloc}"
if dominio not in hallazgos:
print(f"[Subdominio Detectado]: {dominio}")
hallazgos.add(dominio)
except Exception as e:
print(f"Error en iteración {pag}: {e}")
return hallazgos
if __name__ == "__main__":
if len(sys.argv) == 3:
rastrear_bing(sys.argv[1], sys.argv[2])
else:
print("Uso: python script.py dominio.com 5")
4. Escaneo de Puertos y Servicios
Para determinar qué servicios están activos, se utiliza Nmap. Algunos comandos esenciales incluyen:
nmap -Pn [IP]: Escaneo sin ping previo (útil si hay firewalls).nmap -p 80,443 [IP]: Escaneo de puertos específicos.nmap -O [IP]: Detección del sistema operativo.nmap -sV [IP]: Identificación de versiones de servicios.
5. Motores de Búsqueda para Ciberseguridad
Existen plataformas especializadas en indexar dispositivos conectados a Internet (IoT, servidores, cámaras):
- Shodan: Permite buscar banners de servicios y vulnerabilidades específicas.
- Fofa: Motor de búsqueda de activos enfocado en la estructura de red.
- ZoomEye: Análisis de componentes de ciberespacio.
6. Google Dorking
El uso de operadores avanzados de búsqueda permite localizar archivos sensibles o paneles de administración expuestos:
site:target.com filetype:sql: Busca respaldos de bases de datos.inurl:admin.php: Localiza paneles de inicio de sesión.intitle:"index of": Encuentra directorios con listado de archivos habilitado.
7. Códigos de Estado HTTP
La interpretación de las respuestas del servidor es vital durante el escaneo de directorios:
- 200 OK: Solicitud exitosa.
- 301/302: Redirección temporal o permanente.
- 403 Forbidden: Acceso denegado (posible panel de control restringido).
- 404 Not Found: El recurso no existe.
- 500 Internal Server Error: Error en la lógica del servidor (potencial punto de inyección).
8. Descubrimiento de Hosts Activos
En redes locales o segmentos C, es necesario verificar qué máquinas están encendidas antes de profundizar en el escaneo.
Verificador de Disponibilidad ICMP (Scapy)
from scapy.all import IP, ICMP, sr1
import argparse
def verificar_host(ip_destino):
# Construcción de paquete ICMP Echo Request
paquete = IP(dst=ip_destino)/ICMP()/b'CheckActive'
respuesta = sr1(paquete, timeout=1, verbose=0)
if respuesta:
print(f"Host {ip_destino} está ONLINE")
else:
print(f"Host {ip_destino} no respondió")
def iniciar_proceso():
parser = argparse.ArgumentParser()
parser.add_argument("-t", "--target", required=True)
args = parser.parse_args()
if "-" in args.target:
# Lógica para rangos simples (ej: 192.168.1.1-10)
prefijo = ".".join(args.target.split('-')[0].split('.')[:-1])
inicio = int(args.target.split('-')[0].split('.')[-1])
fin = int(args.target.split('-')[1])
for i in range(inicio, fin + 1):
verificar_host(f"{prefijo}.{i}")
else:
verificar_host(args.target)
if __name__ == "__main__":
iniciar_proceso()
9. Técnicas Complementarias
- Fingerprinting: Identificar el CMS (WordPress, Drupal) y sus versiones para buscar exploits conocidos.
- Análisis de Robots.txt: Archivo que indica a los buscadores qué directorios no indexar, revelando a menudo rutas sensibles.
- Búsqueda en Sitios Paralelos: Identificar otros dominios alojados en la misma dirección IP (Reverse IP Lookup).