· Manuel López Pérez · writeups  · 6 min read

CyberH2O: Reto 1 – OSINT en Infraestructuras Críticas

Write-up del primer reto del cyberchallenge de CyberH2O, centrado en OSINT para localizar un PLC expuesto en un municipio específico.

Write-up del primer reto del cyberchallenge de CyberH2O, centrado en OSINT para localizar un PLC expuesto en un municipio específico.

[!IMPORTANT] 🏆 ¡El equipo Ironhackers resultó ganador del CyberH2O Cyberchallenge! 🏆

Hace unas semanas, el equipo Ironhackers tuvo la oportunidad de participar en una iniciativa CTF: el cyberchallenge de CyberH2O.

Esta competición ha sido impulsada por la Cátedra de Digitalización y Ciberseguridad Hídrica de INCIBE y la Universitat de Girona. Es de agradecer que hayan diseñado escenarios tan reales y técnicos, alejándose de los retos abstractos para meternos en el fango de la gestión hídrica real.

El formato también fue distinto: Fueron 3 grandes retos distribuidos a lo largo de varias semanas.

En esta primera entrega os traemos el writeup del primer reto, centrado puramente en OSINT. Desde localizar activos en Shodan hasta busquedas de metadatos, así fue como logramos obtener las primeras flags.


Reto 1

Enunciado

Encuentra el serial number de un PLC expuesto a Internet en el municipio de Centelles. HACK{SN}

Solución

Shodan es un motor de búsqueda para dispositivos conectados a Internet (servidores, cámaras, PLCs, routers, SCADA, etc.). Indexa banners y metadatos que los servicios exponen (protocolos, versiones, textos de identificación), lo que permite localizar activos y extraer información que a menudo no requiere interacción activa ni explotación.

Primero comprobamos si hay dispositivos PLC en el municipio y, si encontramos un banner con el campo Serial number (o similar).

El PLC publica metadatos para diagnóstico/identificación; Shodan indexa esos banners.

Procedimiento

  1. Hacemos la búsqueda en Shodan: city:"Centelles" PLC.
  2. Abrimos el resultado relevante y buscamos en el banner la línea Serial number of module.
  3. Construimos la flag con el serial encontrado: HACK{} y la enviamos.

Shodan búsqueda PLC Centelles


Reto 2: Geolocalización de infraestructuras

Enunciado

El reto consiste en obtener las coordenadas GPS de la mayor planta potabilizadora en Cataluña. La flag debe seguir el formato HACK{lat,lon}, por ejemplo: HACK{42.6669506,1.3876056}.

Solución

Para resolverlo, realizamos un reconocimiento abierto (OSINT). La información sobre infraestructuras públicas suele estar documentada en noticias y webs oficiales. La estrategia se basó en localizar la planta mediante búsquedas web (Google y medios de comunicación) y posteriormente extraer sus coordenadas exactas utilizando Google Maps, que proporciona estos datos fácilmente sin necesidad de herramientas especiales.

Pasos

  1. Buscamos en Google la frase “mayor planta potabilizadora en Cataluña” y revisamos los artículos para confirmar el nombre y ubicación. Las fuentes indicaron que se trataba de la ETAP del Ter.

  2. Abrimos la ubicación en Google Maps.

  3. Extraemos las coordenadas directamente de la URL de Google Maps, donde aparecen indicadas tras el símbolo @ en formato (@lat,lon).

  4. Formateamos la flag con las coordenadas exactas con una precisión de 7 decimales, tal y como indicaba el ejemplo del enunciado (HACK{lat,lon}).

Tras ciertos intentos, ya que tuvimos algunos problemas iniciales con este reto, conseguimos la flag correcta.


Reto 3: Rastreo documental y Hash MD5

Enunciado

El objetivo es obtener el Hash MD5 de un importante PDF español que habla de IoT y la relación de la calidad del agua. El formato de la flag es HACK{md5hash}.

Solución

Realizamos OSINT documental para localizar el archivo. La técnica consiste en usar operadores de búsqueda en Google (filetype: + palabras clave) para filtrar resultados por tipo de fichero. Esto es muy útil para localizar manuales, informes y papers en PDF, DOCX, etc., sin tener que navegar por múltiples páginas. Una vez localizado, descargamos el documento y calculamos su hash MD5 localmente.

Pasos

  1. Realizamos la búsqueda en Google utilizando el dork:

filetype:pdf IoT calidad agua

  1. Abrimos y descargamos el PDF relevante en esta materia, titulado: “Sistema IoT para el análisis de calidad de aguas”.

  2. Calculamos el hash MD5 del fichero descargado. Podemos hacerlo con herramientas web o directamente con comandos de consola como se muestra a continuación:

  • PowerShell: Get-FileHash .\archivo.pdf -Algorithm MD5.
  • Linux/macOS: md5sum archivo.pdf.

  1. Formateamos la flag con el MD5 obtenido:

HACK{8c695c366051a38f7f706b3a13dd6d25}.


Reto 4: Servidor de Telecontrol RDP

