Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
DccwBypassUAC — Bypass de UAC en Windows 8.1 y 10 abusando de WinSxS en "dccw.exe". | Kitploit
Herramientas/GitHubGitHub/l3cr0f/dccwbypassuac
Escalada de PrivilegiosExplotaciónPost-ExplotaciónDesarrollo de Payloads
GitHubl3cr0f/dccwbypassuac

DccwBypassUAC

Bypass de UAC en Windows 8.1 y 10 abusando de WinSxS en "dccw.exe".

Ver Repositorio
39889hace 6 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

DccwBypassUAC

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.

1. Desarrollo de un nuevo Bypass UAC

1.1. Búsqueda de vulnerabilidades

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.

1.2. Verificación de la vulnerabilidad

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.

1.3. Desarrollo del exploit

En este punto, ya sabemos que podemos realizar un bypass UAC en Windows 10 abusando de "dccw.exe", pero ¿cómo?

1.3.1. Método

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".

1.3.2. Comprobaciones iniciales

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.

1.3.3. Interoperabilidad

Cuando se desarrolla un exploit, es importante que pueda funcionar en tantos sistemas como sea posible, esto incluye sistemas Windows de 32 bits. Para lograrlo, necesitamos compilar nuestro exploit para dichos sistemas, ya que también podemos ejecutarlo en sistemas de 64 bits.

Cuando nuestro exploit de 32 bits se ejecuta en una máquina Windows de 64 bits, la forma en que opera "dccw.exe" es un poco diferente debido a la invocación de WOW64 (subsistema de Windows que permite a las máquinas de 64 bits ejecutar aplicaciones de 32 bits). Esto significa que la carpeta "dccw.exe.Local" se buscará en el directorio "C:\Windows\SysWOW64\", en lugar de "C:\Windows\System32\", pero también la "GdiPlus.dll" objetivo será una DLL de 32 bits, lo que implica que se buscará en una carpeta que coincida con ese patrón de nombre "C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_*". Sin embargo, si se ejecuta en un sistema Windows de 32 bits, el exploit funcionará como se espera.

Finalmente, es importante señalar que debemos considerar todas las rutas que coinciden con el patrón "C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_*" cuando se realiza el secuestro de DLL para asegurar una efectividad del 100%.

1.3.4. DLL maliciosa

Para ejecutar un proceso con integridad alta necesitamos desarrollar una DLL que se invocará mediante el secuestro de DLL. Sin embargo, no es tan simple como parece, porque si solo hacemos eso, ni "dccw.exe" ni nuestro código se ejecutarán. Esto se debe a que "dccw.exe" depende de algunas funciones de "GdiPlus.dll", por lo que debemos implementar o redirigir la ejecución de dichas funciones a la DLL legítima.

La mejor opción es redirigir la ejecución a la DLL legítima, porque de esta manera el tamaño de nuestra DLL será menor. Para ello, utilizamos el programa ExportsToC++ para portar todas las exportaciones de "GdiPlus.dll" al lenguaje C++. Ahora, el problema es la gran cantidad de exportaciones que tiene "GdiPlus.dll", 631 para ser precisos. No obstante, "dccw.exe" no las importa todas, sino unas pocas. Para saber qué funciones son importadas por "dccw.exe" desde "GdiPlus.dll", lo sometimos a ingeniería inversa con "IDA Pro". Finalmente, solo se importan 15 funciones de "GdiPlus.dll", por lo que solo necesitamos incluir esas en nuestra DLL.

Ahora, parece que el problema ha sido solucionado, pero si redirigimos la ejecución a un "GdiPlus.dll" específico en "C:\Windows\WinSxS\", la DLL solo funcionará en algunos sistemas, ya que el nombre de las carpetas internas de "WinSxS" cambia en cada compilación de Windows. Para superar este problema, se nos ocurrió la idea de redirigir la ejecución a "C:\Windows\System32\GdiPlus.dll", debido a que la ruta es la misma en todos los sistemas Windows 10.

