<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
Ya ha habido varios casos de **escalada de privilegios** donde un **proceso privilegiado** con **manijas abiertas e heredables** ha **ejecutado** un **proceso no privilegiado** dándole **acceso a todas esas manijas**.
Por ejemplo, imagina que **un proceso que se ejecuta como SISTEMA abre un nuevo proceso** (`OpenProcess()`) con **acceso total**. El mismo proceso **también crea un nuevo proceso** (`CreateProcess()`) **con bajos privilegios pero heredando todas las manijas abiertas del proceso principal**.\
Entonces, si tienes **acceso total al proceso de bajos privilegios**, puedes obtener la **manija abierta al proceso privilegiado creado** con `OpenProcess()` e **inyectar un shellcode**.
Como leíste en el ejemplo inicial, si un **proceso no privilegiado hereda una manija 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 manija de proceso que tenga alguno de los siguientes permisos:
Similar a las manijas de proceso, si un **proceso no privilegiado hereda una manija 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 manija de hilo que tenga alguno de los siguientes permisos:
Si un **proceso no privilegiado hereda** una **manija** con **permisos equivalentes de escritura** sobre un **archivo o registro privilegiado**, podrá **sobrescribir** el archivo/registro (y con **mucha suerte**, **escalar privilegios**).
Las **manijas de Sección** son similares a las manijas de archivo, el nombre común de este tipo de [objetos es **"Mapeo de Archivos"**](https://docs.microsoft.com/en-us/windows/win32/memory/file-mapping). Se utilizan para trabajar con **archivos grandes sin mantener el archivo completo** en memoria. Eso hace que la explotación sea "similar" a la explotación de una Manija de Archivo.
[**Process Hacker**](https://github.com/processhacker/processhacker) es una herramienta que puedes descargar de forma gratuita. Tiene varias opciones increíbles para inspeccionar procesos y una de ellas es la **capacidad de ver las manijas de cada proceso**.
Ten en cuenta que para **ver todas las manijas de todos los procesos, se necesita el privilegio SeDebugPrivilege** (por lo que debes ejecutar Process Hacker como administrador).
El binario [**Handles** ](https://docs.microsoft.com/en-us/sysinternals/downloads/handle) de Sysinternals también listará las manijas por proceso en la consola:
[**Esta herramienta**](https://github.com/lab52io/LeakedHandlesFinder) te permite **monitorear** las **manijas filtradas** e incluso **explotarlas automáticamente** para escalar privilegios.
Ahora que sabes cómo encontrar las manijas de los procesos, lo que necesitas verificar es si algún **proceso no privilegiado tiene acceso a manijas privilegiadas**. En ese caso, el usuario del proceso podría ser capaz de obtener la manija y abusar de ella para escalar privilegios.
Se mencionó anteriormente que necesitas el SeDebugPrivilege para acceder a todas las manijas. Pero un **usuario aún puede acceder a las manijas 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 handle con acceso completo**. Luego, **crea un proceso de baja privilegiado** (copiando el token de baja privilegiado de _explorer.exe_) ejecutando _C:\users\username\desktop\client.exe_. La **vulnerabilidad radica en el hecho de que crea el proceso de baja privilegiado con `bInheritHandles` como `TRUE`**.
Por lo tanto, este proceso de baja privilegiado puede obtener el handle 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 será ejecutado por el código vulnerable (_C:\users\username\desktop\client.exe_ en este caso). Probablemente **comprometerás un proceso y necesitarás verificar si puedes acceder a algún handle vulnerable de algún proceso privilegiado**.
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), intentará **inyectar y ejecutar un shellcode abusando del handle del proceso**.\
La inyección del shellcode se realiza dentro de la función **`Inject`** y simplemente **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 será ejecutado por el código vulnerable (_C:\users\username\desktop\client.exe_ en este caso). Probablemente **comprometerás un proceso y necesitarás verificar 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 **utilizará el token del proceso con el handle abierto privilegiado para crear uno nuevo**. Esto se hace en las líneas del 138 al 148.
Observa cómo la **función `UpdateProcThreadAttribute`** se utiliza con el **atributo `PROC_THREAD_ATTRIBUTE_PARENT_PROCESS` y el handle al proceso privilegiado abierto**. Esto significa que el **hilo del proceso creado que ejecuta \_cmd.exe**\_\*\* tendrá el mismo privilegio de token que el proceso con el handle abierto\*\*.
Esta herramienta te permite monitorear handles filtrados para encontrar vulnerables e incluso explotarlos automáticamente. También tiene una herramienta para filtrar uno.
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).