Enunciado

Encuentra en España un servidor de Telecontrol con el escritorio remoto habilitado. La flag sigue el formato HACK{NetBIOS_Computer_Name}.

Solución

Realizamos reconocimiento pasivo con Shodan: filtramos por puerto RDP y por país junto a la palabra clave “telecontrol” para localizar hosts que publiquen metadatos (certificados, NTLM banner) con información de NetBIOS. Si el banner incluye NetBIOS Computer Name o Target Name, esa cadena es la que forma la flag.

Pasos

  1. Hacemos la búsqueda en Shodan: port:3389 country:ES telecontrol.

  2. Revisamos la lista de resultados y abrimos los registros relevantes.

  3. En el banner o certificado RDP buscamos la línea NetBIOS Computer Name.

  4. Construimos la flag con ese valor: HACK{PC-TELECONTROL}.


Reto 5: Arqueología Web y Wayback Machine

Enunciado

El administrador ocultó una bandera en la página de https://cyberh2o.es/2024-protegint-el-flux-vital-del-futur/.

Solución

Para resolverlo, buscamos versiones archivadas y/o el código fuente del artículo y rastreamos variables o atributos HTML/JS que contengan la flag oculta. Los administradores a veces esconden pistas en el HTML o en versiones antiguas de la página (Wayback Machine). El contenido archivado o el propio view-source suelen ser suficiente para recuperar variables como data-flag, data-… o comentarios que contienen la flag sin interactuar con el servidor.

Pasos

  1. Abrimos la URL objetivo y el Inspector o el código fuente directamente (con Ctrl+U). Buscamos términos como flag, data-flag o data-…. Observamos el resultado: data-flag="__deleted__", un marcador que indica que ha sido borrado.

  1. Vamos a Wayback Machine (archive.org/web) y buscamos snapshots de la misma URL (https://cyberh2o.es/2024-protegint-el-flux-vital-del-futur/).

  2. Abrimos el snapshot anterior más relevante y revisamos el código fuente archivado (Ctrl+U o Inspector).

  1. Extraemos el valor original del atributo (o la variable) tal como aparece en el snapshot que contiene la flag.

Reto 6: Secretos en registros DNS

Enunciado

El administrador de red ha dejado un secreto en el dominio donde se aloja la web. El formato de la flag es Hack{xxxx}.

Solución

Para este reto hicimos un reconocimiento pasivo sobre los DNS del dominio. La técnica consiste en consultar los registros TXT del subdominio o host, ya que los administradores a veces dejan información en estos registros (comentarios, claves públicas, metadatos o incluso flags de CTF). Consultar los registros DNS es una técnica pasiva y segura que no modifica nada en el objetivo.

Pasos

  1. Consultamos los registros DNS de tipo TXT del subdominio hackaton.cyberh2o.es. Podemos hacerlo mediante la línea de comandos:
nslookup -type=TXT hackaton.cyberh2o.es

También es posible utilizar herramientas web de DNS lookup o DNS checker para obtener el mismo resultado.

  1. Revisamos la salida y comprobamos que el valor del registro TXT contiene la cadena con la flag.

  2. Formateamos y enviamos la flag según el patrón del CTF:

HACK{lGLcxHxLKlWlkza6z-7bOw}.


Reto 7: Esteganografía y Metadatos

Enunciado

Un hacker ha manipulado una imagen en el blog de https://cyberh2o.es/. La flag tiene el formato HACK{xxxxxxx}.

Solución

Para resolver este reto, buscamos en la API pública de WordPress los recursos multimedia, descargamos la imagen manipulada y extrajimos los metadatos (XMP/Exif) que contenían una cadena en Base64. Al decodificar dicha cadena, obtuvimos la flag.

WordPress expone /wp-json/wp/v2/media públicamente y, a menudo, los atacantes o creadores de retos esconden datos en los metadatos de las imágenes. Consultar la API y leer estos metadatos es una técnica pasiva suficiente para recuperar la información.

Pasos

  1. Listamos los medios vía API REST de WP. Detectamos que las dos últimas imágenes tienen el mismo nombre base: “datachallenge.jpg” (del 27/10) y “datachallenge-1.jpg” (del 28/10). El nombre “datachallenge-1.jpg” sugiere que se trata de una modificación de la imagen original.
  2. Descargamos la imagen identificada (datachallenge-1.jpg) con wget.
wget https://cyberh2o.es/wp-content/uploads/2024/10/datachallenge-1.jpg -O datachallenge-1.jpg
  1. Inspeccionamos los metadatos con exiftool buscando campos que contengan información útil.
exiftool datachallenge-1.jpg
  1. Encontramos una cadena Base64 en los metadatos, la decodificamos y obtenemos la flag.
echo "ZmxhZz1IQUNLe0FRc0p3T0NfYnJCSWRNRTlHajFjZGd9Cg==" | base64 -d

Flag: HACK{AQsJwOC_brBIdME9Gj1cdg}

Back to Blog

Related Posts

View All Posts »