Lo último que tenemos que hacer es detener la ejecución de "dccw.exe" después de ejecutar nuestro código malicioso para evitar que se abra la ventana de ese proceso.

Ahora, una vez que hemos desarrollado nuestra DLL maliciosa, necesitamos dejarla en la máquina objetivo. Para ello, nuestra DLL se ha comprimido y codificado en "base64" dentro del exploit, de modo que pueda decodificarse y descomprimirse en tiempo de ejecución para dejarla donde se espera.

Finalmente, nuestra "GdiPlus.dll" manipulada se copia a la ubicación objetivo usando el objeto COM IFileOperation como se mencionó anteriormente.

1.3.5. Evitación de la detección

Cuando un atacante compromete un sistema, quiere permanecer sin ser detectado el mayor tiempo posible, lo que significa eliminar todo rastro de las acciones que realiza. Debido a eso, todos los archivos temporales que se crean durante la ejecución del exploit se eliminan cuando ya no son necesarios.

1.3.6. Objetivo

Finalmente, necesitamos determinar qué proceso queremos ejecutar con integridad alta. En nuestro caso, elegimos la aplicación "cmd.exe" porque nos permite realizar tantas operaciones con integridad alta como queramos una vez que tengamos derechos de administrador, pero, de hecho, podemos ejecutar cualquier aplicación que queramos.

2. Requisitos

Para lograr una ejecución exitosa del exploit, la máquina objetivo debe cumplir los siguientes requisitos:
 - Debe ser Windows 8 o 10, sin importar la versión de compilación.
 - La configuración de UAC no debe estar establecida en "Notificar siempre".
 - El usuario comprometido debe pertenecer al "grupo de administradores".

3. Uso

Para ejecutar el exploit, debes asegurarte de que la máquina objetivo cumple los requisitos. Luego, simplemente tienes que ejecutar el exploit como cualquier otro script de línea de comandos:

root@kitploit:~
C:\Users\L3cr0f> DccwBypassUAC.exe

4. Módulo de Metasploit

El módulo de Metasploit de este PoC utiliza inyección de DLL en lugar de Masquerading PEB y está disponible en:

 - Metasploit Framework: https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/windows/local/bypassuac_injection_winsxs.rb
 - Repositorio de módulos de Metasploit de L3cr0f: https://github.com/L3cr0f/Metasploit-modules#bypassuac_injection_winsxs

5. Descargo de responsabilidad

Este exploit ha sido desarrollado para mostrar cómo un atacante podría obtener privilegios en un sistema, no para usarlo con fines maliciosos. Esto significa que no asumo ninguna responsabilidad si alguien lo utiliza para realizar actividades delictivas.

6. Posición de Microsoft

User Access Control (UAC) es una tecnología introducida con Windows Vista que proporciona un método para separar los privilegios y tareas de los usuarios estándar de aquellos que requieren acceso de Administrador. Si un usuario estándar está utilizando el sistema e intenta realizar una acción para la cual no tiene autorización, aparece un aviso de Windows y solicita la contraseña de la cuenta de administrador. Si un administrador está utilizando el sistema e intenta hacer la misma tarea, solo hay un aviso de advertencia. Ese aviso se conoce como "Aviso de consentimiento" porque solo se le pide al administrador que acepte la acción antes de continuar. Una debilidad que permita eludir el "Aviso de consentimiento" no se considera una vulnerabilidad de seguridad, ya que no se considera un límite de seguridad.

Sin embargo, Microsoft también afirma que "User Account Control (UAC) es un componente fundamental de la visión de seguridad general de Microsoft".

Fuentes:
 - Definición de vulnerabilidad de seguridad.
 - Cómo funciona el Control de cuentas de usuario.

7. Agradecimientos

Para desarrollar el exploit, me he basado en los creados por:
 - Fuzzysecurity: https://github.com/FuzzySecurity/PowerShell-Suite/tree/master/Bypass-UAC.
 - Cn33liz: https://github.com/Cn33liz/TpmInitUACBypass.
 - hFireF0X: https://github.com/hfiref0x/UACME.
¡Muchas gracias a todos!
Descargar herramienta