Salto de pértiga al UAC


¡Muy buenas!

Este es mi primer post en este blog, y quería estrenarme en Flu Project hablando sobre las escaladas de privilegios, en concreto, me centraré en una escalada de privilegios basada en la técnica T1574.001 de MITRE ATT&CK. El objetivo que hoy expondré aquí es el de llegar a abrir una CMD con los privilegios de administrador, evadiendo el UAC del sistema.

Para ello, utilizaremos una técnica de DLL Hijacking, con la cual, cuando el sistema necesite utilizar la DLL en cuestión, utilizará la DLL que nosotros hemos preparado anteriormente con el código “malicioso” en su interior. Esto se produce porque muchos binarios y archivos de sistema no contienen una ruta absoluta hasta la DLL en cuestión.

Como aclaración, todo esto se realizó en las siguientes versiones de Windows 10:

  • 20H2 compilación de SO 19042. 1081
  • 21H1 compilación de SO 19043. 1052



Bien, como dijo John The Ripper, vamos por partes:

Primero, estando en el sistema víctima abrimos una consola de Powershell. Con la cual crearemos una carpeta donde alojaremos el binario a usar y su DLL. Para abrir la consola de comandos, podemos usar la combinación de teclas de Tecla Windows + R, la cual abrirá la ventana de ejecutar. Aquí pondremos la palabra powershell y le daremos a OK o Enter de nuestro teclado.


Cuando se nos haya abierto la consola, podemos probar a utilizar el comando: 

Whoami /priv

Con el cual podremos observar los privilegios que tenemos, los cuales deberían ser como se muestran en las imágenes, sin privilegios especiales.


Segundo, con nuestra consola ya abierta, vamos a crear la carpeta, para ello utilizaremos el siguiente comando.

cd .\Desktop\

New-Item Poc -ItemType Directory


Tercero, con la carpeta ya creada, necesitamos para este ejemplo el binario ComputerDefaults.exe de la carpeta System32. El cual, podemos copiar manualmente o desde consola como muestran las imágenes.

copy C:\Windows\System32\ComputerDefaults.exe "C:\Users\User\Desktop\Poc\ComputerDefaults.exe"


Con esto ya tenemos la mitad del trabajo hecho, ahora solo necesitamos una DLL que utilice este binario, en este caso utilizaremos profapi.dll. Podemos comprobar con el Process Monitor que ComputerDefaults.exe utiliza esta DLL.


La DLL está alojada en la misma ubicación que el binario, esto es lo que hace que funcione, el binario no lo busca únicamente en una ruta absoluta como sería lo correcto, si no que, primero lo busca donde el propio binario está ubicado. Bien, ahora vamos a crear una DLL y la vamos a llamar igual que la que requiere el binario. Para ello, podemos utilizar una plantilla que nos proporciona Windows:

https://docs.microsoft.com/en-us/windows/win32/dlls/dllmain.

Copiamos desde la palabra BOOL hasta el último símbolo de cierre de llave incluido, lo pegamos un archivo de texto nuevo, el cual llamaremos profapi.c


Cuarto, ahora necesitamos modificar el archivo profapi.c, para que cuando lo convirtamos en DLL realice la función que nosotros queremos. 


Con el archivo modificado y guardado, necesitamos descargar Visual Studio para poder compilar la DLL que hemos creado.



Cuando hayamos descargado e iniciado la instalación, primero hay que descargar los archivos necesarios y después se nos abrirá una ventana donde aparecerá lo que se va a instalar. Por seguridad, le daremos a Modify, el cual nos abrirá otra ventana donde podremos añadir qué paquetes extras queremos en la instalación. A nosotros nos interesan 2 en concreto:

.NET desktop development y Desktop development with C ++.



Con estos dos seleccionados podemos seguir con la instalación. Posteriormente sería recomendable reiniciar el equipo.

Quinto, con todo instalado y reiniciado el pc, necesitaremos abrir una consola que nos proporciona Visual Studio. Podemos utilizar el buscador que se encuentra la derecha del símbolo de Windows, incluimos la palabra Native y deberían de salirnos dos, en nuestro caso cogeremos el de x64.


Sexto, con nuestra consola x64 Native Tools abierta, iremos a la ubicación del archivo, para evitar problemas. Y ejecutaremos el siguiente comando:

cl /LD /TC /DUNICODE /D_UNICODE profapi.c

cl – El compilador.
/LD – Crear .DLL
/TC – Compilar todos los archivos como .C
/DUNICODE – Como Unicode todos los textos.
/D_UNICODE – Como Unicode todas las funciones.


Esto nos genera 2 archivos, pero solo nos interesa profapi.dll. Con nuestra DLL creada, solo tenemos que llevarla a la carpeta que hemos creado donde se encuentra el binario ComputerDefaults.exe.


Ahora solo tendremos que hacer doble clic en ComputerDefaults.exe y se nos abrirá una consola. Podremos observar que en el nombre de esta consola aparece la palabra Administrador. Aun así, para asegurarnos, haremos como al inicio de la práctica, utilizaremos el comando Whoami /priv
para ver si de verdad contiene privilegios administrativos.


NOTA: Se ha podido observar que si el UAC no es restrictivo no debería causar ningún problema.

Para finalizar, me gustaría agradecer esta práctica a un par de personas, en primer lugar, Eduardo Parra San José, pues gracias a él puedo estar hoy aquí exponiendo esta técnica la cual él me mostró con el mismo entusiasmo que intento reflejar aquí. Y en segundo lugar y no menos importante a mi compañero de trabajo y de Flu Project, Francisco Palma, el cual hace que todo esto sea posible con sus enseñanzas diarias y su gran paciencia. :)

¡Un saludo!