6.4 KiB
88tcp/udp - Pentesting Kerberos
{{#include ../../banners/hacktricks-training.md}}
Informations de base
Kerberos fonctionne sur un principe où il authentifie les utilisateurs sans gérer directement leur accès aux ressources. C'est une distinction importante car cela souligne le rôle du protocole dans les cadres de sécurité.
Dans des environnements comme Active Directory, Kerberos joue un rôle essentiel pour établir l'identité des utilisateurs en validant leurs mots de passe secrets. Ce processus garantit que l'identité de chaque utilisateur est confirmée avant qu'il n'interagisse avec les ressources du réseau. Cependant, Kerberos n'étend pas sa fonctionnalité à l'évaluation ou à l'application des permissions qu'un utilisateur possède sur des ressources ou services spécifiques. À la place, il fournit un moyen sécurisé d'authentifier les utilisateurs, ce qui constitue une première étape critique dans le processus de sécurité.
Après l'authentification par Kerberos, le processus de prise de décision concernant l'accès aux ressources est délégué aux services individuels au sein du réseau. Ces services sont alors responsables d'évaluer les droits et permissions de l'utilisateur authentifié, sur la base des informations fournies par Kerberos à propos des privilèges de l'utilisateur. Cette conception permet une séparation des responsabilités entre l'authentification de l'identité des utilisateurs et la gestion de leurs droits d'accès, permettant une approche plus flexible et plus sûre de la gestion des ressources dans les réseaux distribués.
Port par défaut: 88/tcp/udp
PORT STATE SERVICE
88/tcp open kerberos-sec
Pour apprendre à abuser Kerberos, vous devriez lire l'article sur Active Directory.
Environnements Kerberos uniquement : préparation du client et dépannage
Lorsque NTLM est désactivé sur les services de domaine (SMB/WinRM/etc.), vous devez vous authentifier avec Kerberos. Pièges courants et workflow opérationnel :
- La synchronisation de l'heure est obligatoire. Si l'horloge de votre hôte dérive de plus de quelques minutes, vous verrez
KRB_AP_ERR_SKEW
et toute l'authentification Kerberos échouera. Synchronisez par rapport au DC:
# quick one-shot sync (requires sudo)
sudo ntpdate <dc.fqdn> || sudo chronyd -q 'server <dc.fqdn> iburst'
- Générez un krb5.conf valide pour le realm/domaine cible.
netexec
(fork de CME) peut en produire un pour vous lors des tests SMB:
# Generate krb5.conf and install it
netexec smb <dc.fqdn> -u <user> -p '<pass>' -k --generate-krb5-file krb5.conf
sudo cp krb5.conf /etc/krb5.conf
- Obtenir un TGT et vérifier le ccache:
kinit <user>
klist
- Utiliser Kerberos avec des outils SMB (aucun mot de passe envoyé, utilise votre ccache):
# netexec / CME
netexec smb <dc.fqdn> -k # lists shares, runs modules using Kerberos
# impacket examples also support -k / --no-pass to use the ccache
smbclient --kerberos //<dc.fqdn>/IPC$
- GSSAPI SSH authentification unique (OpenSSH vers Windows OpenSSH server):
# Ensure krb5.conf is correct and you have a TGT (kinit)
# Use the FQDN that matches the host SPN. Wrong names cause: "Server not found in Kerberos database"
ssh -o GSSAPIAuthentication=yes <user>@<host.fqdn>
Conseils :
- Assurez-vous que votre
/etc/hosts
résolve exactement le FQDN vers lequel vous allez SSH/SMB, et qu'il apparaisse avant toute entrée de domaine nue si vous remplacez le DNS. Les mismatches SPN cassent GSSAPI. - Si NTLM est désactivé sur SMB, vous pouvez voir
STATUS_NOT_SUPPORTED
lors de tentatives NTLM ; ajoutez-k
pour forcer Kerberos.
En savoir plus
Shodan
port:88 kerberos
MS14-068
La faille MS14-068 permet à un attaquant de manipuler le ticket de connexion Kerberos d'un utilisateur légitime afin de revendiquer faussement des privilèges élevés, comme être un Domain Admin. Cette revendication contrefaite est validée à tort par le Domain Controller, permettant un accès non autorisé aux ressources réseau à travers l'Active Directory forest.
{{#ref}} https://adsecurity.org/?p=541 {{#endref}}
Other exploits: https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek
Références
- NetExec (CME) wiki – Kerberos and krb5.conf generation
- OpenSSH GSSAPIAuthentication
- MIT Kerberos – Using Kerberos on UNIX
- 0xdf – HTB: TheFrizz
HackTricks Automatic Commands
Protocol_Name: Kerberos #Protocol Abbreviation if there is one.
Port_Number: 88 #Comma separated if there is more than one.
Protocol_Description: AD Domain Authentication #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for Kerberos
Note: |
Kerberos operates on a principle where it authenticates users without directly managing their access to resources. This is an important distinction because it underlines the protocol's role in security frameworks.
In environments like **Active Directory**, Kerberos is instrumental in establishing the identity of users by validating their secret passwords. This process ensures that each user's identity is confirmed before they interact with network resources. However, Kerberos does not extend its functionality to evaluate or enforce the permissions a user has over specific resources or services. Instead, it provides a secure way of authenticating users, which is a critical first step in the security process.
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-kerberos-88/index.html
Entry_2:
Name: Pre-Creds
Description: Brute Force to get Usernames
Command: nmap -p 88 --script=krb5-enum-users --script-args krb5-enum-users.realm="{Domain_Name}",userdb={Big_Userlist} {IP}
Entry_3:
Name: With Usernames
Description: Brute Force with Usernames and Passwords
Note: consider git clone https://github.com/ropnop/kerbrute.git ./kerbrute -h
Entry_4:
Name: With Creds
Description: Attempt to get a list of user service principal names
Command: GetUserSPNs.py -request -dc-ip {IP} active.htb/svc_tgs
{{#include ../../banners/hacktricks-training.md}}