6.4 KiB
Raw Blame History

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

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}}