
Kernel-Modus WinDbg-Erweiterung und PoCs zur Untersuchung von Token-Berechtigungen.
Kernel-Mode WinDbg-Erweiterung und PoCs zum Testen der Funktionsweise von Token-Berechtigungen.
Es gibt bemerkenswerte Repositorys und Artikel über den Missbrauch von Token-Berechtigungen, wie Grzegorz Tworek's Priv2Admin. Die Codes in diesem Repository sollen dabei helfen zu untersuchen, wie Token-Berechtigungen funktionieren.
Dieses Projekt behandelt, wie Systemberechtigungen von einer Shell mit hoher Integritätsstufe erlangt werden können. Siehe README.md für Details.
Der Zweck dieses Projekts ist es zu untersuchen, wie Angreifer Schwachstellen mit beliebigem Kernel-Schreibzugriff ausnutzen. Alle PoCs sind für den HackSys Extreme Vulnerable Driver geschrieben. Die meisten dieser PoCs führen zur Erlangung der SYSTEM-Integritätsstufe durch Missbrauch einer Schwachstelle mit beliebigem Kernel-Schreibzugriff und Token-Berechtigungen. Getestet auf Windows 10 Version 1809/1903, sollten aber theoretisch auf den meisten Windows 10-Versionen funktionieren:
| PoC-Name | Beschreibung |
|---|---|
| CreateAssignTokenVariant | Dieses PoC führt EoP mit SeCreateTokenPrivilege und SeAssignPrimaryTokenPrivilege durch. |
| CreateImpersonateTokenVariant | Dieses PoC führt EoP mit SeCreateTokenPrivilege und SeImpersonatePrivilege durch. |
| CreateTokenVariant | Dieses PoC führt EoP mit SeCreateTokenPrivilege durch. |
| DebugInjectionVariant | Dieses PoC führt EoP mit SeDebugPrivilege durch. Verwendet Code-Injection in winlogon.exe in der Endphase. |
| DebugUpdateProcVariant | Dieses PoC führt EoP mit SeDebugPrivilege durch. Erstellt einen SYSTEM-Prozess aus winlogon.exe mit der UpdateProcThreadAttribute-API in der Endphase. |
| RestoreServiceModificationVariant | Dieses PoC führt EoP mit SeRestorePrivilege durch. Verwenden Sie HijackShellLib mit diesem PoC. |
| SecondaryLogonVariant | Dieses PoC führt EoP mit SeCreateTokenPrivilege und SeImpersonatePrivilege durch. Verwendet den sekundären Anmeldedienst in der Endphase. |
| TakeOwnershipServiceModificationVariant | Dieses PoC führt EoP mit SeTakeOwnershipPrivilege durch. Verwenden Sie HijackShellLib mit diesem PoC. |
| TcbS4uAssignTokenVariant | Dieses PoC führt EoP mit SeTcbPrivilege durch. Erlangt eine Shell mit System-Mandatory-Level von einer Shell mit Medium-Mandatory-Level. |
| TcbS4uImpersonationVariant | Dieses PoC führt EoP mit SeTcbPrivilege durch. Führt eine Thread-Impersonation mit S4U-Anmeldung durch. Erlangt keine hohe oder System-Integritätsstufe. |
Warnung
In manchen Umgebungen funktioniert der Debug-Build nicht. Der Release-Build wird bevorzugt.
PrivEditor ist eine Kernel-Mode WinDbg-Erweiterung zur Manipulation von Token-Berechtigungen eines bestimmten Prozesses. Diese Erweiterung erleichtert die Konfiguration der gewünschten Token-Berechtigung für Untersuchungen:``` 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 Befehl
Dieser Befehl listet Prozesse in Ihrem Zielsystem auf:```
0: kd> !getps /?
!getps - List processes in target system.
Usage : !getps [Process Name]
Process Name : (OPTIONAL) Specifies filter string for process name.
Wenn Sie diesen Befehl ohne Argumente ausführen, listet dieser Befehl alle Prozesse in Ihrem Zielsystem wie folgt auf:``` 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--
Wenn Sie bestimmte Prozesse kennen möchten, stellen Sie den Zeichenfolgenfilter wie folgt ein. Der Filter arbeitet mit Vorwärtsvergleich und Groß-/Kleinschreibung ohne Beachtung:```
0: kd> !getps micro