
Async BOF para extrair ou renovar automaticamente TGTs Kerberos em um sistema alvo.
Este repositório contém dois Arquivos de Objetos Beacon Assíncronos (BOF). O primeiro, tgt-monitor, monitora o sistema em busca de eventos de logon Kerberos e ativa o agente sempre que um novo TGT Kerberos é capturado. Semelhante ao comando monitor do Rubeus, este BOF é executado indefinidamente e verifica periodicamente o cache de tickets LSA no sistema. Quando um novo TGT é detectado, ele imprime os metadados do ticket e gera um blob kirbi codificado em base64 que pode ser usado para movimento lateral através de ataques pass-the-ticket. O segundo, tgt-renew, renova automaticamente TGTs no sistema se seu tempo de vida restante estiver abaixo de um limite especificado (por exemplo, 15 minutos).
[!Important] Os BOFs neste repositório exigem capacidades de carregamento de arquivos de objeto assíncronos. Essa funcionalidade é fornecida pelo framework Conquest.
Ambos os BOFs exigem execução a partir de um contexto NT AUTHORITY\SYSTEM. Os privilégios são verificados seguindo a mesma lógica.
SeImpersonatePrivilege). O BOF termina se isso também não produzir acesso em nível SYSTEM.As etapas abaixo são repetidas em um loop até que o BOF seja cancelado pelo evento de parada. Um intervalo definido pelo usuário define o atraso entre as verificações.
--user foi fornecido, apenas as sessões correspondentes a esse nome de usuário são consideradas.BeaconWakeup() para forçar o agente a verificar e retornar a saída.
--user foi fornecido, apenas as sessões correspondentes a esse nome de usuário são consideradas.RenewUntil, ele é marcado como expirado e é necessária uma reautenticação.BeaconWakeup().
O processo de renovação de tickets envolve as seguintes etapas:
Este repositório apresenta um Módulo Conquest que implementa os dois comandos a seguir.
O BOF tgt-monitor alerta quando novos TGTs são capturados e os retorna como um blob codificado em Base64. Os seguintes argumentos precisam ser passados para o arquivo de objeto:
| Nome | Tipo | Descrição |
|---|---|---|
interval | int | Tempo limite entre verificações em segundos. |
targetUsers | string | Lista de nomes de usuário alvo separados por vírgula e insensível a maiúsculas/minúsculas. Quando este campo é definido, apenas TGTs para os usuários especificados são recuperados. Caso contrário, TGTs são coletados para todos os usuários. Observe que contas de computador precisam terminar com $. |
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).

O ticket codificado pode ser usado diretamente com Rubeus.exe ptt /ticket:<base64> ou impacket-ticketConverter para movimento lateral adicional, conforme mostrado na captura de tela abaixo. No Conquest, é possível usar o comando ptt para injetar diretamente o ticket na sessão de logon atual para personificar o usuário alvo.

O BOF tgt-renew renova automaticamente tickets que expiram em breve até que não possam mais ser renovados. Os seguintes argumentos precisam ser passados para o arquivo de objeto:
| Nome | Tipo | Descrição |
|---|---|---|
interval | int | Tempo limite entre verificações em segundos. |
threshold | int | Limite de renovação em minutos. O ticket é renovado quando o tempo até o EndTime é menor que este limite. |
targetUsers | string | Lista de nomes de usuário alvo separados por vírgula e insensível a maiúsculas/minúsculas. Quando este campo é definido, apenas TGTs para os usuários especificados são renovados. Caso contrário, TGTs são renovados para todos os usuários. Observe que contas de computador precisam terminar com $. |
targetLuids | string | Lista de LUIDs alvo separados por vírgula e insensível a maiúsculas/minúsculas. Quando este campo é definido, apenas TGTs para os LUIDs especificados são renovados. |
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).
As flags --user e --luid são mutuamente exclusivas.

git clone https://github.com/jakobfriedl/tgt-monitor-bof
cd tgt-monitor-bof
make
A partir daí, use o Gerenciador de Scripts do Conquest para carregar o módulo dist/tgt-monitor.py.
Esta implementação deste Arquivo de Objeto Beacon é baseada nos seguintes projetos: