<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
Já houve vários casos de **escalada de privilégios** onde um **processo privilegiado** com **handles abertos e herdados** executou um **processo não privilegiado** dando-lhe **acesso a todos esses handles**.
Por exemplo, imagine que **um processo executando como SYSTEM abre um novo processo** (`OpenProcess()`) com **acesso total**. O mesmo processo **também cria um novo processo** (`CreateProcess()`) **com baixos privilégios mas herdando todos os handles abertos do processo principal**.\
Então, se você tem **acesso total ao processo de baixo privilégio**, você pode pegar o **handle aberto para o processo privilegiado criado** com `OpenProcess()` e **injetar um shellcode**.
Como você leu no exemplo inicial, se um **processo não privilegiado herda um handle de processo** de um **processo privilegiado** com permissões suficientes, ele será capaz de executar **código arbitrário nele**.
Neste [**excelente artigo**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/) você pode ver como explorar qualquer handle de processo que tenha qualquer uma das seguintes permissões:
Similar aos handles de processo, se um **processo não privilegiado herda um handle de thread** de um **processo privilegiado** com permissões suficientes, ele será capaz de executar **código arbitrário nele**.
Neste [**excelente artigo**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/) você também pode ver como explorar qualquer handle de processo que tenha qualquer uma das seguintes permissões:
Se um **processo não privilegiado herda** um **handle** com **permissões equivalentes a escrita** sobre um **arquivo ou registro privilegiado**, ele será capaz de **sobrescrever** o arquivo/registro (e com muita **sorte**, **escalar privilégios**).
**Handles de Seção** são similares aos handles de arquivo, o nome comum desses tipos de [objetos é **"Mapeamento de Arquivo"**](https://docs.microsoft.com/en-us/windows/win32/memory/file-mapping). Eles são usados para trabalhar com **arquivos grandes sem manter o arquivo inteiro** na memória. Isso torna a exploração "similar" à de um Handle de Arquivo.
[**Process Hacker**](https://github.com/processhacker/processhacker) é uma ferramenta que você pode baixar gratuitamente. Ela possui várias opções incríveis para inspecionar processos e uma delas é a **capacidade de ver os handles de cada processo**.
Note que para **ver todos os handles de todos os processos, o SeDebugPrivilege é necessário** (então você precisa executar o Process Hacker como administrador).
O binário [**Handles**](https://docs.microsoft.com/en-us/sysinternals/downloads/handle) do Sysinternals também listará os handles por processo no console:
[**Esta ferramenta**](https://github.com/lab52io/LeakedHandlesFinder) permite que você **monitore** handles **vazados** e até mesmo **autoexploit** para escalar privilégios.
Agora que você sabe como encontrar handles de processos, o que você precisa verificar é se algum **processo não privilegiado está tendo acesso a handles privilegiados**. Nesse caso, o usuário do processo poderia ser capaz de obter o handle e abusar dele para escalar privilégios.
Foi mencionado antes que você precisa do SeDebugPrivilege para acessar todos os handles. Mas um **usuário ainda pode acessar os handles de seus processos**, então pode ser útil se você quiser escalar privilégios apenas desse usuário para **executar as ferramentas com as permissões regulares do usuário**.
Por exemplo, o seguinte código pertence a um **serviço do Windows** que seria vulnerável. O código vulnerável deste serviço binário está localizado dentro da função **`Exploit`**. Esta função começa **criando um novo processo de handle com acesso total**. Em seguida, está **criando um processo de baixo privilégio** (copiando o token de baixo privilégio do _explorer.exe_) executando _C:\users\username\desktop\client.exe_. A **vulnerabilidade reside no fato de estar criando o processo de baixo privilégio com `bInheritHandles` como `TRUE`**.
Portanto, este processo de baixos privilégios é capaz de capturar o handle do processo de altos privilégios criado primeiro e injetar e executar um shellcode (veja a próxima seção).
Em um cenário real, provavelmente você **não poderá controlar o binário** que será executado pelo código vulnerável (_C:\users\username\desktop\client.exe_ neste caso). Provavelmente, você irá **comprometer um processo e precisará verificar se pode acessar algum handle vulnerável de qualquer processo privilegiado**.
Neste exemplo, você pode encontrar o código de um possível exploit para _C:\users\username\desktop\client.exe_.\
A parte mais interessante deste código está localizada em `GetVulnProcHandle`. Esta função começará **buscando todos os handles**, em seguida, verificará se algum deles pertence ao mesmo PID e se o handle pertence a um **processo**. Se todos esses requisitos forem atendidos (um handle de processo aberto e acessível for encontrado), ele tentará **injetar e executar um shellcode abusando do handle do processo**.\
A injeção do shellcode é feita dentro da função **`Inject`** e consistirá apenas em **escrever o shellcode dentro do processo privilegiado e criar uma thread dentro do mesmo processo** para executar o shellcode).
Em um cenário real, provavelmente você **não poderá controlar o binário** que será executado pelo código vulnerável (_C:\users\username\desktop\client.exe_ neste caso). Provavelmente, você **comprometerá um processo e precisará verificar se pode acessar algum handle vulnerável de qualquer processo privilegiado**.
Neste exemplo, **em vez de abusar do handle aberto para injetar** e executar um shellcode, será **usado o token do processo com handle privilegiado aberto para criar um novo**. Isso é feito nas linhas de 138 a 148.
Observe como a **função `UpdateProcThreadAttribute`** é usada com o **atributo `PROC_THREAD_ATTRIBUTE_PARENT_PROCESS` e o handle para o processo privilegiado aberto**. Isso significa que a **thread do processo criado executando \_cmd.exe**\_\*\* terá o mesmo privilégio de token que o processo com handle aberto\*\*.
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).