Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/vu-ls/crassus
Escalade de PrivilègesExploitationTests d'IntrusionAnalyse de Binaires
GitHubvu-ls/crassus

Crassus

Outil de découverte d'escalade de privilèges Windows qui analyse les journaux de démarrage de Process Monitor pour identifier les détournements de DLL, les ACL faibles et autres chemins d'élévation, générant automatiquement le code source de la DLL proxy.

Voir le dépôt
63364il y a 6 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Crassus – Outil de découverte d'élévation de privilèges Windows

Démarrage rapide

  1. Dans Process Monitor, sélectionnez l'option Enable Boot Logging. "Option de journalisation au démarrage de Process Monitor"
  2. Redémarrez.
  3. Une fois connecté et que Windows s'est stabilisé, exécutez à nouveau Process Monitor.
  4. Lorsque vous y êtes invité, enregistrez le journal de démarrage, par exemple dans raw.PML.
  5. Réinitialisez le filtre par défaut de Process Monitor avec Ctrl-R.
  6. Enregistrez ce fichier journal, par exemple dans boot.PML.
  7. Exécutez Crassus.exe boot.PML.
  8. Examinez les résultats surlignés en vert et les entrées correspondantes dans results.csv.

Table des matières

  • Pourquoi « Crassus » ?
    • Avez-vous vraiment créé un autre outil de découverte d'élévation de privilèges ?
    • Fonctionnalités
    • Organigramme
  • Captures d'écran
    • Exécution de Crassus
    • Sortie CSV
    • Exportations
    • Fonctions exportées d'une DLL
    • Ordinaux exportés d'une DLL
  • Obtenir Crassus.exe
    • Compilation avec Visual Studio
    • Utilisation de Crassus.exe précompilé
  • Utilisation
    • Déroulement de l'exécution
    • Arguments en ligne de commande
    • Exemples
    • Modèle de DLL proxy
    • Modèle openssl.cnf
  • Compilation des DLL proxy
    • Visual Studio
    • MinGW
  • Exemples concrets
    • Acronis True Image
    • Atlassian Bitbucket
    • McAfee
    • Microsoft SQL Server 2022
  • Dépannage
    • Fichier manquant non exécuté
    • Code exécuté avec des privilèges inattendus
    • Résultats qui disparaissent après un redémarrage
  • Contributions
  • Crédits

Pourquoi « Crassus » ?

Accenture a créé un outil appelé Spartacus qui détecte les opportunités de détournement de DLL sur Windows. En utilisant Spartacus comme point de départ, nous avons créé Crassus pour étendre les capacités de découverte d'élévation de privilèges Windows au‑delà de la simple recherche de fichiers manquants. Les listes de contrôle d'accès (ACL) utilisées par les fichiers et répertoires des processus privilégiés peuvent révéler plus que la simple recherche de fichiers manquants pour atteindre l'objectif.

Avez-vous vraiment créé un autre outil de découverte d'élévation de privilèges ?

… mais avec une particularité : Crassus utilise le Process Monitor de SysInternals et analyse les fichiers journaux PML bruts. L'utilisation typique consiste à générer un journal de démarrage avec Process Monitor, puis à l'analyser avec Crassus. Il génère également automatiquement le code source des DLL proxy avec toutes les exportations pertinentes pour les DLL vulnérables.

Fonctionnalités

  • Analyse native des fichiers PML de ProcMon. L'analyseur de journaux (PML) a été implémenté en portant partiellement les fonctionnalités de https://github.com/eronnen/procmon-parser/ vers C#. Vous trouverez les spécifications du format ici.
  • Crassus crée le code source des DLL proxy pour toutes les DLL manquantes identifiées. Par exemple, si une application est vulnérable au détournement de DLL via version.dll, Crassus générera les fichiers version.cpp et version.def avec toutes les exportations incluses. Par défaut, les DLL proxy lancent calc.exe. Des scripts de compilation sont fournis pour compiler les DLL avec Visual Studio ou MinGW.
  • Pour d'autres événements d'intérêt, comme la création d'un processus ou le chargement d'une bibliothèque, la possibilité pour un utilisateur non privilégié de modifier le fichier ou toute partie du chemin d'accès au fichier est examinée.
  • Capable de traiter de gros fichiers PML et de stocker tous les événements d'intérêt dans un fichier CSV de sortie.

Organigramme

Le principe général de fonctionnement de Crassus peut être résumé dans cet organigramme : Organigramme de Crassus

Captures d'écran

Exécution de Crassus

Exécution de Crassus

Sortie CSV

Sortie CSV

Exportations de sortie

Exportations

Fonctions exportées d'une DLL

Fonctions d'une DLL

Ordinaux exportés d'une DLL

Ordinaux d'une DLL

