[ARTÍCULO] CÓMO DESCUBRÍ UN PHISING EN UN SERVIDOR DE DISCORD
ARTÍCULO

Cómo descubrí un phising en un servidor de Discord.

Un falso "ascenso a staff" en Discord escondía un script que rastrea el dispositivo, pide la ubicación y toma fotos con la cámara sin que la víctima lo vea. Analizo cómo funciona y quién estaba detrás de la infraestructura.

por KeltichCibSec
Publicado el

Buenas a todos una vez más mis queridos hackers! En el caso de hoy hablaremos de un caso de phising que detecte en un servidor de Discord de un personaje importante. Tras su detección se informo al staff pertinente para que tomará acciones por su cuenta, por motivos de privacidad no se mencionara directamente el nombre de dicho personaje.

Aviso previo

Las herramientas y técnicas mencionadas en este artículo no deben utilizarse nunca fuera de entornos controlados y autorizados, como laboratorios propios, máquinas virtuales aisladas o sistemas sobre los que se disponga de permiso expreso por escrito.

Interactuar con infraestructura de un atacante sin las debidas precauciones puede exponer tu equipo a malware, alertar al atacante de que su campaña ha sido detectada, contaminar evidencias útiles para una investigación y acarrear consecuencias legales, aunque la intención sea buena.

Si recibes un mensaje sospechoso: no hagas clic, no descargues adjuntos y no respondas. Repórtalo a los moderadores o al canal correspondiente y, si lo necesitas, contacta con INCIBE en el 017.

Todos los indicadores de este artículo están defanged (hxxps, [.]) para evitar clics accidentales.

// 01

Ficha del caso

Campo Detalle
Fecha del análisis 29 de agosto de 2026
Autor KeltichCibSec
Enlace analizado hxxps://best-ai-tool[.]duckdns[.]org/track/ZKaxhX
Vector Mensaje enviado a través de un bot de Discord (La Cabra 2.0)
Público objetivo Miembros de un servidor de Discord
Estado Análisis y recopilación de evidencias
// 02

1. Resumen

El enlace se presenta como una supuesta herramienta de inteligencia artificial, pero en realidad no muestra nada útil: carga una pantalla de "Loading", incrusta un vídeo de TikTok y, en segundo plano, ejecuta un script de JavaScript alojado en el propio dominio del atacante.

Ese script:

Lo especialmente grave es el contexto: la campaña se dirige a un servidor de Discord con usuarios de edades muy variadas, incluidos menores.

El gancho: un falso puesto de staff

Los atacantes aprovecharon que el servidor había abierto recientemente postulaciones para formar parte del staff. El mensaje ofrecía a los usuarios —sobre todo a los más jóvenes— la última plaza de "vigilante" que supuestamente quedaba libre, con la condición de rellenar un formulario y "verificar la cuenta por seguridad", aceptando todo lo que pidiera la web.

Para hacer llegar el mensaje utilizaron un fallo en el código que fue reportado previamente a los developers del bot La Cabra 2.0, que permite enviar avisos (warns) a cualquier usuario con el que se comparta servidor. El resultado es un mensaje que parece una notificación oficial de moderación:

image
image

Mensaje recibido. Los nombres de usuario y del servidor se han ocultado.

La instrucción de "aceptar todo lo que salga" no es casual: es exactamente lo que el script necesita para obtener la ubicación y activar la cámara.

En pocas palabras: es un enlace que rastrea al visitante con un comportamiento muy invasivo. No hay ningún motivo para considerarlo fiable.


// 03

2. Qué contiene la página

La página se compone de dos elementos principales.

Un iframe con contenido de TikTok, que sirve de distracción:

text
hxxps://vm.tiktok[.]com/ZN8NoaNfA/

Un script propio del atacante:

text
hxxps://best-ai-tool[.]duckdns[.]org/script.js

El script recibe dos parámetros desde la página:

Dato Valor Función
trackingId ZKaxhX Identifica el enlace o la víctima concreta
serverUrl hxxps://best-ai-tool[.]duckdns[.]org Servidor al que se envían los datos

Durante la revisión, la página se quedó indefinidamente en "Loading". Sin embargo, el script pudo descargarse y analizarse de forma estática, lo que permite ver con claridad qué información intenta recopilar y a dónde la envía.


// 04

3. Información que recopila

Algunos datos se obtienen directamente al cargar la página; otros dependen de que el navegador los exponga o de que el usuario conceda permisos.

Categoría Datos concretos
Red Dirección IP pública
Navegador Navegador y sistema operativo (navigator.userAgent)
Preferencias Idioma y zona horaria
Pantalla Resolución
Dispositivo Tipo aproximado: iPhone, Android, Windows, Mac, Linux…
Batería Porcentaje y si está cargando
Hardware Núcleos de CPU y memoria aproximada
Almacenamiento web Uso y cuota estimada
Conexión Tipo de red, velocidad y latencia
Permisos Estado de los permisos de cámara y ubicación
Ubicación Latitud, longitud, precisión y enlace a Google Maps (con permiso)
Cámara Hasta tres fotografías (con permiso)

