Escaneando el abismo: detección masiva de fallos con Shodan e IPs públicas

 

Shodan es un motor de búsqueda especializado que permite encontrar dispositivos conectados a Internet, como servidores, cámaras IP, routers, sistemas SCADA, IoT, y más. A diferencia de Google, que indexa sitios web, Shodan indexa información de los servicios expuestos (banners) y puede mostrar:

  • Puertos abiertos

  • Versiones de software

  • Localización geográfica

  • Información del sistema operativo

  • Posibles vulnerabilidades (si están asociadas)

Es ampliamente utilizado en ciberseguridad, auditorías y reconocimiento avanzado para detectar configuraciones inseguras o dispositivos expuestos.

Con su versión gratuita, podemos hacer numerosas busquedas de equipos vulnerables, camaras expuestas, servidores mal configurados, etc.

Aunque con esta versión no podemos usar la busqueda con los "Vulnerability search filter" (solo disponible con la versión de pago) que nos permite hacer busquedas especificas de vulnerabilidades de una forma más completa y tirando a tiro fijo.. pero esto lo vamos a solucionar..

Os voy a explicar como hacer una busqueda de equipos vulnerables con Shodan y sacarles a todos sus CVEs gratis, si, sin pagar un duro..

Lo primero es hacer una busqueda de equipos con algun tipo de vulnerabilidad, en este ejemplo he buscado equipos con una version de Apache vulnerable, para ello he usardo el dork:

product:"Apache httpd" version:"2.2.8"




Esta versión de apache tiene las siguientes vulnerabilidades:

CVE-2012-3499Cross-Site Scripting (XSS) en múltiples módulos
  • Vulnerabilidades XSS en los módulos mod_imagemap, mod_info y mod_status permiten a atacantes remotos inyectar scripts maliciosos a través de nombres de host y URIs manipulados.
CVE-2012-4558XSS en mod_proxy_balancer
  • El manejador de balanceo de carga (mod_proxy_balancer) es susceptible a ataques XSS, lo que permite a usuarios maliciosos inyectar scripts arbitrarios en la interfaz de gestión.
CVE-2010-0425Condición de carrera en mod_isapi (Windows)
  • En sistemas Windows, el módulo mod_isapi no garantiza que el procesamiento de la solicitud se complete antes de descargar el módulo ISAPI, lo que podría permitir la ejecución de código arbitrario.
CVE-2011-4415Desbordamiento de memoria en ap_pregsub
  • El uso del módulo mod_setenvif sin restricciones adecuadas puede permitir a usuarios locales causar un desbordamiento de memoria, potencialmente provocando una denegación de servicio.
CVE-2007-6388XSS en mod_status

  • Una vulnerabilidad XSS en el módulo mod_status permite a atacantes inyectar scripts maliciosos a través del parámetro de actualización (refresh) en las páginas de estado.
CVE-2007-5000XSS en mod_imagemap
  • El módulo mod_imagemap es vulnerable a ataques XSS cuando se accede a archivos de mapas de imagen públicos, permitiendo la inyección de código malicioso.

Una vez que tengamos los resultados de los equipos vulnerables, le damos al botón de Download Results como os indiqué en la imagen de antes, lo cual nos descargará los resultados en un archivo .gz lo descomprimimos y obtendremos un archivo .json.


¿Que tenemos en ese archivo .json?

!Muchos datos de los equipos vulnerables a esa versión de apache!

Vamos a extraer lo que más nos interesa del archivo, las direcciones IP. Lo cual el programa Cyberchef de nuestro Kali Linux es perfecto para ello.

Abrimos Cyberchef y en el nuestro archivo json, luego a la izquierda le damos a Extractors y aplicamos una extracción de las direcciones IP.

 



Luego, le damos a descargar los resultados, que no son mas que un fichero de direcciones IP vulnerables.

Lo renombramos a lista.txt

Ahora entra en juego nuestra pequeña sorpresa.. https://internetdb.shodan.io/
Esta web de la propia Shodan hace una consultas a Shodan para una IP y recupera una lista de vulnerabilidades conocidas (CVEs) asociadas con ella, si existen.

He creado un pequeño script en Python que recorerá nuestro fichero lista.txt, llamará a la URL y nos meterá en un fichero llamado vulns.txt las IPs con sus CVE correspondientes.
Lo teneis aquí:

import requests
import json

def obtener_vulnerabilidades(ip):
   url = f"https://internetdb.shodan.io/{ip}"
   try:
       respuesta = requests.get(url, timeout=10)
       if respuesta.status_code == 200:
           datos = respuesta.json()
           if 'vulns' in datos and datos['vulns']:
               return datos['vulns']
   except requests.RequestException as e:
       print(f"Error al consultar {ip}: {e}")
   return []

def procesar_ips(archivo_entrada, archivo_salida):
   with open(archivo_entrada, "r") as f:
       ips = [line.strip() for line in f if line.strip()]
    
   with open(archivo_salida, "w") as f:
       for ip in ips:
           vulns = obtener_vulnerabilidades(ip)
           if vulns:
               f.write(f"{ip}: {', '.join(vulns)}\n")
               print(f"{ip} tiene vulnerabilidades: {', '.join(vulns)}")

if __name__ == "__main__":
   procesar_ips("lista.txt", "vulns.txt")



Luego lo ejecutamos indicandole el fichero lista.txt:
$ python3 vulns.py lista.txt


 













!Ya tenemos un archivo resultante con los equipos vulnerables y sus correspondientes CVEs!

!Saludos!

Comentarios

Entradas populares de este blog

Protección en el protocolo SMB

No useis direcciones IP en Windows. !Usad nombres de red!

Uso de múltipes proveedores de ciberseguridad e identidad