Obtenir Crassus.exe

Compilation avec Visual Studio

Crassus a été développé comme un projet Visual Studio 2019. Pour compiler Crassus.exe :

  1. Ouvrez Crassus.sln
  2. Appuyez sur Ctrl+Shift+B sur votre clavier

Utilisation de Crassus.exe précompilé

Si vous avez confiance en l'exécution de code écrit par d'autres sans savoir ce qu'il fait, Crassus.exe est fourni dans ce dépôt.

Utilisation

Déroulement de l'exécution

  1. Dans Process Monitor, sélectionnez l'option Enable Boot Logging. "Option de journalisation au démarrage de Process Monitor"
  2. Redémarrez.
  3. Une fois connecté et que Windows s'est stabilisé, exécutez éventuellement aussi les tâches planifiées pouvant être configurées pour s'exécuter avec des privilèges.
  4. Exécutez à nouveau Process Monitor.
  5. Lorsque vous y êtes invité, enregistrez le journal de démarrage.
  6. Réinitialisez le filtre par défaut de Process Monitor avec Ctrl-R.
  7. Enregistrez ce fichier journal, par exemple dans boot.PML. La raison de ce ré‑enregistrement est double :
    1. Les anciennes versions de Process Monitor ne sauvegardent pas les journaux de démarrage en un seul fichier.
    2. Les journaux de démarrage sont par défaut non filtrés, ce qui peut contenir du bruit supplémentaire, comme un détournement de DLL par un utilisateur local lors du lancement de Process Monitor lui‑même.

Arguments en ligne de commande

ArgumentDescription
<PMLFILE>Emplacement (fichier) du fichier journal ProcMon existant.
--verboseActive la sortie détaillée.
--debugActive la sortie de débogage.

Exemples

Analyse le journal de démarrage de Process Monitor sauvegardé dans boot.PML. Tous les chemins vulnérables seront sauvegardés dans results.csv et tous les fichiers source des DLL proxy dans le sous‑répertoire stubs.

root@kitploit:~
C:\tmp> Crassus.exe boot.PML

Modèle de DLL proxy

Voici le modèle utilisé lors de la génération des DLL proxy. Pour les DLL trouvées par Crassus, la DLL proxy contiendra les mêmes noms d'exportation que ceux spécifiés dans %_EXPORTS_%, ainsi que les mêmes ordinaux que ceux spécifiés dans le fichier .def. Crassus détecte si la DLL doit être compilée en 32 bits ou en 64 bits en examinant l'architecture du processus parent, et marque le code source dans le champ %_BUILD_AS_% en conséquence.

Si la DLL réelle ne peut pas être trouvée à l'aide du journal Process Monitor, ou si le nom d'exportation pose problème, les scripts de compilation reviennent à la création d'une DLL sans exportations spécifiées.

root@kitploit:~
#pragma once
    
//%_BUILD_AS%

#include <windows.h>;

extern "C" {

  VOID Payload() {
      // Exécutez votre charge utile ici.
      WinExec("calc.exe", 1);
  }

  BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
  {
      switch (fdwReason)
      {
      case DLL_PROCESS_ATTACH:
          Payload();
          break;
      case DLL_THREAD_ATTACH:
          break;
      case DLL_THREAD_DETACH:
          break;
      case DLL_PROCESS_DETACH:
          break;
      }
      return TRUE;
  }


  #ifdef ADD_EXPORTS
  %_EXPORTS_%
  #endif
}

Modèle openssl.cnf

Pour les applications qui utilisent de manière non sécurisée la valeur de la variable OPENSSLDIR, un fichier openssl.cnf spécialement conçu peut être placé à l'emplacement indiqué. Dans cet exemple, le logiciel chargera C:\tmp\calc.dll. Assurez-vous d'utiliser une bibliothèque 32 bits pour cibler les processus 32 bits, et une bibliothèque 64 bits pour cibler les processus 64 bits.

root@kitploit:~
[openssl_init]
# Ceci tentera de charger le fichier c:\tmp\calc.dll lors de l'initialisation d'OpenSSL
# Les scripts de compilation doivent détecter si la bibliothèque calc.dll doit être compilée en 32 bits ou en 64 bits
/tmp/calc = asdf

Compilation des DLL proxy

Visual Studio

La compilation est possible en utilisant le binaire cl.exe inclus avec Visual Studio. Spécifiquement :

root@kitploit:~
cl.exe /DADD_EXPORTS /D_USRDLL /D_WINDLL <target>.cpp /LD /Fe<target>.dll /link /DEF:<target>.def

Pour automatiser le processus de construction, y compris la spécification si la bibliothèque doit être en 64 bits ou en 32 bits :

  1. Ouvrez l'invite de commandes développeur Visual Studio.
  2. Compilez les DLL avec le script build.bat.
  3. Renommez le fichier compilé si nécessaire lorsque le nom du fichier vulnérable se termine par autre chose que .dll.

