Learn & practice AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Learn & practice GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
Ya ha habido varios casos de **escalada de privilegios** donde un **proceso privilegiado** con **handles abiertos e heredables** ha **ejecutado** un **proceso no privilegiado** dándole **acceso a todos esos handles**.
Por ejemplo, imagina que **un proceso que se ejecuta como SYSTEM abre un nuevo proceso** (`OpenProcess()`) con **acceso total**. El mismo proceso **también crea un nuevo proceso** (`CreateProcess()`) **con bajos privilegios pero heredando todos los handles abiertos del proceso principal**.\
Luego, si tienes **acceso total al proceso de bajo privilegio**, puedes obtener el **handle abierto al proceso privilegiado creado** con `OpenProcess()` y **inyectar un shellcode**.
Como leíste en el ejemplo inicial, si un **proceso no privilegiado hereda un handle de proceso** de un **proceso privilegiado** con suficientes permisos, podrá ejecutar **código arbitrario en él**.
En [**este excelente artículo**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/) puedes ver cómo explotar cualquier handle de proceso que tenga alguno de los siguientes permisos:
Similar a los handles de proceso, si un **proceso no privilegiado hereda un handle de hilo** de un **proceso privilegiado** con suficientes permisos, podrá ejecutar **código arbitrario en él**.
En [**este excelente artículo**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/) también puedes ver cómo explotar cualquier handle de proceso que tenga alguno de los siguientes permisos:
Si un **proceso no privilegiado hereda** un **handle** con **permisos** equivalentes de **escritura** sobre un **archivo o registro privilegiado**, podrá **sobrescribir** el archivo/registro (y con mucha **suerte**, **escalar privilegios**).
**Los Handles de Sección** son similares a los handles de archivo, el nombre común de este tipo de [objetos es **"File Mapping"**](https://docs.microsoft.com/en-us/windows/win32/memory/file-mapping). Se utilizan para trabajar con **archivos grandes sin mantener todo el** archivo en memoria. Eso hace que la explotación sea "similar" a la explotación de un Handle de Archivo.
[**Process Hacker**](https://github.com/processhacker/processhacker) es una herramienta que puedes descargar gratis. Tiene varias opciones increíbles para inspeccionar procesos y una de ellas es la **capacidad de ver los handles de cada proceso**.
Ten en cuenta que para **ver todos los handles de todos los procesos, se necesita el SeDebugPrivilege** (así que necesitas ejecutar Process Hacker como administrador).
El [**Handles** ](https://docs.microsoft.com/en-us/sysinternals/downloads/handle)binario de Sysinternals también listará los handles por proceso en la consola:
[**Esta herramienta**](https://github.com/lab52io/LeakedHandlesFinder) te permite **monitorear** los **handles** filtrados e incluso **autoexplotarlos** para escalar privilegios.
Ahora que sabes cómo encontrar los handles de los procesos, lo que necesitas verificar es si algún **proceso no privilegiado está teniendo acceso a handles privilegiados**. En ese caso, el usuario del proceso podría obtener el handle y abusar de él para escalar privilegios.
Se mencionó anteriormente que necesitas el SeDebugPrivilege para acceder a todos los handles. Pero un **usuario aún puede acceder a los handles de sus procesos**, por lo que podría ser útil si deseas escalar privilegios solo desde ese usuario para **ejecutar las herramientas con los permisos regulares del usuario**.
Por ejemplo, el siguiente código pertenece a un **servicio de Windows** que sería vulnerable. El código vulnerable de este binario de servicio se encuentra dentro de la **función `Exploit`**. Esta función comienza **creando un nuevo proceso de manejo con acceso total**. Luego, **crea un proceso de bajo privilegio** (copiando el token de bajo privilegio de _explorer.exe_) ejecutando _C:\users\username\desktop\client.exe_. La **vulnerabilidad reside en el hecho de que está creando el proceso de bajo privilegio con `bInheritHandles` como `TRUE`**.
Por lo tanto, este proceso de bajo privilegio puede obtener el manejo del proceso de alto privilegio creado primero e inyectar y ejecutar un shellcode (ver la siguiente sección).
En un escenario real probablemente **no podrás controlar el binario** que se va a ejecutar por el código vulnerable (_C:\users\username\desktop\client.exe_ en este caso). Probablemente **comprometerás un proceso y necesitarás ver si puedes acceder a algún handle vulnerable de algún proceso privilegiado**.
En este ejemplo puedes encontrar el código de una posible explotación para _C:\users\username\desktop\client.exe_.\
La parte más interesante de este código se encuentra en `GetVulnProcHandle`. Esta función **comenzará a obtener todos los handles**, luego **verificará si alguno de ellos pertenece al mismo PID** y si el handle pertenece a un **proceso**. Si se cumplen todos estos requisitos (se encuentra un handle de proceso abierto accesible), intenta **inyectar y ejecutar un shellcode abusando del handle del proceso**.\
La inyección del shellcode se realiza dentro de la **`Inject`** función y solo **escribirá el shellcode dentro del proceso privilegiado y creará un hilo dentro del mismo proceso** para ejecutar el shellcode).
En un escenario real, probablemente **no podrás controlar el binario** que va a ser ejecutado por el código vulnerable (_C:\users\username\desktop\client.exe_ en este caso). Probablemente **comprometerás un proceso y necesitarás ver si puedes acceder a algún handle vulnerable de algún proceso privilegiado**.
En este ejemplo, **en lugar de abusar del handle abierto para inyectar** y ejecutar un shellcode, se va a **usar el token del proceso con handle privilegiado abierto para crear uno nuevo**. Esto se hace en las líneas de 138 a 148.
Nota cómo se utiliza la **función `UpdateProcThreadAttribute`** con el **atributo `PROC_THREAD_ATTRIBUTE_PARENT_PROCESS` y el handle al proceso privilegiado abierto**. Esto significa que el **hilo del proceso creado ejecutando \_cmd.exe**\_\*\* tendrá el mismo privilegio de token que el proceso con handle abierto\*\*.
Esta herramienta te permite monitorear handles filtrados para encontrar vulnerables e incluso auto-explotarlos. También tiene una herramienta para filtrar uno.
Learn & practice AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Learn & practice GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.