
Async BOF pour extraire ou renouveler automatiquement les TGTs Kerberos sur un système cible.
Ce dépôt contient deux fichiers objets de beacon asynchrones (BOF). Le premier, tgt-monitor, surveille le système pour les événements d'ouverture de session Kerberos et réveille l'agent dès qu'un nouveau TGT Kerberos est capturé. Similaire à la commande monitor de Rubeus, ce BOF s'exécute indéfiniment et vérifie périodiquement le cache de tickets LSA du système. Lorsqu'un nouveau TGT est détecté, il imprime les métadonnées du ticket et produit un blob kirbi encodé en base64 qui peut être utilisé pour un mouvement latéral via des attaques pass-the-ticket. Le second, tgt-renew, renouvelle automatiquement les TGT du système si leur durée de vie restante est inférieure à un seuil spécifié (par exemple, 15 minutes).
[!Important] Les BOF de ce dépôt nécessitent des capacités de chargement de fichiers objets asynchrones. Une telle fonctionnalité est fournie par le framework Conquest.
Les deux BOF nécessitent d'être exécutés depuis un contexte NT AUTHORITY\SYSTEM. Les privilèges sont vérifiés selon la même logique.
SeImpersonatePrivilege). Le BOF se termine si cela ne donne pas non plus un accès de niveau SYSTEM.Les étapes ci-dessous sont répétées en boucle jusqu'à ce que le BOF soit annulé via l'événement d'arrêt. Un intervalle défini par l'utilisateur définit le délai entre les sondages.
--user a été fourni, seules les sessions correspondant à ce nom d'utilisateur sont prises en compte.BeaconWakeup() pour forcer l'agent à se signaler et renvoyer la sortie.
--user a été fourni, seules les sessions correspondant à ce nom d'utilisateur sont prises en compte.RenewUntil, il est marqué comme expiré et une ré-authentification est nécessaire.BeaconWakeup().
Le processus de renouvellement du ticket comprend les étapes suivantes :
Ce dépôt propose un Module Conquest qui implémente les deux commandes suivantes.
Le BOF tgt-monitor alerte lorsque de nouveaux TGT sont capturés et les renvoie sous forme de blob encodé en Base64. Les arguments suivants doivent être passés au fichier objet :
| Nom | Type | Description |
|---|---|---|
interval | int | Délai entre les vérifications en secondes. |
targetUsers | string | Liste insensible à la casse, séparée par des virgules, des noms d'utilisateurs cibles. Lorsque ce champ est défini, seuls les TGT des utilisateurs spécifiés sont récupérés. Sinon, les TGT sont collectés pour tous les utilisateurs. Notez que les comptes d'ordinateur doivent se terminer par $. |
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).

Le ticket encodé peut être utilisé directement avec Rubeus.exe ptt /ticket:<base64> ou impacket-ticketConverter pour un mouvement latéral ultérieur, comme illustré dans la capture d'écran ci-dessous. Dans Conquest, il est possible d'utiliser la commande ptt pour injecter directement le ticket dans la session d'ouverture de session actuelle afin d'usurper l'utilisateur cible.

Le BOF tgt-renew renouvelle automatiquement les tickets qui expirent bientôt jusqu'à ce qu'ils ne puissent plus être renouvelés. Les arguments suivants doivent être passés au fichier objet :
| Nom | Type | Description |
|---|---|---|
interval | int | Délai entre les vérifications en secondes. |
threshold | int | Seuil de renouvellement en minutes. Le ticket est renouvelé lorsque le temps restant jusqu'à EndTime est inférieur à ce seuil. |
targetUsers | string | Liste insensible à la casse, séparée par des virgules, des noms d'utilisateurs cibles. Lorsque ce champ est défini, seuls les TGT des utilisateurs spécifiés sont renouvelés. Sinon, les TGT sont renouvelés pour tous les utilisateurs. Notez que les comptes d'ordinateur doivent se terminer par $. |
targetLuids | string | Liste insensible à la casse, séparée par des virgules, des LUID cibles. Lorsque ce champ est défini, seuls les TGT des LUID spécifiés sont renouvelés. |
Usage: tgt-renew [--interval seconds] [--threshold minutes] [--user user] [--luid luid]
Example: tgt-renew --luid 0x3e4 --interval 300 --threshold 30