Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Crassus — Strumento di scoperta per escalation dei privilegi su Windows che analizza i log di boot di Process Monitor per identificare DLL hijacking, ACL deboli e altri percorsi di elevazione, generando automaticamente il codice sorgente di proxy DLL. | Kitploit
Strumenti/GitHubGitHub/vu-ls/crassus
Escalation di PrivilegiExploitPenetration TestingAnalisi di Binari
GitHubvu-ls/crassus

Crassus

Strumento di scoperta per escalation dei privilegi su Windows che analizza i log di boot di Process Monitor per identificare DLL hijacking, ACL deboli e altri percorsi di elevazione, generando automaticamente il codice sorgente di proxy DLL.

Vedi Repository
633646 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Crassus strumento di scoperta di escalation dei privilegi su Windows

Avvio rapido

  1. In Process Monitor, seleziona l'opzione Enable Boot Logging. "Opzione di registrazione all'avvio di Process Monitor"
  2. Riavvia.
  3. Dopo aver effettuato l'accesso e Windows si è stabilizzato, esegui di nuovo Process Monitor.
  4. Quando richiesto, salva il log di avvio, ad esempio in raw.PML.
  5. Reimposta il filtro predefinito di Process Monitor usando Ctrl-R.
  6. Salva questo file di log, ad esempio in boot.PML.
  7. Esegui Crassus.exe boot.PML.
  8. Esamina tutti i risultati colorati in verde e le corrispondenti voci in results.csv.

Indice

  • Perché "Crassus"
    • Hai davvero creato un altro strumento di scoperta di escalation dei privilegi?
    • Caratteristiche
    • Diagramma di flusso
  • Schermate
    • Esecuzione di Crassus
    • Output CSV
    • Export di output
    • Funzioni di export delle DLL
    • Ordinali di export delle DLL
  • Ottenere Crassus.exe
    • Compilazione con Visual Studio
    • Utilizzo di Crassus.exe precompilato
  • Utilizzo
    • Flusso di esecuzione
    • Argomenti della riga di comando
    • Esempi
    • Template DLL proxy
    • Template openssl.cnf
  • Compilazione di DLL proxy
    • Visual Studio
    • MinGW
  • Esempi dal mondo reale
    • Acronis True Image
    • Atlassian Bitbucket
    • McAfee
    • Microsoft SQL Server 2022
  • Risoluzione dei problemi
    • File mancante non eseguito
    • Codice eseguito con privilegi inaspettati
    • Reperti scompaiono al riavvio
  • Contributi
  • Crediti

Perché "Crassus"?

Accenture ha creato uno strumento chiamato Spartacus, che trova opportunità di DLL hijacking su Windows. Utilizzando Spartacus come punto di partenza, abbiamo creato Crassus per estendere le capacità di scoperta di escalation dei privilegi su Windows oltre la semplice ricerca di file mancanti. Gli ACL utilizzati da file e directory di processi privilegiati possono trovare più della semplice ricerca di file mancanti per raggiungere l'obiettivo.

Hai davvero creato un altro strumento di scoperta di escalation dei privilegi?

...ma con un twist: Crassus utilizza il SysInternals Process Monitor e analizza file di log PML grezzi. L'uso tipico è generare un log di avvio usando Process Monitor e poi analizzarlo con Crassus. Genererà anche automaticamente il codice sorgente per DLL proxy con tutti gli export rilevanti per DLL vulnerabili.

Caratteristiche

  • Analisi nativa dei file PML di ProcMon. Il parser del log (PML) è stato implementato portando funzionalità parziali in C# da https://github.com/eronnen/procmon-parser/. Puoi trovare le specifiche del formato qui.
  • Crassus creerà codice sorgente per DLL proxy per tutte le DLL mancanti identificate. Ad esempio, se un'applicazione è vulnerabile al DLL Hijacking tramite version.dll, Crassus creerà i file version.cpp e version.def con tutti gli export inclusi. Per impostazione predefinita, le DLL proxy avvieranno calc.exe. Sono inclusi script di build per compilare le DLL su Visual Studio o MinGW.
  • Per altri eventi di interesse, come la creazione di un processo o il caricamento di una libreria, viene investigata la capacità degli utenti non privilegiati di modificare il file o qualsiasi parte del percorso del file.
  • In grado di elaborare file PML di grandi dimensioni e memorizzare tutti gli eventi di interesse in un file CSV di output.