Por separado, la mayoría de estos datos no son secretos. El problema es que el script los reúne y los asocia a un identificador de seguimiento concreto, construyendo un perfil de cada víctima.


// 05

4. Cómo funciona el script, paso a paso

4.1 Identifica la visita

Busca en la página una etiqueta <script> que contenga el identificador de seguimiento y la dirección del servidor. Si falta alguno de los dos, deja de ejecutarse. El identificador ZKaxhX permite al servidor relacionar todas las peticiones con el mismo enlace o víctima.

4.2 Obtiene la IP pública

Consulta un servicio externo legítimo para conocer la IP pública del visitante:

text
hxxps://api.ipify[.]org/?format=json

La IP no revela una dirección exacta, pero sí el proveedor de Internet y una ubicación aproximada.

4.3 Recopila datos del navegador y del dispositivo

Guarda el user agent, el idioma, la resolución y la zona horaria, e intenta clasificar el dispositivo (iPhone, Android, Windows, Mac o Linux). Cuando el navegador lo permite, consulta además la batería, la memoria, los núcleos de CPU, el almacenamiento web y datos de la conexión.

Con todo ello se genera una huella digital del dispositivo (fingerprint) que, sin identificar por sí sola a una persona, permite reconocerla o relacionar distintas visitas.

4.4 Solicita la ubicación

Comprueba primero el estado del permiso de geolocalización y después intenta obtener la posición:

javascript
navigator.geolocation.getCurrentPosition(…)

Si el usuario acepta, guarda:

Si lo rechaza, registra la denegación y continúa con el resto del proceso.

4.5 Envía los datos al servidor

Todo lo recopilado (IP, datos técnicos, red, permisos y ubicación si se obtuvo) se envía mediante una petición POST a:

text
hxxps://best-ai-tool[.]duckdns[.]org/data?trackingId=ZKaxhX

4.6 Solicita acceso a la cámara

javascript
navigator.mediaDevices.getUserMedia({ video: true })

El navegador muestra un aviso y el usuario debe aceptarlo expresamente. Si lo hace, el script crea un elemento de vídeo oculto y conecta la cámara a él, de modo que la víctima no ve nada en pantalla.

4.7 Toma y envía tres fotografías

Con la cámara activa, el script dibuja el fotograma en un canvas, lo convierte a JPEG codificado en Base64 y lo envía a:

text
hxxps://best-ai-tool[.]duckdns[.]org/photo?trackingId=ZKaxhX
Momento aproximado Acción
1 segundo Captura y envía la primera foto
2 segundos Captura y envía la segunda foto
3 segundos Captura y envía la tercera foto

Formato del envío:

json
{ "imageData": "data:image/jpeg;base64,..." }

Al terminar, apaga la cámara y elimina los elementos temporales de la página. Esto no borra las imágenes, que ya están en el servidor del atacante.

4.8 Informa del estado final de los permisos

Por último, envía de nuevo una petición a /data indicando qué permisos se concedieron:

json
{ "Permissions": { "Camera": "Granted", "Location": "Denied" } }

Los errores se silencian con bloques del tipo .catch(() => {}), de modo que si alguna petición falla, la víctima no recibe ningún aviso.


// 06

5. A dónde va la información

Destino Uso Información
hxxps://api.ipify[.]org/?format=json Consultar la IP pública Devuelve la IP del visitante
hxxps://best-ai-tool[.]duckdns[.]org/data?trackingId=ZKaxhX Recibir datos y permisos Metadatos del navegador y dispositivo, IP, ubicación y estado de permisos
hxxps://best-ai-tool[.]duckdns[.]org/photo?trackingId=ZKaxhX Recibir imágenes Hasta tres fotografías de la cámara

Aunque el vídeo de TikTok se muestra en la página, los datos no se envían a TikTok, sino al dominio del atacante.


// 07

6. Qué no se observó

En el código no aparecen funciones para robar contraseñas, leer archivos personales o acceder a otras pestañas, ni se detectó la descarga de ningún ejecutable.

Eso no convierte el sitio en seguro. El script recopila una gran cantidad de información y, con los permisos adecuados, obtiene la ubicación exacta y fotografías de la víctima. Además, nada indica quién administra el servidor ni cuánto tiempo conserva los datos.


// 08

7. Reconocimiento pasivo de la infraestructura

7.1 Panel de Coolify expuesto

Durante el reconocimiento pasivo del dominio se observó que el puerto 8000 redirige a una ruta /login con la interfaz de Coolify, con campos de correo y contraseña y el aviso de que el registro está deshabilitado.

image
image

No se introdujeron credenciales ni se intentó acceder al panel.

Coolify es una plataforma PaaS autogestionada (una alternativa self-hosted a servicios como Heroku o Vercel) que permite desplegar aplicaciones, bases de datos, copias de seguridad y servicios con proxy inverso. Encaja perfectamente con una campaña cuyo objetivo es almacenar datos de víctimas.

