Bypass UAC (Windows)

Script: Ejecutar Instalador sin Pedir Permisos de Administrador (UAC Bypass)

Código:

@echo off
setlocal
:: Ejecuta gu6setup.exe sin pedir privilegios elevados (RunAsInvoker)

set "__COMPAT_LAYER=RunAsInvoker"
set "APP_PATH=%~dp0gu6setup.exe"

if not exist "%APP_PATH%" (
    echo [ERROR] El archivo gu6setup.exe no fue encontrado.
    pause
    exit /b 1
)

echo Iniciando gu6setup.exe con compatibilidad RunAsInvoker...
start "" "%APP_PATH%"
pause

Para realizar la prueba te puedes descargar el instalador desde el siguiente link:


¿Qué hace este script?

Este script permite ejecutar un instalador (gu6setup.exe) sin que el sistema operativo solicite permisos de administrador (sin UAC). Esto es útil cuando el programa no necesita privilegios elevados para ejecutarse, pero aún así solicita el UAC innecesariamente.


¿Qué es el UAC?

UAC (User Account Control) es un mecanismo de seguridad en Windows que:

  • Previene que software haga cambios no autorizados en el sistema.

  • Muestra una ventana emergente que solicita confirmación del usuario antes de ejecutar programas como administrador.


¿Qué es RunAsInvoker?

RunAsInvoker es una bandera interna del sistema operativo que se puede forzar mediante la variable de entorno __COMPAT_LAYER.

Cuando se establece __COMPAT_LAYER=RunAsInvoker:

  • Se indica al sistema que no eleve los privilegios del proceso, aunque el ejecutable lo solicite en su manifiesto (requireAdministrator).

  • No se mostrará la ventana de UAC.

  • El programa se ejecutará con los mismos permisos que tiene el script (sin ser admin).


Explicación línea por línea

Línea
Explicación

@echo off

Oculta los comandos que se están ejecutando en la consola. Más limpio.

setlocal

Aísla las variables para que solo existan dentro del script.

set "__COMPAT_LAYER=RunAsInvoker"

Aplica la capa de compatibilidad para evitar que el proceso solicite UAC.

set "APP_PATH=%~dp0gu6setup.exe"

Guarda la ruta completa del archivo gu6setup.exe, suponiendo que está en el mismo directorio que el script. %~dp0 es la ruta del script.

if not exist ...

Verifica que el archivo gu6setup.exe exista antes de intentar ejecutarlo.

start "" "%APP_PATH%"

Lanza el instalador sin abrir una nueva consola. El "" es el título de la ventana, requerido por start.

pause

Espera a que el usuario presione una tecla antes de cerrar. Útil para ver mensajes de error o éxito.


Técnicas similares / Payloads posibles

Este enfoque de UAC bypass con RunAsInvoker no es una vulnerabilidad en sí, sino una técnica permitida por el sistema operativo. Sin embargo, puede ser usada de forma maliciosa.

Payloads o usos comunes:

  1. Instaladores personalizados: Ejecutar .exe sin necesidad de pedir al usuario que acepte el UAC.

  2. Bypass UAC para scripts: Inyectar comandos maliciosos que normalmente requerirían elevación.

  3. Cargar DLLs o backdoors dentro de programas que no hacen verificación de integridad.

  4. Persistence: Insertar el script en el inicio del sistema sin ser detectado por el UAC.

  5. Ingeniería social: Ejecutar binarios que se disfrazan de algo benigno, sin levantar sospechas por la ausencia de UAC.

⚠️ Advertencia ética: Esta técnica debe utilizarse únicamente con fines educativos, administrativos legítimos o pruebas de seguridad autorizadas. El mal uso puede ser ilegal y sancionado por la ley.


Limitaciones

  • No funciona si el ejecutable requiere sí o sí privilegios de administrador para funcionar (por ejemplo, si accede a archivos del sistema).

  • Solo evita la ventana de UAC; no eleva permisos mágicamente.

  • Si el usuario ya no tiene privilegios de admin, el resultado será el mismo que ejecutar el programa como usuario estándar.


Cuándo usar esta técnica

  • Cuando el software no necesita privilegios de administrador pero está mal configurado.

  • En entornos educativos para enseñar sobre compatibilidad en Windows.

  • Para automatizar instalaciones internas que no requieren cambios profundos en el sistema.

Tabla de Payloads para Bypass UAC con RunAsInvoker

#
Tipo de Payload
Descripción
Nivel de Privilegio
Notas Importantes

1

Instalador .exe

Ejecutar un instalador que no requiere permisos reales de admin, pero pide UAC por defecto.

Usuario estándar

Ideal para software mal configurado que pide permisos innecesarios.

2

PowerShell Script Wrapper

Ejecutar un script .ps1 malicioso disfrazado como instalador o herramienta legítima.

Usuario estándar

Puede usarse para carga de módulos, keyloggers o descarga de payloads adicionales.

3

Ejecutable con DLL Hijacking

Correr un .exe vulnerable a cargar una DLL manipulada desde el mismo directorio.

Usuario estándar

No necesita privilegios si la ruta de la DLL no es protegida por el sistema.

4

Carga de DLL vía regsvr32

Ejecutar una DLL maliciosa usando regsvr32, aprovechando el RunAsInvoker.

Usuario estándar

Técnicamente no necesita UAC si la DLL no toca el sistema.

5

Scripts por lotes (.bat)

Ejecutar otros scripts automatizados para moverse lateralmente en la máquina.

Usuario estándar

Útil para persistencia en entornos sin control de privilegios estricto.

6

Ejecutar Binarios de Confianza

Lanzar binarios firmados por Microsoft con parámetros modificados.

Usuario estándar

Ej: usar fodhelper.exe o computerdefaults.exe con técnicas más avanzadas.

7

Herramientas de pentesting

Ejecutar herramientas como mimikatz, revshell.exe sin trigggear el UAC.

Usuario estándar

Solo si están configuradas para no requerir elevación desde el manifiesto.

8

Acceso a tareas programadas

Crear o ejecutar tareas en el scheduler (schtasks) sin UAC.

Usuario estándar

Depende de si la política de ejecución permite crear tareas sin elevación.

9

Abusar programas portables

Ejecutar programas legítimos portables (como un navegador) y hacer side-loading de código.

Usuario estándar

No se eleva, pero se puede usar para phishing o C2 sin alertar al usuario.

10

Puerta trasera en software real

Reempaquetar un instalador legítimo con código malicioso, y usar RunAsInvoker para disfrazar.

Usuario estándar

Técnica de trojanización, oculta actividades maliciosas tras un programa funcional.

Last updated