Diagramma di flusso

Il succo generale di come funziona Crassus può essere riassunto in questo diagramma di flusso: Diagramma di flusso di Crassus

Schermate

Esecuzione di Crassus

Esecuzione di Crassus

Output CSV

Output CSV

Export di output

Export di output

Funzioni di export delle DLL

Funzioni di export delle DLL

Ordinali di export delle DLL

Ordinali di export delle DLL

Ottenere Crassus.exe

Compilazione con Visual Studio

Crassus è stato sviluppato come progetto Visual Studio 2019. Per compilare Crassus.exe:

  1. Apri Crassus.sln
  2. Premi Ctrl+Shift+B sulla tastiera

Utilizzo di Crassus.exe precompilato

Se ti fidi di eseguire codice di altri senza sapere cosa fa, Crassus.exe è fornito in questo repository.

Utilizzo

Flusso di esecuzione

  1. In Process Monitor, seleziona l'opzione Enable Boot Logging. "Opzione di registrazione all'avvio di Process Monitor"
  2. Riavvia.
  3. Dopo aver effettuato l'accesso e Windows si è stabilizzato, puoi anche eseguire facoltativamente attività pianificate che potrebbero essere configurate per essere eseguite con privilegi.
  4. Esegui di nuovo Process Monitor.
  5. Quando richiesto, salva il log di avvio.
  6. Reimposta il filtro predefinito di Process Monitor usando Ctrl-R.
  7. Salva questo file di log, ad esempio in boot.PML. Il motivo per salvare di nuovo il file di log è duplice:
    1. Le versioni precedenti di Process Monitor non salvano i log di avvio come un singolo file.
    2. I log di avvio per impostazione predefinita non sono filtrati, il che potrebbe contenere rumore extra, come un DLL hijacking di un utente locale nell'avvio di Process Monitor stesso.

Argomenti della riga di comando

ArgomentoDescrizione
<PMLFILE>Percorso (file) del file di log eventi ProcMon esistente.
--verboseAbilita output dettagliato.
--debugAbilita output di debug.

Esempi

Analizza il log di avvio di Process Monitor salvato in boot.PML. Tutti i percorsi vulnerabili verranno salvati come results.csv e tutti i file sorgente delle DLL proxy nella sottodirectory stubs.

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

Template DLL proxy

Di seguito è riportato il template utilizzato per generare le DLL proxy. Per le DLL trovate da Crassus, la DLL proxy conterrà gli stessi nomi di export specificati in %_EXPORTS_%, così come gli stessi ordinali specificati nel file .def. Crassus rileverà se la DLL deve essere compilata come libreria a 32 bit o a 64 bit esaminando l'architettura del processo padre e contrassegnando il codice sorgente nel campo %_BUILD_AS_% di conseguenza.

Se la DLL reale non può essere trovata utilizzando il log di Process Monitor, o se il nome dell'export è problematico, gli script di build ripiegheranno sulla creazione di una DLL senza export specificati.

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
}

Template openssl.cnf

Per le applicazioni che utilizzano in modo non sicuro il valore della variabile OPENSSLDIR, un file openssl.cnf modificato può essere posizionato nel percorso indicato. Per questo esempio, il software caricherà C:\tmp\calc.dll. Assicurati di utilizzare una libreria a 32 bit per i processi a 32 bit e una libreria a 64 bit per i processi a 64 bit.

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

Compilazione di DLL proxy

Visual Studio

La compilazione è possibile utilizzando il binario cl.exe incluso in Visual Studio. Nello specifico:

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

Per automatizzare il processo di compilazione, inclusa la specifica se la libreria deve essere a 64 bit o a 32 bit:

  1. Apri il Prompt dei comandi per sviluppatori di Visual Studio.
  2. Compila le DLL con lo script build.bat.
  3. Rinomina il file compilato se necessario, se il nome del file vulnerabile termina con qualcosa di diverso da .dll.

