
Extensión de WinDbg en modo kernel y PoCs para la investigación de privilegios de token.
Extensión en modo kernel de WinDbg y PoCs para probar cómo funcionan los privilegios de token.
Existen repositorios y artículos notables sobre abuso de privilegios de token como Priv2Admin de Grzegorz Tworek. Los códigos en este repositorio están diseñados para ayudar a investigar cómo funcionan los privilegios de token.
Este proyecto cubre cómo obtener privilegios de sistema desde un shell de nivel de integridad alto. Consulte README.md para más detalles.
El objetivo de este proyecto es investigar cómo los atacantes abusan de las vulnerabilidades de escritura arbitraria del kernel. Todos los PoCs están escritos para HackSys Extreme Vulnerable Driver. La mayoría de estos PoCs logran el nivel de integridad SYSTEM abusando de una vulnerabilidad de escritura arbitraria del kernel y de privilegios de token. Probado en Windows 10 versión 1809/1903, pero deberían funcionar en la mayoría de las versiones de Windows 10 teóricamente:
| Nombre del PoC | Descripción |
|---|---|
| CreateAssignTokenVariant | Este PoC realiza EoP con SeCreateTokenPrivilege y SeAssignPrimaryTokenPrivilege. |
| CreateImpersonateTokenVariant | Este PoC realiza EoP con SeCreateTokenPrivilege y SeImpersonatePrivilege. |
| CreateTokenVariant | Este PoC realiza EoP con SeCreateTokenPrivilege. |
| DebugInjectionVariant | Este PoC realiza EoP con SeDebugPrivilege. Utiliza inyección de código en winlogon.exe en la etapa final. |
| DebugUpdateProcVariant | Este PoC realiza EoP con SeDebugPrivilege. Crea un proceso SYSTEM desde winlogon.exe con la API UpdateProcThreadAttribute en la etapa final. |
| RestoreServiceModificationVariant | Este PoC realiza EoP con SeRestorePrivilege. Use HijackShellLib con este PoC. |
| SecondaryLogonVariant | Este PoC realiza EoP con SeCreateTokenPrivilege y SeImpersonatePrivilege. Utiliza el servicio de inicio de sesión secundario en la etapa final. |
| TakeOwnershipServiceModificationVariant | Este PoC realiza EoP con SeTakeOwnershipPrivilege. Use HijackShellLib con este PoC. |
| TcbS4uAssignTokenVariant | Este PoC realiza EoP con SeTcbPrivilege. Obtiene un shell de nivel obligatorio System desde un nivel obligatorio Medium. |
| TcbS4uImpersonationVariant | Este PoC realiza EoP con SeTcbPrivilege. Realiza suplantación de hilo con inicio de sesión S4U. No obtiene nivel de integridad alto o system. |
Advertencia
En algunos entornos, la compilación Debug no funciona. Se prefiere la compilación Release.
PrivEditor es una extensión en modo kernel de WinDbg para manipular el privilegio de token de un proceso específico. Esta extensión facilita la configuración del privilegio de token que desea 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 se utiliza para listar procesos en el sistema objetivo:```
0: kd> !getps /?
!getps - List processes in target system.
Usage : !getps [Process Name]
Process Name : (OPTIONAL) Specifies filter string for process name.
Si ejecutas este comando sin argumentos, este comando lista todos los procesos en tu sistema objetivo de la siguiente manera:``` 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--
Si quieres conocer procesos específicos, configura el filtro de cadena de la siguiente manera.
El filtro funciona con coincidencia hacia adelante y no distingue mayúsculas de minúsculas:```
0: kd> !getps micro