
Python-Bibliothek und Client für Token-Manipulationen und Identitätswechsel zur Privilegienerweiterung auf Windows
PYTMIPE (PYthon-Bibliothek für Token-Manipulation und Impersonation zur Privilegienausweitung) ist eine Python 3 Bibliothek zur Manipulation von Windows-Tokens und zur Verwaltung von Impersonationen, um auf Windows mehr Privilegien zu erlangen. TMIPE ist der Python 3-Client, der die pytmipe-Bibliothek verwendet.
Folien „Windows Token Manipulation, Impersonation & Privilege Escalation“ (Englisch): Link
Artikel in MISC 112 (Französisch): Link
| Methode | Erforderliche Berechtigung(en) | Betriebssystem (nicht abschließend) | Direktes Ziel (max) |
|---|---|---|---|
| Token-Erstellung und -Impersonation | Benutzername und Passwort | Alle | Lokaler Administrator |
| Token-Impersonation/-Diebstahl | SeDebugPrivilege | Alle | nt authority\system |
| Parent-PID-Spoofing (Handle-Vererbung) | SeDebugPrivilege | >= Vista | nt authority\system |
| Dienst (SCM) | Lokaler Administrator (und hohe Integritätsstufe, falls UAC aktiviert) | Alle | nt authority\system oder Domänenkonto |
| WMI-Ereignis | Lokaler Administrator (und hohe Integritätsstufe, falls UAC aktiviert) | Alle | nt authority\system |
| „Printer Bug“ LPE | SeImpersonatePrivilege (Dienstkonto) | Windows 8.1, 10 & Server 2012R2/2016/2019 | nt authority\system |
| RPCSS-Dienst LPE | SeImpersonatePrivilege (Dienstkonto) | Windows 10 & Server 2016/2019 | nt authority\system |
Die folgende nicht abschließende Liste zeigt einige in der pytmipe-Bibliothek implementierte Funktionen:
ctypes wird so weit wie möglich verwendet. Viele Funktionen von pywin32 wurden in pytmipe neu entwickelt, um die Verwendung von pywin32 zu vermeiden und eine bessere Portabilität zu erreichen. Das Modul für die Aufgabenplanung verwendet jedoch aus Zeitmangel weiterhin pywin32 (genauer pythoncom). Alle anderen Module verwenden nur ctypes.
Für den Python-Client (genannt tmipe):
python.exe tmipe.py -h
usage: tmipe.py [-h] [--version]
{cangetadmin,printalltokens,printalltokensbyname,printalltokensbypid,printsystemtokens,searchimpfirstsystem,imppid,imptoken,printerbug,rpcss,spoof,impuser,runas,scm}
...
**
888888 8b d8 88 88""Yb 888888
88 88b d88 88 88__dP 88__
88 88YbdP88 88 88""" 88""
88 88 YY 88 88 88 888888
-------------------------------------------
Token Manipulation, Impersonation and
Privilege Escalation (Tool)
-------------------------------------------
By Quentin HARDY ([email protected])
positional arguments:
{cangetadmin,printalltokens,printalltokensbyname,printalltokensbypid,printsystemtokens,searchimpfirstsystem,imppid,imptoken,printerbug,rpcss,spoof,impuser,runas,scm}
Choose a main command
cangetadmin Check if user can get admin access
printalltokens Print all tokens accessible from current thread
printalltokensbyname
Print all tokens accessible from current thread by account name
printalltokensbypid Print all tokens accessible from current thread by pid
printsystemtokens Print all system tokens accessible from current
searchimpfirstsystem
search and impersonate first system token
imppid impersonate primary token of selected pid and try to spawn cmd.exe
imptoken impersonate primary or impersonation token of selected pid/handle and try to spawn cmd.exe
printerbug exploit the "printer bug" for getting system shell
rpcss exploit "rpcss" for getting system shell
spoof parent PID Spoofing ("handle inheritance)"
impuser create process with creds with impersonation
runas create process with creds as runas
scm create process with Service Control Manager
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
Für die Python-Bibliothek (genannt pytmipe) siehe Quellcode und Beispiele. Normalerweise habe ich den Quellcode gut dokumentiert… Die meisten Funktionen sind dokumentiert.
Für die pyinstaller-Beispiele und Standalones siehe Dateien im Ordner src/examples/.
Wenn Sie wissen möchten, wie Sie die pytmipe-Bibliothek verwenden, sehen Sie sich den Ordner src/examples für viele Beispiele an.
Um das erste system-Token zu impersonieren und eine cmd.exe-Eingabeaufforderung als system über den Python-Client (tmipe) zu erhalten:
python.exe tmipe.py searchimpfirstsystem -vv
Um dasselbe direkt mit der pytmipe-Bibliothek zu tun, siehe src/examples/searchAndImpersonateFirstSystemToken.py:
from impersonate import Impersonate
from utils import configureLogging