<summary><strong>Aprenda hacking 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ê quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**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** em que um **processo privilegiado** com **handles abertos e hereditários** executou um **processo não privilegiado**, dando a ele **acesso a todos esses handles**.
Por exemplo, imagine que **um processo em execução 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ê tiver **acesso total ao processo de baixo privilégio**, você pode pegar o **handle aberto do processo privilegiado criado** com `OpenProcess()` e **injetar um shellcode**.
Como você leu no exemplo inicial, se um **processo não privilegiado herdar um handle de processo** de um **processo privilegiado** com permissões suficientes, ele poderá 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 uma das seguintes permissões:
Semelhante aos handles de processo, se um **processo não privilegiado herdar um handle de thread** de um **processo privilegiado** com permissões suficientes, ele poderá 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 thread que tenha uma das seguintes permissões:
Se um **processo não privilegiado herdar** um **handle** com **permissões equivalentes de escrita** sobre um **arquivo ou registro privilegiado**, ele poderá **sobrescrever** o arquivo/registro (e com muita **sorte**, **escalando privilégios**).
**Handles de Seção** são semelhantes aos handles de arquivo, o nome comum desses tipos de [objetos é **"File Mapping"**](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 meio "similar" à exploração de um Handle de Arquivo.
[**Process Hacker**](https://github.com/processhacker/processhacker) é uma ferramenta que você pode baixar gratuitamente. Possui várias opções incríveis para inspecionar processos e uma delas é a **capacidade de ver os handles de cada processo**.
Observe que para **ver todos os handles de todos os processos, é necessário o SeDebugPrivilege** (portanto, você precisa executar o Process Hacker como administrador).
O binário [**Handles** ](https://docs.microsoft.com/en-us/sysinternals/downloads/handle) da 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 **exploite-os automaticamente** para escalar privilégios.
Agora que você sabe como encontrar os handles dos 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 abusá-lo para escalar privilégios.
Foi mencionado anteriormente 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 estaria vulnerável. O código vulnerável deste binário de serviço está localizado dentro da função **`Exploit`**. Esta função começa **criando um novo processo de handle com acesso total**. Em seguida, ele **cria um processo com baixos privilégios** (copiando o token de baixos privilégios do _explorer.exe_) executando _C:\users\username\desktop\client.exe_. A **vulnerabilidade reside no fato de que está criando o processo com baixos privilégios com `bInheritHandles` como `TRUE`**.
Portanto, este processo de baixos privilégios é capaz de obter o handle do processo de alto privilégio criado primeiro e injetar e executar um shellcode (consulte a próxima seção).
Em um cenário real, você provavelmente **não será capaz de 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 algum processo privilegiado**.
A parte mais interessante deste código está localizada em `GetVulnProcHandle`. Esta função irá **começar a buscar todos os handles**, em seguida, irá **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 acessível é 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 simplesmente **escreverá o shellcode dentro do processo privilegiado e criará uma thread dentro do mesmo processo** para executar o shellcode.
Em um cenário real, você provavelmente **não será capaz de 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 algum processo privilegiado**.
Neste exemplo, **em vez de abusar do handle aberto para injetar** e executar um shellcode, será **utilizado o token do processo com handle aberto privilegiado 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 o **thread do processo criado executando \_cmd.exe**\*\* terá o mesmo privilégio de token que o processo com handle aberto\*\*.
Esta ferramenta permite monitorar handles vazados para encontrar vulneráveis e até mesmo explorá-los automaticamente. Também possui uma ferramenta para vazar um handle.
<summary><strong>Aprenda hacking 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ê deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).