7.2 Servicios y ubicación del host

Consultando la IP asociada al dominio en Censys (un motor de búsqueda de dispositivos expuestos similar a Shodan):

image
image
Campo Valor
IP 185.226.93[.]154
Sistema operativo Canonical Linux (Ubuntu)
ASN AS205196 – BIG CORE LLC
Ubicación Estambul, Turquía (VPS)
Puertos abiertos 22/SSH, 80/HTTP, 443/HTTPS, 2222/SSH, 3128/HTTP, 6001/HTTP, 6002/HTTP, 8000/HTTP

La misma IP resuelve otros subdominios que podrían formar parte de la misma infraestructura:

text
best-ai-tool[.]duckdns[.]org edit-with-ai-bot[.]duckdns[.]org just-for-fun[.]duckdns[.]org kaliboy002[.]duckdns[.]org myapijs[.]duckdns[.]org turkey[.]neverlandd[.]ir

7.3 Los puertos coinciden con la documentación de Coolify

Según la documentación oficial de Coolify, una instalación self-hosted requiere exactamente estos puertos:

Puerto Uso según Coolify
8000 Acceso HTTP al dashboard
6001 Comunicaciones en tiempo real
6002 Acceso por terminal
22 SSH
80 Generación de certificados SSL vía proxy inverso
443 Tráfico HTTPS
image
image

La propia documentación recomienda cerrar 8000, 6001 y 6002 una vez que el panel se sirve a través de un dominio personalizado. Que sigan abiertos sugiere una instalación rápida y poco cuidada, típica de infraestructura desplegada para una campaña concreta.

Nota: el uso de DuckDNS no demuestra por sí solo que un sitio sea malicioso; es un servicio legítimo de DNS dinámico. La sospecha surge del conjunto: seguimiento individual, recopilación masiva de datos, solicitud de ubicación y captura de cámara en una página que no explica lo que hace.


// 09

8. Evaluación del riesgo

Aspecto Nivel de riesgo Motivo
Seguimiento del visitante 🔴 Alto Usa un ID específico para asociar cada visita
Recopilación técnica 🟠 Medio-alto Reúne numerosos datos del navegador, dispositivo y conexión
Geolocalización 🔴 Alto Obtiene coordenadas precisas si se autoriza
Acceso a la cámara 🟣 Crítico Toma y envía tres fotos sin mostrar nada en pantalla
Robo de contraseñas ⚪ No observado No hay funciones explícitas para ello en el script
Transparencia 🔴 Muy baja Muestra "Loading" y oculta el vídeo de la cámara

El agravante principal es el público objetivo: fotografías y ubicación exacta de menores en manos de un desconocido.


// 10

9. Conclusión

El enlace carga contenido externo como distracción y ejecuta un script de seguimiento que consulta la IP pública, recopila datos técnicos del dispositivo y, si la víctima concede permisos, obtiene su ubicación exacta y tres fotografías. Los metadatos se envían a /data y las imágenes a /photo, en un servidor autogestionado con Coolify alojado en un VPS de Turquía.

Aunque no se observó robo de contraseñas ni de archivos, el comportamiento es demasiado invasivo para considerarlo legítimo. El enlace debe tratarse como malicioso.


// 11

10. Recomendaciones

Si has abierto el enlace:

Si eres moderador o administrador de un servidor de Discord:

Si hay menores afectados:


// 12

Indicadores de compromiso (IOCs)

text
# Dominios best-ai-tool[.]duckdns[.]org edit-with-ai-bot[.]duckdns[.]org just-for-fun[.]duckdns[.]org kaliboy002[.]duckdns[.]org myapijs[.]duckdns[.]org turkey[.]neverlandd[.]ir # IP 185.226.93[.]154 (AS205196 – BIG CORE LLC, Estambul, TR) # URLs hxxps://best-ai-tool[.]duckdns[.]org/track/ZKaxhX hxxps://best-ai-tool[.]duckdns[.]org/script.js hxxps://best-ai-tool[.]duckdns[.]org/data?trackingId=ZKaxhX hxxps://best-ai-tool[.]duckdns[.]org/photo?trackingId=ZKaxhX hxxp://best-ai-tool[.]duckdns[.]org:8000/login # Tracking ID ZKaxhX
// 13

Referencias

  1. hxxps://best-ai-tool[.]duckdns[.]org/track/ZKaxhX — Página analizada
  2. hxxps://best-ai-tool[.]duckdns[.]org/script.js — Script JavaScript analizado
  3. hxxps://api.ipify[.]org/?format=json — Servicio utilizado para consultar la IP pública
  4. Coolify – Firewall (documentación oficial)

Análisis realizado por KeltichCibSec con fines educativos y de concienciación. Todas las pruebas se hicieron de forma pasiva y en un entorno controlado.

← Volver a Artículos