
Exploit d'élévation de privilèges Windows abusant de SeImpersonate via DiagTrack RPC, utilisant Secondary Logon pour obtenir un jeton INTERACTIVE et gagner SYSTEM.
Juste une autre façon d'abuser du privilège SeImpersonate.
Ce PoC est basé sur ce blog par @crisprss.
Dans ce blog, @crisprss a montré une méthode intéressante pour abuser du privilège SeImpersonate en utilisant AzureAttestService, qui est fourni avec les versions récentes de SQL server. Le PoC correspondant se trouve ici : https://github.com/crisprss/magicAzureAttestService.
Dans ce blog, il montre également une autre façon possible d'abuser du privilège SeImpersonate en utilisant le service DiagTrack, mais l'auteur n'a pas réussi à en faire une arme. Ceci est tiré de ce blog (traduit du chinois, donc peut-être pas précis à 100 %) :
But just when I thought it could be triggered normally, I didn't realize that this service is transparent to service users, which also means that it is not feasible to simulate pipeline privilege escalation through service users, because service users such as sqlserver There is no way to call the RPC interface, which also means that you can only escalate rights from the administrator user to SYSTEM in this way, so here is just a process sharing
Et oui, si vous essayez d'appeler la méthode exposée par ce serveur RPC depuis un utilisateur de service, vous obtenez une erreur d'accès refusé.

Mais pourquoi des utilisateurs normaux et non privilégiés peuvent-ils appeler cette méthode ?
Mon hypothèse était que, comme les utilisateurs de service opèrent dans la session 0, ils n'ont pas le SID NT AUTHORITY\INTERACTIVE dans leur jeton, alors que les utilisateurs normaux qui se connectent via RDP ou interactivement l'ont.
Alors, comment obtenir le SID NT AUTHORITY\INTERACTIVE depuis la session 0 ? Très facile en réalité, le service Secondary Logon le fait pour nous. Nous pouvons utiliser l'appel API LogonUser pour obtenir un jeton avec le SID NT AUTHORITY\INTERACTIVE, et nous n'avons pas besoin d'identifiants valides car nous utiliserons le type d'ouverture de session NewCredentials(9). Lorsque le type d'ouverture de session NewCredentials est utilisé, Secondary Logon crée une nouvelle session d'ouverture de session et copie le jeton de l'appelant, mais il insère également un SID NT AUTHORITY\INTERACTIVE. C'est une situation parfaite pour nous car nous n'avons pas besoin d'avoir d'identifiants valides (les identifiants utilisés avec le type d'ouverture de session NewCredentials ne sont pas vérifiés tant que l'utilisateur n'essaie pas d'accéder à une ressource réseau).
Donc, maintenant que nous avons un jeton avec le SID NT AUTHORITY\INTERACTIVE, l'exploit fonctionnera-t-il ? Oui, il le fera :D

Ce PoC a été testé sur Windows 10 et Windows 2019.
@crisprss - https://www.crisprx.top/archives/561