
Библиотека Python и клиент для манипуляций с токенами и олицетворения для повышения привилегий в Windows
PYTMIPE (PYthon library for Token Manipulation and Impersonation for Privilege Escalation) — это библиотека Python 3 для манипуляции токенами Windows и управления имитацией с целью получения дополнительных привилегий в Windows. TMIPE — это клиент Python 3, который использует библиотеку pytmipe.
Слайды «Манипуляция токенами Windows, имитация и повышение привилегий» (английский): ссылка
Статья в MISC 112 (французский): ссылка
| Метод | Необходимые привилегии | ОС (не полный список) | Прямая цель (макс.) |
|---|---|---|---|
| Создание токена и имитация | имя пользователя и пароль | Все | локальный администратор |
| Имитация/кража токена | SeDebugPrivilege | Все | nt authority\system |
| Подмена родительского PID (наследование дескрипторов) | SeDebugPrivilege | >= Vista | nt authority\system |
| Служба (SCM) | Локальный администратор (и высокий уровень целостности, если включён UAC) | Все | nt authority\system или учётная запись домена |
| Событие WMI | Локальный администратор (и высокий уровень целостности, если включён UAC) | Все | nt authority\system |
| LPE «Printer Bug» | SeImpersonatePrivilege (учётная запись службы) | Windows 8.1, 10 и Server 2012R2/2016/2019 | nt authority\system |
| LPE службы RPCSS | SeImpersonatePrivilege (учётная запись службы) | Windows 10 и Server 2016/2019 | nt authority\system |
Следующий неполный список показывает некоторые функции, реализованные в библиотеке pytmipe:
В основном используется ctypes. Многие функции pywin32 были переработаны в pytmipe, чтобы избежать использования pywin32 для лучшей переносимости. Однако модуль планировщика задач всё ещё использует pywin32 (точнее pythoncom) из-за нехватки времени. Все остальные модули используют только ctypes.
Для клиента на Python (с именем 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}
Выберите основную команду
cangetadmin Проверить, может ли пользователь получить доступ администратора
printalltokens Вывести все токены, доступные из текущего потока
printalltokensbyname
Вывести все токены, доступные из текущего потока, по имени учётной записи
printalltokensbypid Вывести все токены, доступные из текущего потока, по PID
printsystemtokens Вывести все системные токены, доступные из текущего
searchimpfirstsystem
Найти и имитировать первый системный токен
imppid Имитировать первичный токен выбранного PID и попытаться запустить cmd.exe
imptoken Имитировать первичный токен или токен имитации выбранного PID/дескриптора и попытаться запустить cmd.exe
printerbug Эксплуатировать «printer bug» для получения системной оболочки
rpcss Эксплуатировать «rpcss» для получения системной оболочки
spoof Подмена родительского PID («наследование дескрипторов»)
impuser Создать процесс с учётными данными с имитацией
runas Создать процесс с учётными данными как runas
scm Создать процесс с помощью Service Control Manager
optional arguments:
-h, --help Показать это справочное сообщение и выйти
--version Показать номер версии программы и выйти
Для библиотеки на Python (с именем pytmipe) см. исходный код и примеры. Обычно я хорошо документирую исходный код... Большинство функций документированы.
Для примеров с pyinstaller и автономных файлов см. папки src/examples/.
Если вы хотите узнать, как использовать библиотеку pytimpe, смотрите папку src/examples с многочисленными примерами.
Для имитации первого системного токена и получения приглашения cmd.exe от имени system из клиента на Python (tmipe):
python.exe tmipe.py searchimpfirstsystem -vv
Для того же самого с использованием библиотеки pytmipe напрямую см. src/examples/searchAndImpersonateFirstSystemToken.py:
from impersonate import Impersonate
from utils import configureLogging