
Exploit de escalada de privilegios local en Windows que utiliza suplantación de NBNS, proxy WPAD falso y retransmisión NTLM de HTTP a SMB para obtener acceso como NT AUTHORITY\SYSTEM.
#Potato Escalada de privilegios en Windows 7, 8, 10, Server 2008, Server 2012
###Cómo funciona Potato aprovecha problemas conocidos en Windows para obtener escalada de privilegios local, concretamente el relay NTLM (específicamente el relay HTTP->SMB) y la suplantación NBNS.
Usando las técnicas descritas a continuación, es posible que un usuario sin privilegios obtenga acceso a nivel "NT AUTHORITY\SYSYTEM" en un host Windows en configuraciones predeterminadas.
El exploit consta de 3 partes principales, todas ellas algo configurables mediante modificadores de línea de comandos:
#####1. Suplantador NBNS local NBNS es un protocolo UDP de difusión para resolución de nombres comúnmente usado en entornos Windows. En pruebas de penetración, a menudo capturamos el tráfico de red y respondemos a las consultas NBNS observadas en una red local. Para fines de escalada de privilegios, no podemos asumir que somos capaces de capturar el tráfico de red, así que ¿cómo podemos lograr la suplantación NBNS?
Si podemos saber de antemano para qué host una máquina objetivo (en este caso nuestro objetivo es 127.0.0.1) enviará una consulta NBNS, podemos elaborar una respuesta e inundar el host objetivo con respuestas NBNS (ya que es un protocolo UDP). Una complicación es que un campo de 2 bytes en el paquete NBNS, el TXID, debe coincidir en la solicitud y la respuesta. Podemos superar esto inundando rápidamente e iterando sobre los 65536 valores posibles.
¿Y si el host que intentamos suplantar ya tiene un registro DNS? Bueno, podemos FORZAR que las búsquedas DNS fallen de una forma curiosa. Usando una técnica llamada "agotamiento de puertos" nos vinculamos a todos y cada uno de los puertos UDP. Cuando intentes realizar una búsqueda DNS, fallará porque no habrá ningún puerto de origen disponible para que llegue la respuesta DNS.
En las pruebas, esto ha demostrado ser 100% efectivo.
#####2. Servidor proxy WPAD falso Con la capacidad de suplantar respuestas NBNS, podemos dirigir nuestro suplantador NBNS a 127.0.0.1. Inundamos la máquina objetivo (nuestra propia máquina) con paquetes de respuesta NBNS para el host "WPAD", o "WPAD.DOMAIN.TLD", y decimos que el host WPAD tiene la dirección IP 127.0.0.1.
Al mismo tiempo, ejecutamos un servidor HTTP localmente en 127.0.0.1. Cuando recibe una solicitud para "http://wpad/wpad.dat", responde con algo como lo siguiente:
FindProxyForURL(url,host){
if (dnsDomainIs(host, "localhost")) return "DIRECT";
return "PROXY 127.0.0.1:80";}
Esto hará que todo el tráfico HTTP en el objetivo sea redirigido a través de nuestro servidor ejecutándose en 127.0.0.1.
Curiosamente, este ataque, cuando lo realiza incluso un usuario con pocos privilegios, afectará a todos los usuarios de la máquina. Esto incluye a administradores y cuentas de sistema. Véanse las capturas de pantalla "egoldstein_spoofing.png" y "dade_spoofed.png" como ejemplo.
#####3. Relay NTLM HTTP -> SMB Con todo el tráfico HTTP fluyendo ahora a través de un servidor que controlamos, podemos hacer cosas como solicitar autenticación NTLM...
En el exploit Potato, todas las solicitudes se redirigen con una redirección 302 a "http://localhost/GETHASHESxxxxx", donde xxxxx es algún identificador único. Las solicitudes a "http://localhost/GETHASHESxxxxx" responden con una solicitud 401 de autenticación NTLM.
Las credenciales NTLM se retransmiten al listener SMB local para crear un nuevo servicio de sistema que ejecuta un comando definido por el usuario. Este comando se ejecutará con privilegios "NT AUTHORITY\SYSTEM".
###Uso del exploit El uso actualmente depende del sistema operativo.
También es un poco inestable a veces, debido a las peculiaridades en cómo Windows maneja la configuración de proxy y el archivo WPAD. A menudo, cuando el exploit no funciona, es necesario dejarlo ejecutándose y esperar. Cuando Windows ya tiene una entrada en caché para WPAD, o está permitiendo acceso directo a internet porque no se encontró ningún WPAD, podría tardar de 30 a 60 minutos en refrescarse. Es necesario dejar el exploit ejecutándose e intentar activarlo de nuevo más tarde, después de que haya transcurrido este tiempo.
Las técnicas enumeradas aquí están ordenadas de menor a mayor complejidad. Cualquier técnica posterior en la lista debería funcionar en todas las versiones anteriores. Se incluyen vídeos y capturas de pantalla para cada una.
#####Windows 7 - véase https://www.youtube.com/watch?v=Nd6f5P3LSNM Windows 7 puede explotarse de forma bastante fiable a través del mecanismo de actualización de Windows Defender.
Potato.exe tiene código para activar esto automáticamente. Simplemente ejecuta lo siguiente:
Potato.exe -ip <local ip> -cmd <command to run> -disable_exhaust true
Esto iniciará el suplantador NBNS, suplantará "WPAD" a 127.0.0.1, y luego comprobará si hay actualizaciones de Windows Defender.
Si tu red ya tiene una entrada DNS para "WPAD", puedes probar "-disable_exhaust false". Esto debería hacer que la búsqueda DNS falle y debería recurrir a NBNS. Lo hemos probado un par de veces y ha funcionado
#####Windows Server 2008 - véase https://www.youtube.com/watch?v=z_IGPWgL5SY Como Windows Server no viene con Defender, necesitamos un método alternativo. En su lugar, simplemente comprobaremos si hay actualizaciones de Windows. La otra advertencia es que, al menos en mi dominio, Server 2K8 quería WPAD.DOMAIN.TLD en lugar de solo WPAD. El siguiente es un ejemplo de uso:
Potato.exe -ip <local ip> -cmd <command to run> -disable_exhaust true -disable_defender true --spoof_host WPAD.EMC.LOCAL
Después de que esto se ejecute correctamente, simplemente comprueba si hay actualizaciones de Windows. Si no se activa, espera unos 30 minutos con el exploit ejecutándose y comprueba de nuevo. Si aún no funciona, intenta descargar realmente una actualización.
Si tu red ya tiene una entrada DNS para "WPAD", puedes probar "-disable_exhaust false". Esto debería hacer que la búsqueda DNS falle y debería recurrir a NBNS. Lo hemos probado un par de veces y ha funcionado
#####Windows 8/10/Server 2012 - véase https://www.youtube.com/watch?v=Kan58VeYpb8 En las versiones más recientes de Windows, parece que Windows Update puede que ya no respete la configuración de proxy establecida en "Opciones de Internet", ni compruebe WPAD. En su lugar, la configuración de proxy para Windows Update se controla usando "netsh winhttp proxy..."
En su lugar, para estas versiones, nos basamos en una característica más reciente de Windows, el "actualizador automático de certificados no confiables". Los detalles se pueden encontrar en https://support.microsoft.com/en-us/kb/2677070 y https://technet.microsoft.com/en-us/library/dn265983.aspx
Del artículo de technet "Los sistemas operativos Windows Server 2012 R2, Windows Server 2012, Windows 8.1 y Windows 8 incluyen un mecanismo de actualización automática que descarga listas de confianza de certificados (CTL) a diario."
Parece que esta parte de Windows todavía usa WPAD, incluso cuando la configuración de proxy de winhttp está establecida en directo.
En este caso, el uso de Potato es el siguiente:
Potato.exe -ip <local ip> -cmd <cmd to run> -disable_exhaust true -disable_defender true
En este punto, tendrás que esperar hasta 24 horas o encontrar otra forma de activar esta actualización.
Si tu red ya tiene una entrada DNS para "WPAD", puedes probar "-disable_exhaust false". Esto debería hacer que la búsqueda DNS falle y debería recurrir a NBNS. Lo hemos probado un par de veces y ha funcionado
###Mitigaciones
Habilitar "Protección extendida para autenticación" en Windows debería detener los ataques de relay NTLM.
La firma SMB también podría mitigar este tipo de ataque, sin embargo esto requeriría algo más de investigación por mi parte para confirmarlo.
###Suplantación NBNS fuera de difusión Usando la misma técnica de suplantación NBNS que el exploit Potato, podemos realizar suplantación NBNS contra cualquier host con el que podamos hablar por UDP 137. Simplemente necesitamos enviar paquetes UDP lo suficientemente rápido como para colar una respuesta válida antes de que la solicitud NBNS expire.
Se puede ver una demostración en vídeo de esto en https://www.youtube.com/watch?v=Mzn7ozkyG5g
El laboratorio de demostración tiene la siguiente configuración:
Firewall PFSense 10.0.0.0/24 -> LAN corporativa 10.0.1.0 /24 -> Red de servidores
Desde la red corporativa, atacaremos una máquina en la red de servidores.
Uso: python Responder.py –I eth0 –spoof <target>:<spoof address>:<spoof host>