Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/vu-ls/crassus
Privilege EscalationExploitationPenetrationstestsBinäranalyse
GitHubvu-ls/crassus

Crassus

Windows Privilege Escalation Discovery Tool, das Process Monitor-Bootlogs parst, um DLL-Hijacking, schwache ACLs und andere Erhöhungspfade zu identifizieren und automatisch Proxy-DLL-Quellcode generiert.

Repository anzeigen
63364vor 6 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Crassus – Windows Privilege Escalation Erkennungstool

Schnellstart

  1. Wählen Sie im Process Monitor die Option Enable Boot Logging aus. "Process Monitor Boot Logging Option"
  2. Starten Sie neu.
  3. Sobald Sie angemeldet sind und Windows hochgefahren ist, führen Sie Process Monitor erneut aus.
  4. Wenn Sie dazu aufgefordert werden, speichern Sie das Boot-Protokoll, z. B. als raw.PML.
  5. Setzen Sie den Standardfilter von Process Monitor mit Strg-R zurück.
  6. Speichern Sie diese Protokolldatei, z. B. als boot.PML.
  7. Führen Sie Crassus.exe boot.PML aus.
  8. Untersuchen Sie alle grün markierten Ergebnisse und die entsprechenden Einträge in results.csv.

Inhaltsverzeichnis

  • Warum "Crassus"?
    • Haben Sie wirklich noch ein weiteres Privilege-Escalation-Erkennungstool erstellt?
    • Funktionen
    • Flussdiagramm
  • Bildschirmfotos
    • Crassus Ausführung
    • CSV-Ausgabe
    • Exportausgabe
    • DLL-Funktionen exportieren
    • DLL-Ordnungszahlen exportieren
  • Crassus.exe beziehen
    • Erstellen mit Visual Studio
    • Verwendung der vorkompilierten Crassus.exe
  • Verwendung
    • Ausführungsablauf
    • Befehlszeilenargumente
    • Beispiele
    • Proxy-DLL-Vorlage
    • openssl.cnf-Vorlage
  • Kompilieren von Proxy-DLLs
    • Visual Studio
    • MinGW
  • Praxisbeispiele
    • Acronis True Image
    • Atlassian Bitbucket
    • McAfee
    • Microsoft SQL Server 2022
  • Fehlerbehebung
    • Fehlende Datei wird nicht ausgeführt
    • Code wird mit unerwarteten Berechtigungen ausgeführt
    • Ergebnisse verschwinden nach Neustart
  • Beiträge
  • Danksagungen

Warum "Crassus"?

Accenture hat ein Tool namens Spartacus entwickelt, das DLL-Hijacking-Möglichkeiten unter Windows findet. Ausgehend von Spartacus haben wir Crassus entwickelt, um die Fähigkeiten zur Erkennung von Windows-Privilege-Escalation über die bloße Suche nach fehlenden Dateien hinaus zu erweitern. Die ACLs, die von Dateien und Verzeichnissen privilegierter Prozesse verwendet werden, können mehr als nur die Suche nach fehlenden Dateien umfassen, um das Ziel zu erreichen.

Haben Sie wirklich noch ein weiteres Privilege-Escalation-Erkennungstool erstellt?

...aber mit einer Besonderheit, da Crassus den SysInternals Process Monitor nutzt und rohe PML-Protokolldateien parst. Die typische Verwendung besteht darin, ein Boot-Protokoll mit Process Monitor zu generieren und es dann mit Crassus zu parsen. Es wird außerdem automatisch Quellcode für Proxy-DLLs mit allen relevanten Exporten für anfällige DLLs generieren.

Funktionen

  • Natives Parsen von ProcMon-PML-Dateien. Der Log(PML)-Parser wurde durch Portierung von Teilfunktionalitäten von https://github.com/eronnen/procmon-parser/ nach C# implementiert. Die Formatspezifikation finden Sie hier.
  • Crassus erstellt Quellcode für Proxy-DLLs für alle identifizierten fehlenden DLLs. Wenn beispielsweise eine Anwendung anfällig für DLL-Hijacking über version.dll ist, erstellt Crassus für Sie Dateien version.cpp und version.def mit allen darin enthaltenen Exporten. Standardmäßig starten die Proxy-DLLs calc.exe. Es sind Build-Skripte enthalten, um die DLLs in Visual Studio oder MinGW zu erstellen.
  • Für andere interessante Ereignisse, wie das Erstellen eines Prozesses oder das Laden einer Bibliothek, wird untersucht, ob nicht privilegierte Benutzer die Datei oder Teile des Pfads zur Datei ändern können.
  • Kann große PML-Dateien verarbeiten und alle interessanten Ereignisse in einer CSV-Ausgabedatei speichern.

Flussdiagramm

Die allgemeine Funktionsweise von Crassus lässt sich in diesem Flussdiagramm zusammenfassen: Crassus Flussdiagramm

Bildschirmfotos

Crassus Ausführung

Crassus wird ausgeführt

CSV-Ausgabe

CSV-Ausgabe

Exportausgabe

Exporte

DLL-Funktionen exportieren

DLL-Funktionen

DLL-Ordnungszahlen exportieren

DLL-Ordnungszahlen

Crassus.exe beziehen

Erstellen mit Visual Studio

Crassus wurde als Visual Studio 2019-Projekt entwickelt. So erstellen Sie Crassus.exe:

  1. Öffnen Sie Crassus.sln
  2. Drücken Sie Strg+Umschalt+B auf Ihrer Tastatur

Verwendung der vorkompilierten Crassus.exe

Wenn Sie dem Ausführen von fremdem Code vertrauen, ohne zu wissen, was er tut, wird Crassus.exe in diesem Repository bereitgestellt.

Verwendung

Ausführungsablauf

  1. Wählen Sie im Process Monitor die Option Enable Boot Logging aus. "Process Monitor Boot Logging Option"
  2. Starten Sie neu.
  3. Sobald Sie angemeldet sind und Windows hochgefahren ist, führen Sie optional auch geplante Aufgaben aus, die möglicherweise mit privilegierten Rechten ausgeführt werden.
  4. Führen Sie Process Monitor erneut aus.
  5. Wenn Sie dazu aufgefordert werden, speichern Sie das Boot-Protokoll.
  6. Setzen Sie den Standardfilter von Process Monitor mit Strg-R zurück.
  7. Speichern Sie diese Protokolldatei, z. B. als boot.PML. Der Grund für das erneute Speichern der Protokolldatei ist zweierlei:
    1. Ältere Versionen von Process Monitor speichern Boot-Protokolle nicht als einzelne Datei.
    2. Boot-Protokolle sind standardmäßig ungefiltert, was zusätzliches Rauschen enthalten kann, wie z. B. ein lokales Benutzer-DLL-Hijacking beim Starten von Process Monitor selbst.

Befehlszeilenargumente

ArgumentBeschreibung
<PMLFILE>Speicherort (Datei) der vorhandenen ProcMon-Ereignisprotokolldatei.
--verboseAusführliche Ausgabe aktivieren.
--debugDebug-Ausgabe aktivieren.

Beispiele

Analysieren Sie das in boot.PML gespeicherte Process Monitor-Boot-Protokoll. Alle anfälligen Pfade werden als results.csv und alle Proxy-DLL-Quelldateien im Unterverzeichnis stubs gespeichert.

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

Proxy-DLL-Vorlage

Nachfolgend finden Sie die Vorlage, die beim Generieren von Proxy-DLLs verwendet wird. Bei DLLs, die von Crassus gefunden werden, enthält die Proxy-DLL dieselben Exportnamen, die in %_EXPORTS_% angegeben sind, sowie dieselben Ordnungszahlen, die in der .def-Datei angegeben sind. Crassus erkennt, ob die DLL als 32-Bit-Bibliothek oder als 64-Bit-Bibliothek erstellt werden muss, indem es die Architektur des übergeordneten Prozesses prüft und den Quellcode im Feld %_BUILD_AS_% entsprechend kennzeichnet.

