Shodan es el motor de búsqueda más peligroso y fascinante de Internet. Mientras que Google rastrea páginas web buscando contenido, Shodan escanea puertos (Banner Grabbing) buscando dispositivos: servidores, webcams, sistemas de control industrial (SCADA), routers y bases de datos. Es la joya de la corona del Reconocimiento Pasivo: toda la información ya ha sido indexada por Shodan, por lo que tú nunca tocas la IP del objetivo (haciéndote invisible).
Aunque Shodan tiene interfaz web, los profesionales utilizan su CLI (Interfaz de Línea de Comandos) y su API para automatizar tareas y evadir las limitaciones visuales de la web.
# Instalación mediante Python:
pip3 install shodan
# Autenticación (Necesitas tu API Key de account.shodan.io):
shodan init TU_API_KEY_AQUI
# Verificar el estado de tu cuenta (Créditos de búsqueda y escaneo):
shodan info
Los operadores básicos permiten segmentar Internet por zonas geográficas o propiedades de red. Recuerda no dejar espacios después de los dos puntos (:).
# Buscar por ASN (Autonomous System Number - Identificador del proveedor):
asn:AS3352
# Rango de IPs (CIDR) - Ideal para auditar los activos de una empresa:
net:203.0.113.0/24
# Filtros geográficos combinados:
country:ES city:"Madrid" port:22
country:US org:"Amazon.com"
Una de las técnicas OSINT más potentes es el rastreo de Favicons. Shodan calcula un hash matemático (MurmurHash3) del icono de la pestaña de la web. Si un atacante de Phishing copia la web de un banco, a menudo copia el favicon. Buscando ese hash, puedes descubrir todas las webs de Phishing o paneles ocultos de un framework.
# Encontrar servidores Spring Boot expuestos por su favicon:
http.favicon.hash:116323821
# Buscar en el título o cuerpo del HTML:
http.title:"Dashboard [Jenkins]"
http.html:"defaced by"
# Buscar por el asunto o emisor del Certificado SSL:
ssl.cert.subject.cn:"*.empresa.com"
ssl.cert.issuer.cn:"Let's Encrypt"
Inteligencia de Amenazas te ha asignado una tarea crítica: Necesitamos cuantificar cuántos servidores Tomcat están vulnerables a Log4Shell (CVE-2021-44228) en los Estados Unidos (US). Construye el Shodan Dork exacto para obtener esta información.
>_ INICIAR RETO CTF 15Shodan cruza las versiones extraídas de los banners (ej. Apache 2.4.49) con la base de datos de CVEs (National Vulnerability Database). Esto permite encontrar objetivos explotables de forma instantánea.
# Buscar una vulnerabilidad específica (Log4Shell):
vuln:CVE-2021-44228
# Filtrar servidores que tienen CUALQUIER vulnerabilidad verificada:
has_vuln:True port:443 country:ES
# Buscar por producto y versión específica:
product:"OpenSSH" version:"7.4"
product:"Microsoft IIS" version:"10.0"
Trabajar mirando la pantalla del terminal no es escalable. Los profesionales de OSINT descargan los datos y los filtran en local para no consumir créditos de la API constantemente.
# 1. Descargar resultados a un archivo JSON comprimido (consume créditos de exportación):
shodan download servidores_ftp "port:21 Anonymous access allowed" --limit 1000
# 2. Parsear el archivo descargado para extraer solo IPs y puertos:
shodan parse --fields ip_str,port servidores_ftp.json.gz
# 3. Generar estadísticas (Facets) sin descargar los datos:
# ¿Cuáles son los 5 países con más bases de datos MongoDB abiertas?
shodan stats --facets country:5 "port:27017 -auth"
Los investigadores y el Blue Team despliegan "Honeypots" (sistemas falsos) para atrapar a los hackers. Shodan tiene un algoritmo de Machine Learning que calcula la probabilidad de que una IP sea una trampa.
# Evaluar la puntuación de Honeypot de una IP (1.0 = 100% Trampa, 0.0 = Real):
shodan honeyscore 1.2.3.4
Integrar Shodan en tus propios scripts de Python te permite automatizar la vigilancia del perímetro corporativo de forma diaria.
import shodan
import json
api = shodan.Shodan('TU_API_KEY')
try:
# Buscar cámaras Hikvision en Madrid
query = 'product:"Hikvision" city:"Madrid"'
resultados = api.search(query)
print(f"Dispositivos encontrados: {resultados['total']}")
for host in resultados['matches']:
print(f"IP: {host['ip_str']} | ISP: {host.get('isp', 'N/A')}")
except shodan.APIError as e:
print(f"Error en la API: {e}")
| Objetivo (Target) | Shodan Dork |
|---|---|
| RDP (Escritorios Remotos) Expuestos | port:3389 has_screenshot:true |
| Bases de Datos MongoDB Abiertas | port:27017 "MongoDB Server Information" -"auth" |
| Cámaras Web IP Sin Contraseña | "Server: SQ-WEBCAM" o "GoAhead-Webs" |
| Paneles Solares / Sistemas SCADA | port:502 "Modbus" |
| Paneles de Jenkins vulnerables | http.title:"Dashboard [Jenkins]" -"Authentication" |