Az - Pass the Certificate

Support HackTricks

Pass the Certificate (Azure)

Dans les machines jointes à Azure, il est possible de s'authentifier d'une machine à une autre en utilisant des certificats qui doivent être émis par Azure AD CA pour l'utilisateur requis (en tant que sujet) lorsque les deux machines prennent en charge le mécanisme d'authentification NegoEx.

En termes super simplifiés :

  • La machine (client) initiant la connexion a besoin d'un certificat d'Azure AD pour un utilisateur.

  • Le client crée un en-tête JSON Web Token (JWT) contenant PRT et d'autres détails, le signe en utilisant la clé dérivée (en utilisant la clé de session et le contexte de sécurité) et l'envoie à Azure AD.

  • Azure AD vérifie la signature JWT en utilisant la clé de session du client et le contexte de sécurité, vérifie la validité du PRT et répond avec le certificat.

Dans ce scénario et après avoir récupéré toutes les informations nécessaires pour une attaque Pass the PRT :

  • Nom d'utilisateur

  • ID de locataire

  • PRT

  • Contexte de sécurité

  • Clé dérivée

Il est possible de demander un certificat P2P pour l'utilisateur avec l'outil PrtToCert:

RequestCert.py [-h] --tenantId TENANTID --prt PRT --userName USERNAME --hexCtx HEXCTX --hexDerivedKey HEXDERIVEDKEY [--passPhrase PASSPHRASE]

Les certificats dureront aussi longtemps que le PRT. Pour utiliser le certificat, vous pouvez utiliser l'outil python AzureADJoinedMachinePTC qui va s'authentifier sur la machine distante, exécuter PSEXEC et ouvrir un CMD sur la machine victime. Cela nous permettra d'utiliser à nouveau Mimikatz pour obtenir le PRT d'un autre utilisateur.

Main.py [-h] --usercert USERCERT --certpass CERTPASS --remoteip REMOTEIP

Références

Soutenir HackTricks

Last updated