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.
Ci sono già stati diversi casi di **privilege escalation** in cui un **processo privilegiato** con **handle aperti e ereditabili** ha **eseguito** un **processo non privilegiato** concedendogli **accesso a tutti quegli handle**.
Ad esempio, immagina che **un processo in esecuzione come SYSTEM apra un nuovo processo** (`OpenProcess()`) con **accesso completo**. Lo stesso processo **crea anche un nuovo processo** (`CreateProcess()`) **con privilegi bassi ma ereditando tutti gli handle aperti del processo principale**.\
Poi, se hai **accesso completo al processo a basso privilegio**, puoi afferrare l'**handle aperto al processo privilegiato creato** con `OpenProcess()` e **iniettare un shellcode**.
Come hai letto nell'esempio iniziale, se un **processo non privilegiato eredita un handle di processo** di un **processo privilegiato** con permessi sufficienti, sarà in grado di eseguire **codice arbitrario su di esso**.
In [**questo eccellente articolo**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/) puoi vedere come sfruttare qualsiasi handle di processo che ha uno dei seguenti permessi:
Simile agli handle di processo, se un **processo non privilegiato eredita un handle di thread** di un **processo privilegiato** con permessi sufficienti, sarà in grado di eseguire **codice arbitrario su di esso**.
In [**questo eccellente articolo**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/) puoi anche vedere come sfruttare qualsiasi handle di processo che ha uno dei seguenti permessi:
Se un **processo non privilegiato eredita** un **handle** con permessi equivalenti di **scrittura** su un **file privilegiato o registro**, sarà in grado di **sovrascrivere** il file/registro (e con un po' di **fortuna**, **escalare privilegi**).
**Gli Handle di Sezione** sono simili agli handle di file, il nome comune di questo tipo di [oggetti è **"File Mapping"**](https://docs.microsoft.com/en-us/windows/win32/memory/file-mapping). Vengono utilizzati per lavorare con **file di grandi dimensioni senza mantenere l'intero** file in memoria. Questo rende l'exploitation "simile" all'exploitation di un Handle di File.
[**Process Hacker**](https://github.com/processhacker/processhacker) è uno strumento che puoi scaricare gratuitamente. Ha diverse opzioni straordinarie per ispezionare i processi e una di esse è la **capacità di vedere gli handle di ciascun processo**.
Nota che per **vedere tutti gli handle di tutti i processi, è necessario il SeDebugPrivilege** (quindi devi eseguire Process Hacker come amministratore).
Il [**Handles** ](https://docs.microsoft.com/en-us/sysinternals/downloads/handle)binario di Sysinternals elencherà anche gli handle per processo nella console:
[**Questo strumento**](https://github.com/lab52io/LeakedHandlesFinder) ti consente di **monitorare** gli handle **leakati** e persino di **auto-sfruttarli** per escalare privilegi.
Ora che sai come trovare gli handle dei processi, ciò che devi controllare è se qualche **processo non privilegiato ha accesso a handle privilegiati**. In tal caso, l'utente del processo potrebbe essere in grado di ottenere l'handle e abusarne per escalare privilegi.
È stato menzionato in precedenza che hai bisogno del SeDebugPrivilege per accedere a tutti gli handle. Ma un **utente può comunque accedere agli handle dei propri processi**, quindi potrebbe essere utile se vuoi privesc solo da quell'utente per **eseguire gli strumenti con i permessi regolari dell'utente**.
Ad esempio, il seguente codice appartiene a un **servizio Windows** che sarebbe vulnerabile. Il codice vulnerabile di questo binario di servizio si trova all'interno della funzione **`Exploit`**. Questa funzione inizia **creando un nuovo processo di handle con accesso completo**. Poi, **crea un processo a bassa privilegio** (copiare il token a bassa privilegio di _explorer.exe_) eseguendo _C:\users\username\desktop\client.exe_. La **vulnerabilità risiede nel fatto che crea il processo a bassa privilegio con `bInheritHandles` impostato su `TRUE`**.
Pertanto, questo processo a bassa privilegio è in grado di acquisire l'handle del processo ad alta privilegio creato per primo e iniettare ed eseguire un shellcode (vedi la sezione successiva).
In uno scenario reale probabilmente **non sarai in grado di controllare il binario** che verrà eseguito dal codice vulnerabile (_C:\users\username\desktop\client.exe_ in questo caso). Probabilmente **comprometterai un processo e dovrai verificare se puoi accedere a qualche handle vulnerabile di un processo privilegiato**.
La parte più interessante di questo codice si trova in `GetVulnProcHandle`. Questa funzione **inizierà a recuperare tutti gli handle**, poi **verificherà se uno di essi appartiene allo stesso PID** e se l'handle appartiene a un **processo**. Se tutti questi requisiti sono soddisfatti (viene trovato un handle di processo aperto accessibile), tenterà di **iniettare ed eseguire uno shellcode abusando dell'handle del processo**.\
L'iniezione dello shellcode avviene all'interno della funzione **`Inject`** e **scriverà semplicemente lo shellcode all'interno del processo privilegiato e creerà un thread all'interno dello stesso processo** per eseguire lo shellcode).
In uno scenario reale probabilmente **non sarai in grado di controllare il binario** che verrà eseguito dal codice vulnerabile (_C:\users\username\desktop\client.exe_ in questo caso). Probabilmente **comprometterai un processo e dovrai verificare se puoi accedere a qualche handle vulnerabile di un processo privilegiato**.
In questo esempio, **invece di abusare dell'handle aperto per iniettare** ed eseguire un shellcode, verrà **utilizzato il token del processo con handle privilegiato aperto per crearne uno nuovo**. Questo viene fatto nelle righe da 138 a 148.
Nota come la **funzione `UpdateProcThreadAttribute`** venga utilizzata con l'**attributo `PROC_THREAD_ATTRIBUTE_PARENT_PROCESS` e l'handle del processo privilegiato aperto**. Questo significa che il **thread del processo creato che esegue \_cmd.exe**\_\*\* avrà lo stesso privilegio di token del processo con handle aperto\*\*.
Questo strumento consente di monitorare i handle leak per trovare quelli vulnerabili e persino di sfruttarli automaticamente. Ha anche uno strumento per crearne uno.
Impara e pratica il hacking AWS:<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">\
Impara e pratica il hacking GCP: <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)
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.