
Async BOF per estrarre o rinnovare automaticamente i TGT Kerberos su un sistema target.
Questo repository contiene due file oggetto BOF asincroni (Async Beacon Object File). Il primo, tgt-monitor, monitora il sistema per eventi di accesso Kerberos e risveglia l'agente ogni volta che viene catturato un nuovo TGT Kerberos. Simile al comando monitor di Rubeus, questo BOF viene eseguito indefinitamente e controlla periodicamente la cache dei ticket LSA sul sistema. Quando viene rilevato un nuovo TGT, stampa i metadati del ticket e produce un blob kirbi codificato in base64 che può essere utilizzato per movimenti laterali tramite attacchi pass-the-ticket. Il secondo, tgt-renew, rinnova automaticamente i TGT sul sistema se il loro tempo di vita residuo è inferiore a una soglia specificata (ad esempio 15 minuti).
[!Importante] I BOF in questo repository richiedono capacità di caricamento asincrono di file oggetto. Tale funzionalità è fornita dal framework Conquest.
Entrambi i BOF devono essere eseguiti in un contesto NT AUTHORITY\SYSTEM. I privilegi vengono verificati seguendo la stessa logica.
SeImpersonatePrivilege). Il BOF termina se anche questo non produce un accesso a livello SYSTEM.I passaggi seguenti vengono ripetuti in un ciclo finché il BOF non viene annullato tramite l'evento di stop. Un intervallo definito dall'utente imposta il ritardo tra i sondaggi.
--user, vengono considerate solo le sessioni corrispondenti a quel nome utente.BeaconWakeup() per forzare l'agente a effettuare il check-in e restituire l'output.
--user, vengono considerate solo le sessioni corrispondenti a quel nome utente.RenewUntil, viene contrassegnato come scaduto ed è necessaria la riautenticazione.BeaconWakeup().
Il processo di rinnovo del ticket prevede i seguenti passaggi:
Questo repository include un Modulo Conquest che implementa i seguenti due comandi.
Il BOF tgt-monitor avvisa quando vengono catturati nuovi TGT e li restituisce come blob codificato in Base64. I seguenti argomenti devono essere passati al file oggetto:
| Name | Type | Description |
|---|---|---|
interval | int | Timeout tra i controlli in secondi. |
targetUsers | string | Elenco di nomi utente target separati da virgole, senza distinzione tra maiuscole e minuscole. Quando questo campo è impostato, vengono recuperati solo i TGT per gli utenti specificati. Altrimenti, i TGT vengono raccolti per tutti gli utenti. Nota che gli account computer devono terminare con $. |
Usage: tgt-monitor [--interval interval] [--user user]
Example: tgt-monitor --interval 5 --user DC01$
Optional arguments:
--interval interval INT Polling interval in seconds (default: 60).
--user user STRING Comma-separated list of target usernames (default: all users).

Il ticket codificato può essere utilizzato direttamente con Rubeus.exe ptt /ticket:<base64> o impacket-ticketConverter per ulteriori movimenti laterali, come mostrato nello screenshot sottostante. In Conquest, è possibile utilizzare il comando ptt per iniettare direttamente il ticket nella sessione di accesso corrente e impersonare l'utente target.

Il BOF tgt-renew rinnova automaticamente i ticket in scadenza finché non possono più essere rinnovati. I seguenti argomenti devono essere passati al file oggetto:
| Name | Type | Description |
|---|---|---|
interval | int | Timeout tra i controlli in secondi. |
threshold | int | Soglia di rinnovo in minuti. Il ticket viene rinnovato quando il tempo fino a EndTime è inferiore a questa soglia. |
targetUsers | string | Elenco di nomi utente target separati da virgole, senza distinzione tra maiuscole e minuscole. Quando questo campo è impostato, vengono rinnovati solo i TGT per gli utenti specificati. Altrimenti, i TGT vengono rinnovati per tutti gli utenti. Nota che gli account computer devono terminare con $. |
targetLuids | string | Elenco di LUID target separati da virgole, senza distinzione tra maiuscole e minuscole. Quando questo campo è impostato, vengono rinnovati solo i TGT per i LUID specificati. |
Usage: tgt-renew [--interval seconds] [--threshold minutes] [--user user] [--luid luid]
Example: tgt-renew --luid 0x3e4 --interval 300 --threshold 30
Optional arguments:
--interval seconds INT Polling interval in seconds (default: 60).
--threshold minutes INT Ticket renewal threshold in minutes (default: 15).
--user user STRING Comma-separated list of target usernames (default: all users).
--luid luid STRING Comma-separated list of target LUIDs (default: all LUIDs).
I flag --user e --luid si escludono a vicenda.

git clone https://github.com/jakobfriedl/tgt-monitor-bof
cd tgt-monitor-bof
make
Da lì, utilizzare il Gestore Script di Conquest per caricare il modulo dist/tgt-monitor.py.
L'implementazione di questo Beacon Object File si basa sui seguenti progetti: