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:
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
DNSRecon
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
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:
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
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.