Cómo manipular y suplantar tokens para escalar privilegios en Windows con PYTMIPE
PYTMIPE (abreviatura de (PYthon library for Token Manipulation and Impersonation for Privilege Escalation). PYTMIPE es una biblioteca de Python 3 para manipular tokens de Windows y gestionar suplantaciones con el fin de obtener más privilegios en Windows. TMIPE es el cliente de Python 3 que usa la biblioteca pytmipe.
Contenido
- Un cliente de Python: tmipe (python3 tmipe.py)
- Una biblioteca de Python: pytmipe. Útil para incluir este proyecto en otro
- Ejemplos de pytinstaller, para obtener archivos exes independientes
Principales características
Método | Privilegio (s) requerido (s) | Sistema operativo (no exhaustivo) | Objetivo directo (máximo) |
Creación y suplantación de tokens | Usuario y Contraseña | Todos | Administrador local |
Suplantación de identidad/robo de tokens | SeDebugPrivilege | Todos | nt authority\system |
Suplantación de PID principal (controlar la herencia) | SeDebugPrivilege | >= Vista | nt authority\system |
Servicio (SCM) | Administrador local (y alto nivel de integridad si UAC está habilitado) | Todos | nt authority\system o cuenta de dominio |
WMI Event | Administrador local (y alto nivel de integridad si UAC está habilitado) | Todos | nt authority\system |
“Printer Bug” LPE | SeImpersonatePrivilege (cuenta de servicio) | Windows 8.1, 10 y Server 2012R2/2016/2019 | nt authority\system |
RPCSS Service LPE | SeImpersonatePrivilege (cuenta de servicio) | Windows 10 y Server 2016/2019 | nt authority\system |
Capacidades
La siguiente lista no exhaustiva muestra algunas características implementadas en la biblioteca de pytmipe:
- Gestión de tokens y privilegios:
- Obtener, habilitar o deshabilitar privilegios en el token para el hilo actual o remoto
- Poder obtener información de token local o remoto
- Obtener un token efectivo para el hilo actual (suplantación o token principal)
- Obtener mucha información sobre los tokens seleccionados:
- Tipo de elevación, tipo de suplantación, token vinculado con detalles, SID, ACL, grupos predeterminados, grupo principal, propietario, privilegios, fuente
- Enumerar todos los tokens que son accesibles (tokens primarios y de suplantación) desde el hilo actual:
- 2 métodos diferentes implementados: método “thread” y método “handle“ (favorito)
- Comprobar si se puede suplantar el token
- Obtener información sobre cada token (tipo de elevación, tipo de suplantación, token vinculado, SID, etc.)
- Obtener todos los tokens a los que se puede acceder por nombre de cuenta (SID)
- Suplantar un token o usuario:
- Hacer un token y suplantar (requiere credenciales de usuario)
- Suplantación/robo de token (se requieren privilegios específicos): suplantar un token elegido
- Crear proceso con un token (se requieren privilegios específicos): suplantar un token elegido y crear un nuevo proceso
- Suplantar el primer token del nt authority\system encontrado
- Suplantar el token primario del proceso remoto con PID
Métodos de escalada de privilegios:
- Suplantación de PID principal: herencia de control
- Administrador de servicios mediante comando directo o suplantación de tuberías con nombre: administrador local para el nt authority\system (u otra cuenta con privilegios)
- Programador de tareas mediante comando directo o suplantación de tuberías con nombre: administrador local al nt authority\system
- WMI Job mediante comando directo o suplantación de tubería con nombre: administrador local al nt authority\system
- Printer Bug: SeImpersonatePrivilege al nt authority\system
- RPCSS: SeImpersonatePrivilege al nt authority\system
- Volver a habilitar los privilegios mediante la programación de tareas y la suplantación de tuberías con nombre
Dependencias
ctypes se utiliza un máximo de tiempo. Muchas características de pywin32 se han vuelto a desarrollar en pytmipe para evitar el uso de pywin32 para una mejor portabilidad. Sin embargo, el módulo del Programador de tareas todavía usa pywin32 (más precisamente pythoncom) por falta de tiempo. Todos los demás módulos usan solo ctypes.
Cómo utilizarlo
Para el cliente de Python (llamado 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 (quentin.hardy@protonmail.com)
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
Para la biblioteca de Python (llamada pytmipe), debes consultar el código fuente y los ejemplos. Normalmente, está bien documentado el código fuente … La mayoría de las funciones están documentadas.
Para obtener ejemplos de pyinstaller e independientes, debes consultar los archivos en las carpetas src/examples/.