Shodan es el motor de búsqueda de dispositivos conectados a Internet. Indexa banners de servicios, versiones de software y metadatos de millones de hosts globalmente. Es la herramienta más potente de reconocimiento pasivo: no enviamos ningún paquete al objetivo.
# Instalar la CLI:
pip3 install shodan
# Autenticar con tu API key (requiere cuenta gratuita o de pago):
shodan init TU_API_KEY
# Ver información de tu cuenta:
shodan info
# Ayuda de comandos:
shodan --help
# Buscar por banner de servicio:
apache
nginx 1.18
IIS/10.0
# Buscar por país:
country:ES apache
country:US "webcam"
# Buscar por ciudad:
city:"Madrid" port:22
city:"Barcelona" product:MySQL
# Buscar por organización/ASN:
org:"Telefonica"
org:"Amazon" port:3389
# Buscar por rango de red/CIDR:
net:192.168.0.0/24
net:203.0.113.0/24
# Buscar por puerto específico:
port:8080 product:Tomcat
port:27017 # MongoDB expuesto
port:9200 # Elasticsearch expuesto
port:6379 # Redis sin autenticación
# CVE específica en producción:
vuln:CVE-2021-44228 # Log4Shell — servidores afectados en todo el mundo
vuln:CVE-2019-19781 # Citrix ADC (Shitrix)
vuln:CVE-2017-0144 # EternalBlue (MS17-010)
# Producto + versión:
product:OpenSSH version:7.4
product:"Apache httpd" version:2.4.49 # Apache Path Traversal CVE-2021-41773
# Sistemas de control industrial (ICS/SCADA):
product:Siemens
"Modbus" port:502
"SCADA" port:102
# Cámaras y dispositivos IoT:
"Server: IP Webcam Server"
"webcamXP"
product:"Hikvision IP Camera"
"GoAhead-Webs" port:80
# Paneles de administración expuestos:
http.title:"phpMyAdmin"
http.title:"Grafana"
http.title:"Kibana"
http.title:"Jenkins"
http.title:"Admin Panel"
# Certificados SSL de un dominio:
ssl:"objetivo.com"
ssl.cert.subject.cn:"*.objetivo.com"
# Búsqueda básica:
shodan search "apache 2.4.49"
# Contar resultados sin mostrarlos:
shodan count "port:27017 MongoDB"
# Buscar y mostrar solo IPs:
shodan search --fields ip_str "port:6379 -auth" | awk '{print $1}'
# Buscar hosts de una organización:
shodan search --fields ip_str,port,org "org:Telefonica"
# Consultar información de una IP:
shodan host 1.2.3.4
# Monitorización de alertas (plan pago):
shodan alert create "Mi empresa" 203.0.113.0/24
shodan alert list
import shodan
import json
API_KEY = "TU_API_KEY"
api = shodan.Shodan(API_KEY)
# Buscar servicios MongoDB expuestos en España:
try:
results = api.search('port:27017 country:ES')
print(f'Total resultados: {results["total"]}')
for r in results['matches']:
print(f"IP: {r['ip_str']}")
print(f"Puerto: {r['port']}")
print(f"Org: {r.get('org', 'N/A')}")
print(f"Versión: {r.get('version', 'N/A')}")
print("---")
except shodan.APIError as e:
print(f'Error: {e}')
# Obtener información completa de un host:
host = api.host("1.2.3.4")
print(json.dumps(host, indent=2, default=str))
# Paneles de login de VPN expuestos:
http.title:"Pulse Connect Secure"
http.title:"GlobalProtect"
http.title:"Cisco AnyConnect"
# Dispositivos de red con credenciales por defecto:
"default password" http.title:"Router"
product:"MikroTik" port:8291
# Bases de datos sin autenticación:
product:CouchDB port:5984
"Elasticsearch" port:9200 country:ES
# Servidores con versiones vulnerables antiguas:
product:"Apache httpd" version:"2.2"
product:OpenSSL version:1.0
# RDP expuesto:
port:3389 os:"Windows Server 2008"
# Panels de control industrial en España:
country:ES port:102 "Siemens"
| Objetivo | Filtro Shodan |
|---|---|
| MongoDB sin auth | port:27017 -"requires auth" |
| Redis sin auth | port:6379 "redis_version" -"requirepass" |
| Elasticsearch abierto | port:9200 json country:ES |
| Log4Shell vulnerable | vuln:CVE-2021-44228 |
| Cámaras IP | product:"Hikvision" port:80 |
| Jenkins sin auth | http.title:"Dashboard [Jenkins]" -"Authentication" |
| Grafana expuesto | http.title:"Grafana" country:ES |
| phpMyAdmin | http.title:"phpMyAdmin" country:ES |