Remarque : En raison d'un comportement malheureux de vcvarsall.bat, qui n'est définitivement pas un bug, vous pourriez rencontrer des difficultés en exécutant build.bat plus d'une fois dans la même session d'invite de commandes développeur Visual Studio. Si vous rencontrez une erreur, fermez simplement la fenêtre et relancez‑la.

MinGW

Si Visual Studio n'est pas facilement disponible, les DLL proxy peuvent être compilées avec MinGW-w64 à la place. Sur une plateforme Ubuntu par exemple, MinGW peut être installé via les commandes suivantes : sudo apt install g++-mingw-w64-x86-64-win32 g++-mingw-w64-i686-win32

root@kitploit:~
# Créer une DLL 32 bits
i686-w64-mingw32-g++ -c -o <target>.o <target>.cpp -D ADD_EXPORTS
i686-w64-mingw32-g++ -o <target>.dll <target>.o <target>.def -s -shared -Wl,--subsystem,windows

# Créer une DLL 64 bits
x86_64-w64-mingw32-g++ -c -o <target>.o <target>.cpp -D ADD_EXPORTS
x86_64-w64-mingw32-g++ -o <target>.dll <target>.o <target>.def -s -shared -Wl,--subsystem,windows

Pour automatiser le processus de construction, y compris la spécification si la bibliothèque doit être en 64 bits ou en 32 bits :

  1. Ouvrez un terminal.
  2. Exécutez bash ./build.sh
  3. Renommez le fichier compilé si nécessaire lorsque le nom du fichier vulnérable se termine par autre chose que .dll.

Exemples concrets

Acronis True Image

Analyse par Crassus

Comme décrit dans VU#114757, les anciennes versions du logiciel Acronis contiennent plusieurs vulnérabilités d'élévation de privilèges.

  1. Placement de openssl.cnf dans un emplacement accessible à un utilisateur non privilégié.
  2. ACL inappropriées dans le répertoire C:\ProgramData\Acronis.

Crassus détecte automatiquement ces deux problèmes. Sortie Crassus pour Acronis

Détournement de DLL

En plaçant notre fichier curl.dll compilé dans le répertoire C:\ProgramData\Acronis\Agent\var\atp-downloader\ et en redémarrant avec un nouveau journal de démarrage Process Monitor, nous pouvons voir que notre charge utile qui exécute calc.exe s'exécute avec les privilèges SYSTEM. "Journal Process Monitor du curl.dll déposé"

Placement de openssl.cnf

Le logiciel vulnérable Acronis tente de charger openssl.cnf depuis deux emplacements différents. Nous placerons notre fichier modèle openssl.cnf dans c:\jenkins_agent\workspace\tp-openssl-win-vs2013\17\product\out\standard\vs_2013_release\openssl\ssl, et une charge utile calc.dll 32 bits dans c:\tmp. "Journal Process Monitor du openssl.cnf déposé"

Atlassian Bitbucket

Analyse par Crassus

Comme décrit dans VU#240785, les anciennes versions du logiciel Atlassian Bitbucket sont vulnérables à l'élévation de privilèges en raison d'ACL faibles sur le répertoire d'installation. Comme pour tout logiciel Windows installé en dehors de C:\Program Files\ ou d'autres emplacements à ACL restrictives, il incombe au programme d'installation de définir explicitement les ACL sur le répertoire cible.

Crassus trouve de nombreuses façons d'atteindre l'élévation de privilèges avec ce logiciel, y compris :

  • Placement de DLL manquantes dans des emplacements accessibles en écriture à l'utilisateur.
  • Placement d'EXE manquants dans des emplacements accessibles en écriture à l'utilisateur.
  • Renommage du répertoire d'un EXE privilégié pour permettre le placement par l'utilisateur d'un EXE de même nom.

Sortie Crassus pour Atlassian Bitbucket

Détournement d'EXE

Dans la sortie de Crassus, nous pouvons voir que c:\atlassian\bitbucket\7.9.1\elasticsearch\bin\elasticsearch-service-x64.exe est privilégié, mais comme il est en cours d'exécution, nous ne pouvons pas simplement le remplacer. Cependant, nous pouvons utiliser une autre astuce pour le détourner. Nous pouvons simplement renommer le répertoire où il se trouve, créer un nouveau répertoire du même nom, et y placer notre charge utile sous le même nom. "Renommer le répertoire d'où un processus privilégié est exécuté"

Une fois que nous redémarrons avec un journal de démarrage Process Monitor, nous pouvons voir que notre fichier elasticsearch-service-x64.exe déposé s'exécute à la place du vrai, comme l'indique l'icône de la calculatrice Windows. "calc.exe déposé en tant que elasticsearch-service-x64.exe"