Wenn die echte DLL nicht mit dem Process Monitor-Protokoll gefunden werden kann oder der Exportname problematisch ist, greifen die Build-Skripte auf die Erstellung einer DLL ohne angegebene Exporte zurück.

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

#include <windows.h>;

extern "C" {

  VOID Payload() {
      // Run your payload here.
      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
}

openssl.cnf-Vorlage

Für Anwendungen, die den Wert der OPENSSLDIR-Variable unsicher verwenden, kann eine manipulierte openssl.cnf-Datei am angegebenen Ort abgelegt werden. In diesem Beispiel lädt die Software C:\tmp\calc.dll. Stellen Sie sicher, dass Sie eine 32-Bit-Bibliothek für 32-Bit-Prozesse und eine 64-Bit-Bibliothek für 64-Bit-Prozesse verwenden.

root@kitploit:~
[openssl_init]
# This will attempt to load the file c:\tmp\calc.dll as part of OpenSSL initialization
# Build scripts should detect whether the calc.dll library needs to be built as 32-bit or 64-bit
/tmp/calc = asdf

Kompilieren von Proxy-DLLs

Visual Studio

Die Kompilierung ist mit der in Visual Studio enthaltenen cl.exe-Binärdatei möglich. Insbesondere:

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

Um den Build-Prozess zu automatisieren, einschließlich der Angabe, ob die Bibliothek 64-Bit oder 32-Bit sein soll:

  1. Öffnen Sie die Visual Studio Developer-Eingabeaufforderung.
  2. Erstellen Sie die DLLs mit dem Skript build.bat.
  3. Benennen Sie die kompilierte Datei bei Bedarf um, wenn der anfällige Dateiname nicht mit .dll endet.

Hinweis: Aufgrund eines ungünstigen Verhaltens von vcvarsall.bat, das definitiv kein Fehler ist, können Sie auf Probleme stoßen, wenn Sie versuchen, build.bat mehrmals in derselben Visual Studio Developer-Eingabeaufforderungssitzung auszuführen. Wenn ein Fehler auftritt, schließen Sie das Fenster einfach und starten Sie es erneut.

MinGW

Wenn Visual Studio nicht ohne weiteres verfügbar ist, können Proxy-DLLs stattdessen mit MinGW-w64 kompiliert werden. Auf einer Ubuntu-Plattform kann MinGW beispielsweise wie folgt installiert werden: sudo apt install g++-mingw-w64-x86-64-win32 g++-mingw-w64-i686-win32

root@kitploit:~
# Create a 32-bit DLL
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

# Create a 64-bit DLL
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

Um den Build-Prozess zu automatisieren, einschließlich der Angabe, ob die Bibliothek 64-Bit oder 32-Bit sein soll:

  1. Öffnen Sie ein Terminal.
  2. Führen Sie bash ./build.sh aus.
  3. Benennen Sie die kompilierte Datei bei Bedarf um, wenn der anfällige Dateiname nicht mit .dll endet.

Praxisbeispiele

Acronis True Image

Crassus-Analyse

Wie in VU#114757 beschrieben, enthalten ältere Acronis-Software mehrere Privilege-Escalation-Schwachstellen.

  1. Platzierung von openssl.cnf an einem von nicht privilegierten Benutzern erstellbaren Ort.
  2. Unangemessene ACLs im Verzeichnis C:\ProgramData\Acronis.

Crassus findet beide Probleme automatisch. Crassus-Ausgabe für Acronis

DLL-Hijacking

Indem wir unsere kompilierte curl.dll-Datei im Verzeichnis C:\ProgramData\Acronis\Agent\var\atp-downloader\ platzieren und mit einem neuen Process Monitor-Boot-Protokoll neu starten, können wir sehen, dass unsere Nutzlast, die calc.exe ausführt, mit SYSTEM-Berechtigungen läuft. "Process Monitor-Protokoll der platzierten curl.dll"

Platzierung von openssl.cnf

Die anfällige Acronis-Software versucht, openssl.cnf von zwei verschiedenen Orten zu laden. Wir platzieren unsere Vorlagendatei openssl.cnf in c:\jenkins_agent\workspace\tp-openssl-win-vs2013\17\product\out\standard\vs_2013_release\openssl\ssl und eine 32-Bit-Nutzlast calc.dll in c:\tmp. "Process Monitor-Protokoll der platzierten openssl.cnf"

Atlassian Bitbucket

Crassus-Analyse

Wie in VU#240785 beschrieben, ist ältere Atlassian Bitbucket-Software aufgrund schwacher ACLs des Installationsverzeichnisses anfällig für Privilege Escalation. Wie bei jeder Windows-Software, die an einem anderen Ort als C:\Program Files\ oder anderen ACL-beschränkten Orten installiert wird, liegt es am Software-Installer, explizit ACLs für das Zielverzeichnis festzulegen.

Crassus findet viele Möglichkeiten, mit dieser Software Privilege Escalation zu erreichen, darunter:

  • Platzieren fehlender DLLs in benutzerschreibbaren Verzeichnissen.
  • Platzieren fehlender EXEs in benutzerschreibbaren Verzeichnissen.
  • Umbenennen des Verzeichnisses einer privilegierten EXE, um einem Benutzer das Platzieren einer EXE mit demselben Namen zu ermöglichen.

Crassus-Ausgabe für Atlassian Bitbucket

EXE-Hijacking

In der Crassus-Ausgabe sehen wir, dass c:\atlassian\bitbucket\7.9.1\elasticsearch\bin\elasticsearch-service-x64.exe privilegiert ist, aber da es läuft, können wir es nicht einfach ersetzen. Wir können jedoch einen anderen Trick anwenden, um es zu kapern. Wir können einfach das Verzeichnis umbenennen, in dem es sich befindet, ein neues Verzeichnis mit demselben Namen erstellen und unsere Nutzlast dort unter demselben Namen platzieren. "Verzeichnis umbenennen, aus dem ein privilegierter Prozess ausgeführt wird"

Sobald wir mit einem Process Monitor-Boot-Protokoll neu starten, sehen wir, dass unsere platzierte Datei elasticsearch-service-x64.exe anstelle der echten ausgeführt wird, basierend auf dem Windows-Rechner-Symbol. "Platzierte calc.exe als elasticsearch-service-x64.exe"

McAfee

Wie in VU#287178 beschrieben, sind ältere Versionen der McAfee-Software anfällig für Privilege Escalation über openssl.cnf. Werfen wir einen Blick darauf: Crassus-Ausgabe für McAfee

Um zu sehen, warum es in diesem Boot-Protokoll zwei verschiedene Referenzen auf openssl.cnf gibt, können wir die Datei results.csv betrachten: results.csv für McAfee

Beachten Sie, dass das Laden der openssl.cnf-Datei aus dem Pfad D:\ eine weitere manuelle Untersuchung erfordert, da die Machbarkeit des Ladens eines solchen Pfads von der jeweiligen Plattform und dem verfügbaren Zugriff auf das System abhängt. Es könnte möglich sein, eine optische Disk zu erstellen, die eine openssl.cnf-Datei bereitstellt, die ebenfalls auf einen Pfad verweist, der auf das optische Laufwerk aufgelöst wird.

Microsoft SQL Server 2022

SQL Server 2022 ist offensichtlich nicht anfällig für Privilege Escalation aufgrund schwacher ACLs, es sei denn, es wird an einem nicht standardmäßigen Ort installiert. Wenn es an einem Ort außerhalb von C:\Program Files installiert wird, deckt Crassus mehrere Möglichkeiten für Privilege Escalation auf. Die meisten Windows-Anwendungen, die eine privilegierte Komponente enthalten, scheinen auf diese Weise ausnutzbar zu sein, wenn sie in einem Verzeichnis installiert werden, das nicht bereits von Natur aus sichere ACLs aufweist. "Microsoft SQL Server 2022 installiert in einem unsicheren Verzeichnis"

Fehlerbehebung

Fehlende Datei wird nicht ausgeführt

Wenn Crassus das privilegierte Laden einer Datei meldet, die ein Benutzer platzieren oder ändern kann, bedeutet das nicht unbedingt, dass es sich um ein ausnutzbares Szenario handelt. Während Crassus nach potenziell interessanten Dateitypen sucht, gibt eine Process Monitor-Protokolldatei nicht direkt an, was der zugehörige Prozess mit der Datei getan hätte, wenn sie vorhanden gewesen wäre. Es könnte so einfach sein wie das Extrahieren eines Programmsymbols. Die Untersuchung des Aufrufstapels des Dateivorgangs in Process Monitor kann einen Hinweis darauf geben, was getan worden wäre. Oder platzieren Sie die Datei einfach und untersuchen Sie das Verhalten mit einem neuen Process Monitor-Boot-Protokoll, wenn Sie den einfacheren Brute-Force-Weg bevorzugen. Sie können auch auf eine fehlende Bibliothek stoßen, bei der Crassus entweder die Bibliothek nicht finden kann, um zu wissen, welche Exporte vorhanden sein sollten, oder dass die von Crassus gefundenen Exporte in einer Weise kollidieren, die eine ordnungsgemäße DLL-Kompilierung verhindert. In solchen Fällen greift Crassus auf die Erstellung einer DLL zurück, die keine Funktionsnamen exportiert. Abhängig davon, wie die Zielanwendung die Bibliothek lädt, kann das Fehlen erwarteter Funktionsnamen und/oder Ordnungszahlen verhindern, dass die Zielanwendung die Bibliothek erfolgreich lädt. Dieses Szenario erfordert manuellen Aufwand, um zu bestimmen, wie die Proxy-DLL aussehen sollte.

Code wird mit unerwarteten Berechtigungen ausgeführt

Crassus sucht nach privilegierten Dateivorgängen, um interessante Pfade zu entdecken. Sie können auf ein Szenario stoßen, in dem sowohl ein privilegierter als auch ein nicht privilegierter Prozess auf einen Pfad zugreifen, aber nur der nicht privilegierte Prozess die Ausführung dessen durchführt, was vorhanden sein könnte. Alternativ können Sie auf ein Szenario stoßen, in dem ein übergeordneter Prozess zwar mit Berechtigungen ausgeführt wird, aber explizit untergeordnete Prozesse mit niedrigeren Berechtigungen erzeugt.

Ergebnisse verschwinden nach Neustart

Insbesondere bei der erstmaligen Installation von Software oder bei der Installation von Updates protokolliert Process Monitor möglicherweise einen Dateivorgang, der ausnutzbar erscheint, aber nicht bei jedem Systemstart auftritt. Das Ausnutzen dieser Vorgänge ist möglicherweise beim ersten Neustart nach einem solchen Ereignis möglich. Um solche Randfälle zu vermeiden, vergewissern Sie sich, dass nachfolgende Boot-Protokolle dieselben gemeldeten Dateivorgänge bei späteren Neustarts enthalten.

Beiträge

Ob es sich um einen Tippfehler, einen Fehler oder eine neue Funktion handelt, Crassus ist offen für Beiträge, solange wir uns auf Folgendes einigen:

  • Sie sind mit der MIT-Lizenz dieses Projekts einverstanden.
  • Erstellen Sie vor dem Erstellen eines Pull-Requests ein Issue, damit es besprochen werden kann, bevor Sie mit der Arbeit beginnen, da die interne Entwicklung nicht über das öffentliche GitHub-Repository verfolgt wird. Andernfalls riskieren Sie, dass Ihr Pull-Request abgelehnt wird, wenn wir beispielsweise bereits an derselben/ähnlichen Funktion arbeiten, oder aus anderen Gründen.

Danksagungen

  • https://github.com/eronnen/procmon-parser/
Tool herunterladen