Hacking de Infraestructura: Protocolo DNS I

En esta entrega vamos a hablar del Sistema de Nombres de Dominio, exploraremos en qué consiste este protocolo, enumeraremos posibles vulnerabilidades y mostraremos las herramientas con las que pueden ser explotadas.

El servicio DNS sirve para traducir los nombres de dominio en direcciones IP. Corre en el puerto 53. Veamos un ejemplo simple para entender todos los roles implicados en la comunicación jerárquica DNS:

Hacking de Infraestructura: Protocolo DNS I

Queremos conectarnos a www.google.com. Como esta dirección no está almacenada en nuestra Caché DNS, le preguntamos al Resolver, que es un servidor DNS de nuestro Internet Service Provider (ISP).

El Resolver comprueba si tiene www.google.com en su caché. No lo tiene, por lo que pregunta al Root Server. Los Root Server son 13 y están en la raíz del sistema jerárquico DNS:

 

El Root Server ve que la petición es a un dominio .COM, por lo que redirige la petición a un TLD Server

Un TLD Server almacena la información de dominios de nivel superior como .COM, .NET, .ORG, etc. Redirige la petición al Authority Name Server que conoce la información sobre el dominio google.com

Finalmente, el Authority Name Server de google.com recibe la petición y devuelve la dirección IP perteneciente al subdominio www.google.com

Tanto nuestra caché DNS como la del servidor DNS del ISP se actualizan, de forma que la próxima vez que queramos acceder a www.google.com no hará falta pedir la IP (mientras dure en caché).

DNS en Nmap

Normalmente el protocolo DNS normalmente solo usa UDP, sin embargo usa TCP en los casos en los que la respuesta es mayor de 512 bytes. Y la respuesta es mayor de 512 bytes cuando la transferencia de zona DNS está activada.

Las transferencias de zona son actos de replicación de bases de datos entre servidores DNS relacionados. Normalmente cuando hay un cambio en un archivo DNS (por ejemplo, un dominio cambia de IP) se realiza el cambio en el servidor DNS primario, y después se replica el cambio a los servidores secundarios.

Para ello se utiliza la transferencia de zona. Sin embargo, si está mal configurada, no solo los servidores DNS secundarios podrán hacer una réplica del archivo, sino cualquiera que lo pida.

El fin de realizar una transferencia de zona es obtener los distintos dominios y subdominios que haya en el servidor para recopilar información.

Encontrar por tanto en nmap que el DNS está utilizando TCP es una clara señal de que debemos intentar hacer una transferencia de zona:

 

En este otro ejemplo podemos ver que nos muestra la version de DNS de microsoft, buscando en google encontramos que se asocia a Windows Server 2008 R2 SP1

Siempre hay que fijarse en posibles subdominios que encontremos por cualquier lado expuestos, por ejemplo en esta máquina podemos encontrar muchos subdominios en la información de nmap del puerto 8080

Para hacer una transferencia de zona podemos utilizar la herramienta dig, pero primero vamos a intentar sacar más información con otras herramientas:

NSLookup

En primer lugar indicamos el servidor víctima sobre el que vamos a operar:

A continuación podemos hacer una petición a localhost (127.0.0.1) para ver si hay suerte y la respuesta expone algún hostname (no es el caso):

A continuación probamos con la IP del servidor:

Los reverse lookups en este caso están desactivados, por lo que no podemos obtener información de aquí.

Por último podemos comprobar el nombre de dominio, como en el nmap aparece en HTTP Title HTB Bank, quizá bank.htb responda algo:

Efectivamente responde.

En este otro ejemplo, al comprobar el nombre de dominio revela una dirección IPv6, que podemos utilizar para realizar un nmap con esa dirección y ver si obtenemos algún puerto distinto.

A continuación podemos probar con otra herramienta, dnsrecon, para hacer fuerza bruta de reverse lookups en un rango:

DNSRecon

Hay que probar en varios rangos, como 127.0.0.0/24, 127.0.1.0/24 y  10.10.10.0/24, porque muchos archivos de host incluyen estos rangos. En esta ocasión no ha habido suerte.

Podríamos hacerlo de una forma más exhaustiva con un pequeño script como este que dejaríamos corriendo:

Dig - Transferencias de Zona

A continuación, vamos a intentar hacer una transferencia de zona, para ello utilizamos el flag axfr de la herramienta dig:

No hemos obtenido nada, por tanto las transferencias de zona no están activadas para la zona root. Sin embargo, probemos lo mismo pero indicando el dominio que descubrimos anteriormente:

Ahora si, hemos podido realizar una transferencia de zona y obtener los subdominios chris.bank.htb, ns.bank.htb, y www.bank.htb

Lo que debemos hacer es añadir estos dominios a nuestro archivo /etc/ hosts, para incluirlos en nuestro caché dns indicando que corresponden a la IP 10.10.10.29.

Hay veces que al indicar un subdominio distinto el servidor nos muestra otra cosa en la web, como vimos en el CTF de juego de tronos.

Otra opción es, ya que la máquina tiene DNS, podemos añadir la linea «nameserver 10.10.10.29» a nuestro archivo /etc/ resolv. conf para añadir la máquina como nuestro DNS al que consultar.

Exportar zona DNS con powershell

Si estamos en una máquina windows y queremos exportar la zona DNS, podemos hacerlo con powershell de la siguiente manera:

El archivo resultante con la información se encuentra en C:\Windows\system32\dns:

Espiar el tráfico del puerto 53 UDP

Si hay una aplicación que sabemos que envía tráfico a un servidor DNS, podemos espiar el tráfico con tcpdump:

Servidor DNS en Active Directory

A continuación vamos a ver cómo podemos aprovecharnos de un servidor DNS en un Active Directory. Para ello utilizaremos el programa https://github.com/GhostPack/Seatbelt

Con esta herramienta descubrimos el ssid de DNS Admin:

Si nos fijamos, el DNS no acaba en 500 algo, eso quiere decir que no es algo por defecto, como todos los usuarios que se ven encima, así que es algo que debemos investigar.

Vamos a hacer queries mediante rpcclient:

Query para mostrar los miembros de un grupo:

El usuario 0x451 es el miembro del grupo Contractors, que es el grupo de los DNS Admins.

Si obtenemos las credenciales de este usuario y conseguimos una shell, podemos ejecutar código en el Domain Controller escalando privilegios de esta forma:

https://medium.com/techzap/dns-admin-privesc-in-active-directory-ad-windows-ecc7ed5a21a2

Basicamente creas un dll malicioso y ejecutas el programa dnscmd.exe

Si con megabank.local no funciona puedes probar con 127.0.0.1

A continuación reiniciamos el servicio dns con los comandos sc.exe stop dns y sc.exe start dns

Y de esa forma poniendonos a la escucha en el puerto que hayamos configurado en el dll, obtendremos una shell de administrador:

El único problema es que el servicio DNS se quedará colgado. ¿Cómo conseguir una shell sin que el DNS deje de funcionar? Lo veremos en el próximo post.

Espero que toda esta información sobre el protocolo DNS te haya sido de utilidad. Nos vemos en próximas entregas con más vulnerabilidades de protocolos.

Lethani.

4.1/5 - (52 votos)

Deja un comentario