McAfee

Comme décrit dans VU#287178, les anciennes versions du logiciel McAfee sont vulnérables à l'élévation de privilèges via openssl.cnf. Jetons un coup d'œil : Sortie Crassus pour McAfee

Pour comprendre pourquoi il y a deux références différentes à openssl.cnf dans ce journal de démarrage, nous pouvons consulter le fichier results.csv : results.csv pour McAfee

Notez que le chargement du fichier openssl.cnf depuis le chemin D:\ nécessitera une investigation manuelle supplémentaire, car la faisabilité de charger un tel chemin dépend de la plateforme concernée et de l'accès disponible au système. Il est peut-être possible de créer un disque optique qui fournit un fichier openssl.cnf référençant également un chemin résolu sur le lecteur optique.

Microsoft SQL Server 2022

SQL Server 2022 n'est pas évidemment vulnérable à l'élévation de privilèges en raison d'ACL faibles sauf s'il est installé dans un emplacement non standard. S'il est installé dans un répertoire autre que C:\Program Files, Crassus découvrira plusieurs possibilités d'élévation de privilèges. La plupart des applications Windows incluant un composant privilégié semblent exploitables de cette manière si elles sont installées dans un répertoire qui ne possède pas déjà des ACL intrinsèquement sécurisées. "Microsoft SQL Server 2022 installé dans un répertoire non sécurisé"

Dépannage

Fichier manquant non exécuté

Si Crassus signale le chargement privilégié d'un fichier qu'un utilisateur peut déposer ou modifier, cela ne signifie pas nécessairement qu'il s'agit d'un scénario exploitable. Bien que Crassus recherche les types de fichiers potentiellement intéressants, un fichier journal Process Monitor n'indique pas directement ce que le processus associé aurait fait avec le fichier s'il avait été présent. Il pourrait s'agir simplement d'extraire une icône de programme. L'examen de la pile d'appels de l'opération sur le fichier dans Process Monitor peut donner une indication sur ce qui aurait été fait. Ou simplement placer le fichier et examiner le comportement avec un nouveau journal de démarrage Process Monitor, si vous préférez la voie plus simple de la force brute. Vous pouvez également rencontrer une bibliothèque manquante pour laquelle Crassus ne peut pas trouver la bibliothèque pour connaître les exportations qui devraient être présentes, ou les exportations trouvées par Crassus entrent en conflit d'une manière qui empêche une compilation correcte de la DLL. Dans de tels cas, Crassus revient à la création d'une DLL qui n'exporte aucun nom de fonction. Selon la manière dont l'application cible charge la bibliothèque, l'absence de noms de fonctions et/ou de numéros d'ordinals attendus peut empêcher l'application cible de charger la bibliothèque avec succès. Ce scénario nécessitera un effort manuel pour déterminer à quoi la DLL proxy doit ressembler.

Code exécuté avec des privilèges inattendus

Crassus recherche les opérations privilégiées sur les fichiers pour découvrir les chemins d'intérêt. Vous pouvez rencontrer un scénario où un processus privilégié et un processus non privilégié accèdent tous deux à un chemin, mais seul le processus non privilégié exécute ce qui pourrait être présent. Alternativement, vous pouvez rencontrer un scénario où un processus parent s'exécute bien avec des privilèges, mais il peut explicitement générer des processus fils avec des privilèges moindres.

Résultats qui disparaissent après un redémarrage

Surtout lors de l'installation initiale d'un logiciel ou lors de l'installation de mises à jour, Process Monitor peut enregistrer une opération sur un fichier qui semble exploitable mais qui ne se produit pas à chaque démarrage du système. L'exploitation de ces opérations peut être possible au premier redémarrage après un tel événement. Pour éviter ces cas particuliers, confirmez que les journaux de démarrage ultérieurs contiennent les mêmes opérations sur les fichiers rapportées lors des redémarrages suivants.

Contributions

Qu'il s'agisse d'une faute de frappe, d'un bogue ou d'une nouvelle fonctionnalité, Crassus est très ouvert aux contributions tant que nous sommes d'accord sur les points suivants :

  • Vous acceptez la licence MIT de ce projet.
  • Avant de créer une demande de tirage (pull request), créez une issue (problème) afin qu'elle puisse être discutée avant tout travail, car le développement interne n'est pas suivi via le dépôt public GitHub. Sinon, vous risquez de voir votre demande de tirage rejetée si, par exemple, nous travaillons déjà sur une fonctionnalité identique ou similaire, ou pour toute autre raison.

Crédits

  • https://github.com/eronnen/procmon-parser/
Télécharger l’outil