Writable Sys Path +Dll Hijacking Privesc
Introduzione
Se hai scoperto che puoi scrivere in una cartella del Percorso di Sistema (nota che questo non funzionerà se puoi scrivere in una cartella del Percorso Utente), è possibile che tu possa elevare i privilegi nel sistema.
Per fare ciò, puoi sfruttare un Dll Hijacking dove andrai a intercettare una libreria in fase di caricamento da parte di un servizio o processo con più privilegi dei tuoi e poiché quel servizio sta caricando un Dll che probabilmente non esiste nemmeno nell'intero sistema, cercherà di caricarlo dal Percorso di Sistema dove puoi scrivere.
Per ulteriori informazioni su cosa sia il Dll Hijacking controlla:
pageDll HijackingPrivesc con Dll Hijacking
Trovare un Dll mancante
La prima cosa di cui hai bisogno è identificare un processo in esecuzione con più privilegi dei tuoi che sta cercando di caricare un Dll dal Percorso di Sistema in cui puoi scrivere.
Il problema in questi casi è che probabilmente quei processi sono già in esecuzione. Per trovare quali Dll mancano ai servizi, è necessario avviare procmon il prima possibile (prima che i processi vengano caricati). Quindi, per trovare i .dll mancanti fai:
Crea la cartella
C:\privesc_hijacking
e aggiungi il percorsoC:\privesc_hijacking
alla variabile di ambiente del Percorso di Sistema. Puoi farlo manualmente o con PS:
Avvia
procmon
e vai suOpzioni
-->Abilita registrazione all'avvio
e premiOK
nella finestra di dialogo.Successivamente, riavvia il sistema. Quando il computer si riavvia,
procmon
inizierà a registrare gli eventi il prima possibile.Una volta che Windows è avviato, esegui
procmon
di nuovo, ti dirà che è in esecuzione e ti chiederà se desideri memorizzare gli eventi in un file. Rispondi sì e memorizza gli eventi in un file.Dopo che il file è generato, chiudi la finestra di
procmon
aperta e apri il file degli eventi.Aggiungi questi filtri e troverai tutte le Dll che alcuni processi hanno cercato di caricare dalla cartella del percorso di sistema scrivibile:
Dll Mancanti
Eseguendo questo su una macchina virtuale (vmware) Windows 11 gratuita ho ottenuto questi risultati:
In questo caso gli .exe sono inutili quindi ignorali, le Dll mancanti provenivano da:
Servizio | Dll | Riga di comando |
---|---|---|
Task Scheduler (Schedule) | WptsExtensions.dll |
|
Diagnostic Policy Service (DPS) | Unknown.DLL |
|
??? | SharedRes.dll |
|
Dopo aver trovato questo, ho trovato questo interessante post sul blog che spiega anche come abusare di WptsExtensions.dll per l'escalation dei privilegi. Che è ciò che stiamo per fare ora.
Sfruttamento
Quindi, per escalare i privilegi andremo a dirottare la libreria WptsExtensions.dll. Avendo il percorso e il nome dobbiamo solo generare la dll malevola.
Puoi provare a utilizzare uno di questi esempi. Potresti eseguire payload come: ottenere una shell reversa, aggiungere un utente, eseguire un beacon...
Nota che non tutti i servizi vengono eseguiti con NT AUTHORITY\SYSTEM
alcuni vengono eseguiti anche con NT AUTHORITY\LOCAL SERVICE
che ha meno privilegi e non sarai in grado di creare un nuovo utente sfruttando i suoi permessi.
Tuttavia, quell'utente ha il privilegio seImpersonate
, quindi puoi utilizzare la suite potato per escalare i privilegi. Quindi, in questo caso una shell reversa è una scelta migliore rispetto al tentativo di creare un utente.
Al momento della scrittura il servizio Task Scheduler viene eseguito con Nt AUTHORITY\SYSTEM.
Avendo generato la dll malevola (nel mio caso ho usato una shell reversa x64 e ho ottenuto una shell ma Defender l'ha bloccata perché proveniva da msfvenom), salvala nella cartella del percorso di sistema scrivibile con il nome WptsExtensions.dll e riavvia il computer (o riavvia il servizio o fai qualsiasi altra azione necessaria per far ripartire il servizio/programma interessato).
Quando il servizio viene riavviato, la dll dovrebbe essere caricata ed eseguita (puoi riutilizzare il trucco di procmon per verificare se la libreria è stata caricata come previsto).
Last updated