Nota: A causa di un comportamento sfortunato di vcvarsall.bat, che non è sicuramente un bug, potresti incontrare problemi nel tentativo di eseguire build.bat più di una volta nella stessa sessione del Prompt dei comandi per sviluppatori di Visual Studio. Se incontri un errore, chiudi semplicemente la finestra e avvia di nuovo.

MinGW

Se Visual Studio non è prontamente disponibile, le DLL proxy possono essere compilate con MinGW-w64 invece. Su una piattaforma Ubuntu, ad esempio, MinGW può essere installato con: 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

Per automatizzare il processo di compilazione, inclusa la specifica se la libreria deve essere a 64 bit o a 32 bit:

  1. Apri un terminale.
  2. Esegui bash ./build.sh
  3. Rinomina il file compilato se necessario, se il nome del file vulnerabile termina con qualcosa di diverso da .dll.

Esempi dal mondo reale

Acronis True Image

Analisi di Crassus

Come descritto in VU#114757, il vecchio software Acronis contiene molteplici vulnerabilità di escalation dei privilegi.

  1. Posizionamento di openssl.cnf in un percorso creabile da un utente non privilegiato.
  2. ACL inappropriati nella directory C:\ProgramData\Acronis.

Crassus trova automaticamente entrambi questi problemi. Output di Crassus per Acronis

DLL Hijacking

Posizionando il nostro file curl.dll compilato nella directory C:\ProgramData\Acronis\Agent\var\atp-downloader\ e riavviando con un nuovo log di avvio di Process Monitor, possiamo vedere che il nostro payload che esegue calc.exe viene eseguito con privilegi SYSTEM. "Log di Process Monitor del curl.dll posizionato"

Posizionamento di openssl.cnf

Il software Acronis vulnerabile tenta di caricare openssl.cnf da due diverse posizioni. Posizioneremo il nostro file template openssl.cnf in c:\jenkins_agent\workspace\tp-openssl-win-vs2013\17\product\out\standard\vs_2013_release\openssl\ssl, e un payload calc.dll a 32 bit in c:\tmp. "Log di Process Monitor del openssl.cnf posizionato"

Atlassian Bitbucket

Analisi di Crassus

Come descritto in VU#240785, il vecchio software Atlassian Bitbucket è vulnerabile all'escalation dei privilegi a causa di ACL deboli della directory di installazione. Come per qualsiasi software Windows che si installa in una posizione al di fuori di C:\Program Files\ o di altre posizioni con ACL ristretti, spetta all'installatore del software impostare esplicitamente gli ACL sulla directory di destinazione.

Crassus trova molti modi per ottenere l'escalation dei privilegi con questo software, tra cui:

  • Posizionamento di DLL mancanti in posizioni scrivibili dall'utente.
  • Posizionamento di EXE mancanti in posizioni scrivibili dall'utente.
  • Rinominare la directory di un EXE privilegiato per consentire all'utente di posizionare un EXE con lo stesso nome.

Output di Crassus per Atlassian Bitbucket

EXE Hijacking

Nell'output di Crassus, possiamo vedere che c:\atlassian\bitbucket\7.9.1\elasticsearch\bin\elasticsearch-service-x64.exe è privilegiato, ma dato che è in esecuzione non possiamo semplicemente sostituirlo. Tuttavia, possiamo usare un altro trucco per dirottarlo. Possiamo semplicemente rinominare la directory in cui si trova, crearne una nuova con lo stesso nome e posizionare il nostro payload con lo stesso nome. "Rinomina la directory da cui un processo privilegiato è in esecuzione"

Una volta riavviato con un log di avvio di Process Monitor, possiamo vedere che il nostro file elasticsearch-service-x64.exe posizionato è in esecuzione al posto di quello reale, basandoci sull'icona di Windows Calculator. "calc.exe posizionato come elasticsearch-service-x64.exe"

McAfee

Come descritto in VU#287178, le versioni precedenti del software McAfee sono vulnerabili all'escalation dei privilegi tramite openssl.cnf. Diamo un'occhiata: Output di Crassus per McAfee

