- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
- 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** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](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-lhe **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 com baixos privilégios**, poderá 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 privilégios 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 herda um handle de thread** de um **processo privilegiado** com privilégios 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 processo que tenha uma das seguintes permissões:
Se um **processo não privilegiado herda** um **handle** com **permissões equivalentes de gravação** sobre um **arquivo ou registro privilegiado**, ele poderá **sobrescrever** o arquivo/registro (e com muita **sorte**, **escalar privilégios**).
**Handles de Seção** são semelhantes aos handles de arquivo, o nome comum desses tipos de objetos é **"File Mapping"**. Eles são usados para trabalhar com **grandes arquivos sem manter o arquivo inteiro na memória**. Isso torna a exploração "semelhante" à exploração de um Handle de Arquivo.
[**Process Hacker**](https://github.com/processhacker/processhacker) é uma ferramenta que você pode baixar gratuitamente. Ele tem 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 **autoexploite** 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 pode 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 seria 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, está **criando um processo com 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 que está criando o processo com baixo privilégio com `bInheritHandles` como `TRUE`**.
Portanto, este processo de baixo privilégio é capaz de pegar o handle do processo de alto privilégio criado primeiro e injetar e executar um shellcode (veja 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 qualquer handle vulnerável de qualquer processo privilegiado**.
Neste exemplo, você pode encontrar o código de uma possível exploração para _C:\users\username\desktop\client.exe_.\
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 ela apenas **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 qualquer 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 de 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 a **thread do processo criado executando \_cmd.exe**\_\*\* terá o mesmo privilégio de token que o processo de 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.
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
- 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** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.