
Extensão do WinDbg em modo kernel e PoCs para investigação de privilégios de token.
Extensão do WinDbg em modo kernel e PoCs para testar como as permissões de token funcionam.
Existem repositórios e artigos notáveis sobre abuso de privilégios de token, como o Priv2Admin de Grzegorz Tworek. Os códigos neste repositório têm o objetivo de ajudar a investigar como as permissões de token funcionam.
Este projeto aborda como obter privilégios de sistema a partir de um shell de nível de integridade alto. Consulte README.md para obter detalhes.
O objetivo deste projeto é investigar como atacantes abusam de vulnerabilidades de escrita arbitrária no kernel. Todos os PoCs foram escritos para o HackSys Extreme Vulnerable Driver. A maioria desses PoCs realiza a obtenção do nível de integridade SYSTEM abusando de vulnerabilidades de escrita arbitrária no kernel e de permissões de token. Testado no Windows 10 versão 1809/1903, mas devem funcionar na maioria das versões do Windows 10 teoricamente:
| Nome do PoC | Descrição |
|---|---|
| CreateAssignTokenVariant | Este PoC realiza EoP com SeCreateTokenPrivilege e SeAssignPrimaryTokenPrivilege. |
| CreateImpersonateTokenVariant | Este PoC realiza EoP com SeCreateTokenPrivilege e SeImpersonatePrivilege. |
| CreateTokenVariant | Este PoC realiza EoP com SeCreateTokenPrivilege. |
| DebugInjectionVariant | Este PoC realiza EoP com SeDebugPrivilege. Usa injeção de código no winlogon.exe no estágio final. |
| DebugUpdateProcVariant | Este PoC realiza EoP com SeDebugPrivilege. Cria um processo SYSTEM a partir do winlogon.exe com a API UpdateProcThreadAttribute no estágio final. |
| RestoreServiceModificationVariant | Este PoC realiza EoP com SeRestorePrivilege. Use HijackShellLib com este PoC. |
| SecondaryLogonVariant | Este PoC realiza EoP com SeCreateTokenPrivilege e SeImpersonatePrivilege. Usa o serviço de logon secundário no estágio final. |
| TakeOwnershipServiceModificationVariant | Este PoC realiza EoP com SeTakeOwnershipPrivilege. Use HijackShellLib com este PoC. |
| TcbS4uAssignTokenVariant | Este PoC realiza EoP com SeTcbPrivilege. Obtém um shell de nível obrigatório SYSTEM a partir do nível obrigatório médio. |
| TcbS4uImpersonationVariant | Este PoC realiza EoP com SeTcbPrivilege. Realiza a personificação de thread com logon S4U. Não obtém nível de integridade alto ou SYSTEM. |
Aviso
Em alguns ambientes, a compilação Debug não funciona. A compilação Release é preferível.
PrivEditor é uma extensão do WinDbg em modo kernel para manipular a permissão de token de um processo específico. Esta extensão facilita a configuração da permissão de token que você deseja investigar:``` 0: kd> .load C:\dev\PrivEditor\x64\Release\PrivEditor.dll
PrivEditor - Kernel Mode WinDbg extension for token privilege edit.
Commands : + !getps : List processes in target system. + !getpriv : List privileges of a process. + !addpriv : Add privilege(s) to a process. + !rmpriv : Remove privilege(s) from a process. + !enablepriv : Enable privilege(s) of a process. + !disablepriv : Disable privilege(s) of a process. + !enableall : Enable all privileges available to a process. + !disableall : Disable all privileges available to a process.
[*] To see command help, execute "! help" or "! /?".
### Comando getps
Este comando serve para listar processos no seu sistema alvo:```
0: kd> !getps /?
!getps - List processes in target system.
Usage : !getps [Process Name]
Process Name : (OPTIONAL) Specifies filter string for process name.
Se você executar este comando sem argumentos, este comando lista todos os processos no seu sistema alvo da seguinte forma:``` 0: kd> !getps
PID nt!_EPROCESS nt!_SEP_TOKEN_PRIVILEGES Process Name
======== =================== ======================== ============
0 0xfffff80581233630 0x0000000000000000 Idle
4 0xffffd60fec068380 0xffffaf00cec07a40 System
68 0xffffd60ff1780480 0xffffaf00d3b290a0 svchost.exe
88 0xffffd60fec0db080 0xffffaf00cec0d080 Registry
324 0xffffd60fef342040 0xffffaf00d0416080 smss.exe
348 0xffffd60ff052f100 0xffffaf00d25d30a0 dwm.exe
408 0xffffd60feca8e140 0xffffaf00d21bd930 csrss.exe
480 0xffffd60ff05a8340 0xffffaf00d2568670 svchost.exe
484 0xffffd60fefcd60c0 0xffffaf00d06430e0 wininit.exe
500 0xffffd60fefd130c0 0xffffaf00d23100a0 csrss.exe
580 0xffffd60fefdc0080 0xffffaf00d2266630 winlogon.exe
--snip--
Se você quiser saber sobre processos específicos, defina o filtro de string da seguinte forma:
O filtro funciona com correspondência direta e sem distinção entre maiúsculas e minúsculas:```
0: kd> !getps micro