Per vedere perché ci sono due diversi riferimenti a openssl.cnf in questo log di avvio, possiamo fare riferimento al file results.csv: results.csv per McAfee

Nota che il caricamento del file openssl.cnf dal percorso D:\ richiederà un'indagine manuale più approfondita, poiché la fattibilità del caricamento di tale percorso dipende dalla piattaforma in questione e dall'accesso al sistema disponibile. Potrebbe essere possibile creare un disco ottico che fornisca un file openssl.cnf che faccia anche riferimento a un percorso che risolva all'unità ottica.

Microsoft SQL Server 2022

SQL Server 2022 non è ovviamente vulnerabile all'escalation dei privilegi a causa di ACL deboli a meno che non sia installato in una posizione non standard. Se è installato in una posizione al di fuori di C:\Program Files, Crassus scoprirà diverse possibilità di escalation dei privilegi. La maggior parte delle applicazioni Windows che includono un componente privilegiato sembrano essere sfruttabili in questo modo se sono installate in una directory che non ha già ACL intrinsecamente sicuri. "Microsoft SQL Server 2022 installato in una directory non sicura"

Risoluzione dei problemi

File mancante non eseguito

Se Crassus segnala il caricamento privilegiato di un file che un utente può posizionare o modificare, ciò non significa necessariamente che sia uno scenario sfruttabile. Mentre Crassus cerca tipi di file potenzialmente interessanti, un file di log di Process Monitor non indicherà direttamente cosa il processo associato avrebbe fatto con il file se fosse stato presente. Potrebbe essere semplice come estrarre un'icona del programma. Investigare lo stack di chiamate dell'operazione sul file in Process Monitor può dare un indizio su cosa sarebbe stato fatto. Oppure basta posizionare il file e investigare il comportamento con un nuovo log di avvio di Process Monitor, se preferisci la via più semplice della forza bruta. Potresti anche incontrare una libreria mancante in cui Crassus non riesce a trovare la libreria per sapere quali export dovrebbero essere presenti, o gli export trovati da Crassus sono in conflitto in un modo che impedisce una corretta compilazione della DLL. In tali casi, Crassus ripiegherà sulla creazione di una DLL che non esporta alcun nome di funzione. A seconda di come l'applicazione target carica la libreria, l'assenza di nomi di funzione e/o numeri ordinali attesi potrebbe impedire all'applicazione target di caricare correttamente la libreria. Questo scenario richiederà uno sforzo manuale per determinare come dovrebbe apparire la DLL proxy.

Codice eseguito con privilegi inaspettati

Crassus cercherà operazioni sui file privilegiate per scoprire percorsi di interesse. Potresti incontrare uno scenario in cui sia un processo privilegiato che uno non privilegiato accedono a un percorso, ma solo il processo non privilegiato è quello che esegue ciò che potrebbe essere presente. In alternativa, potresti incontrare uno scenario in cui un processo padre viene eseguito con privilegi, ma potrebbe generare esplicitamente processi figlio con privilegi inferiori.

Reperti scompaiono al riavvio

Specialmente quando si installa software per la prima volta, o quando si installano aggiornamenti, Process Monitor potrebbe registrare un'operazione su un file che sembra sfruttabile ma non si verifica ogni volta che il sistema si avvia. Sfruttare queste operazioni potrebbe essere possibile al primo riavvio dopo che si verifica un tale evento. Per evitare questi casi limite, conferma che i log di avvio successivi contengano le stesse operazioni sui file segnalate nei riavvii successivi.

Contributi

Che si tratti di un errore di battitura, un bug o una nuova funzionalità, Crassus è molto aperto ai contributi purché concordiamo su quanto segue:

  • Sei d'accordo con la licenza MIT di questo progetto.
  • Prima di creare una pull request, crea un issue in modo che possa essere discusso prima di fare qualsiasi lavoro, poiché lo sviluppo interno non è tracciato tramite il repository pubblico di GitHub. Altrimenti, rischi che una pull request venga rifiutata se, ad esempio, stiamo già lavorando sulla stessa funzionalità o su una simile, o per qualsiasi altra ragione.

Crediti

  • https://github.com/eronnen/procmon-parser/
Scarica lo strumento