
Estensione in modalità kernel per WinDbg e PoC per l'indagine sui privilegi dei token.
Estensione WinDbg in modalità kernel e PoC per testare come funzionano i privilegi del token.
Esistono repository e articoli notevoli sull'abuso dei privilegi dei token come Priv2Admin di Grzegorz Tworek. I codici in questo repository sono pensati per aiutare a indagare su come funzionano i privilegi del token.
Questo progetto copre come ottenere privilegi di sistema da una shell con livello di integrità alto. Vedi README.md per i dettagli.
Lo scopo di questo progetto è indagare su come gli attaccanti abusano delle vulnerabilità di scrittura arbitraria nel kernel. Tutti i PoC sono scritti per HackSys Extreme Vulnerable Driver. La maggior parte di questi PoC ottengono il livello di integrità SYSTEM abusando di vulnerabilità di scrittura arbitraria nel kernel e dei privilegi del token. Testati su Windows 10 versione 1809/1903, ma in teoria dovrebbero funzionare sulla maggior parte delle versioni di Windows 10:
| PoC Name | Description |
|---|---|
| CreateAssignTokenVariant | Questo PoC esegue EoP con SeCreateTokenPrivilege e SeAssignPrimaryTokenPrivilege. |
| CreateImpersonateTokenVariant | Questo PoC esegue EoP con SeCreateTokenPrivilege e SeImpersonatePrivilege. |
| CreateTokenVariant | Questo PoC esegue EoP con SeCreateTokenPrivilege. |
| DebugInjectionVariant | Questo PoC esegue EoP con SeDebugPrivilege. Usa l'iniezione di codice in winlogon.exe nella fase finale. |
| DebugUpdateProcVariant | Questo PoC esegue EoP con SeDebugPrivilege. Crea un processo SYSTEM da winlogon.exe con l'API UpdateProcThreadAttribute nella fase finale. |
| RestoreServiceModificationVariant | Questo PoC esegue EoP con SeRestorePrivilege. Usa HijackShellLib con questo PoC. |
| SecondaryLogonVariant | Questo PoC esegue EoP con SeCreateTokenPrivilege e SeImpersonatePrivilege. Usa il servizio di logon secondario nella fase finale. |
| TakeOwnershipServiceModificationVariant | Questo PoC esegue EoP con SeTakeOwnershipPrivilege. Usa HijackShellLib con questo PoC. |
| TcbS4uAssignTokenVariant | Questo PoC esegue EoP con SeTcbPrivilege. Ottiene una shell con livello di integrità System da un livello di integrità medio. |
| TcbS4uImpersonationVariant | Questo PoC esegue EoP con SeTcbPrivilege. Esegue l'impersonificazione del thread con logon S4U. Non ottiene il livello di integrità alto o System. |
Warning
In alcuni ambienti, la build Debug non funziona. È preferibile la build Release.
PrivEditor è un'estensione WinDbg in modalità kernel per manipolare il privilegio del token di un processo specifico. Questa estensione rende facile configurare il privilegio del token che si desidera investigare:``` 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 "! /?".
### getps Command
Questo comando serve per elencare i processi nel sistema target:```
0: kd> !getps /?
!getps - List processes in target system.
Usage : !getps [Process Name]
Process Name : (OPTIONAL) Specifies filter string for process name.
Se esegui questo comando senza argomenti, elenca tutti i processi nel sistema di destinazione come segue:``` 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 vuoi conoscere processi specifici, imposta il filtro stringa come segue.
Il filtro funziona con corrispondenza in avanti e non fa distinzione tra maiuscole e minuscole:```
0: kd> !getps micro