
Bypass de UAC en Windows 8.1 y 10 abusando de WinSxS en "dccw.exe".
Este exploit abusa de la forma en que "WinSxS" es gestionado por "dccw.exe" mediante un método derivado del "Bypass UAC" de Leo Davidson para obtener un shell de administrador sin solicitar consentimiento. Es compatible con las arquitecturas "x86" y "x64". Además, ha sido probado con éxito en Windows 8.1 9600, Windows 10 14393, Windows 10 15031 y Windows 10 15062.
Si quieres ver cómo ejecutar el script, echa un vistazo a la sección de uso. También puedes ejecutarlo en Metasploit y obtener una sesión de Meterpreter con derechos de administrador.
Para desarrollar un nuevo bypass UAC, primero tenemos que encontrar una vulnerabilidad en el sistema y, para ser más precisos, una vulnerabilidad en un proceso de auto-elevación. Para obtener una lista de dichos procesos utilizamos la herramienta Strings de Sysinternals. Después, pudimos ver algunos procesos de auto-elevación como "sysprep.exe", "cliconfig.exe", "inetmgr.exe", "consent.exe" o "CompMgmtLauncher.exe" que tenían (algunos todavía tienen) vulnerabilidades que permiten la ejecución de un "bypass UAC". Así que comenzamos a estudiar cómo funcionaban otros procesos de auto-elevación con la aplicación de Sysinternals llamada Process Monitor (ProcMon), pero centrándonos en el proceso "dccw.exe".
Sin embargo, antes de comenzar con ProcMon, primero comprobamos el manifiesto de dichas aplicaciones con otra aplicación de Sysinternals llamada Sigcheck y, por supuesto, en nuestro caso "dccw.exe" es un proceso de auto-elevación.
Entonces, pudimos comenzar a seguir el flujo de ejecución de "dccw.exe" con ProcMon para ver si ocurría algo extraño, algo que comprobamos de inmediato. En cierto punto, si ejecutamos "dccw.exe" como un proceso de 64 bits en una máquina Windows de 64 bits, busca el directorio "C:\Windows\System32\dccw.exe.Local\" para cargar una DLL específica llamada "GdiPlus.dll", igual que si se ejecutara en una máquina Windows de 32 bits, mientras que si lo ejecutamos como un proceso de 32 bits en la misma máquina, el proceso buscará el directorio "C:\Windows\SysWOW64\dccw.exe.Local\". Entonces, debido a que este no existe, el proceso siempre busca una carpeta en la ruta "C:\Windows\WinSxS\" para obtener la DLL deseada; esta carpeta tiene un nombre con la siguiente estructura:
[architecture]_microsoft.windows.gdiplus_[sequencial_code]_[Windows_version]_none_[sequencial_number]
Si observamos el directorio "WinSxS", podemos ver más de una carpeta que coincide con esta estructura, lo que significa que "dccw.exe" puede cargar la DLL deseada desde cualquiera de estas carpetas. Lo único de lo que estamos seguros es de que si la aplicación se invoca como un proceso x86, el nombre de la carpeta comenzará con la cadena "x86", mientras que si la ejecutamos como un proceso x64, su nombre comenzará con la cadena "amd64".
Esta situación se puede abusar para realizar un secuestro de DLL y luego ejecutar código con integridad alta sin solicitar consentimiento.
Una vez que hemos encontrado un error durante la ejecución de un proceso de auto-elevación, necesitamos verificar si se puede abusar de él o no. Para ello, simplemente creamos la carpeta "dccw.exe.Local" en la ruta deseada y, dentro de esa carpeta, creamos las carpetas ubicadas en "WinSxS" que podrían ser invocadas por el proceso para cargar "GdiPlus.dll", pero sin dicha DLL.
Ahora, si ejecutamos "dccw.exe" veremos que el proceso ha encontrado la carpeta "dccw.exe.Local" y una de las carpetas de "WinSxS", pero no la DLL deseada, algo que lanza un error. Esto es lo que esperábamos, ya que esa situación puede ser explotada por un atacante como mencionamos anteriormente.
En este punto, ya sabemos que podemos realizar un bypass UAC en Windows 10 abusando de "dccw.exe", pero ¿cómo?
El método más utilizado para eludir UAC es el desarrollado por Leo Davidson. Sin embargo, realiza una inyección de proceso para invocar el objeto COM IFileOperation, que puede ser detectado por algunos antivirus, por lo que un mejor enfoque es el llamado Masquerade PEB utilizado por Cn33liz en su propio bypass UAC.
Además, tenemos que modificar la forma en que se invoca IFileOperation en las versiones más recientes de Windows 10, ya que el método de Leo Davidson activa UAC desde la compilación 15002. Por lo tanto, la forma en que debemos invocar dicha operación es la misma que la original, pero sin los indicadores de operación "FOF_SILENT", "FOFX_SHOWELEVATIONPROMPT" y "FOF_NOERRORUI".
Antes de ejecutar el exploit, es importante comprobar algunos aspectos para no ejecutarlo sin éxito y, por tanto, activar algunas alarmas. Lo primero que comprobamos es la versión de compilación de Windows, ya que algunas versiones no son vulnerables a nuestro exploit (aquellas con una versión de compilación inferior a 7600). Después, verificamos que aún no tenemos derechos de administrador; si no es el caso, no hay razón para ejecutar el script. Luego, comprobamos la configuración de UAC para confirmar que no está establecida en "Notificar siempre", ya que si estuviera establecida en ese valor, nuestro exploit sería inútil. Finalmente, verificamos si el usuario pertenece al grupo de administradores, porque, si no, el exploit no tendría éxito.