Windows Local Privilege Escalation
Miglior strumento per cercare vettori di escalation dei privilegi locali di Windows: WinPEAS
Teoria Iniziale di Windows
Token di Accesso
Se non sai cosa sono i Token di Accesso di Windows, leggi la pagina seguente prima di continuare:
Access TokensACL - DACL/SACL/ACE
Controlla la pagina seguente per ulteriori informazioni sulle ACL - DACL/SACL/ACE:
ACLs - DACLs/SACLs/ACEsLivelli di Integrità
Se non sai cosa sono i livelli di integrità in Windows, dovresti leggere la pagina seguente prima di continuare:
Integrity LevelsControlli di Sicurezza di Windows
Ci sono diverse cose in Windows che potrebbero prevenire l'enumerazione del sistema, eseguire eseguibili o persino rilevare le tue attività. Dovresti leggere la seguente pagina e enumerare tutti questi meccanismi di difesa prima di iniziare l'enumerazione dell'escalation dei privilegi:
Windows Security ControlsInformazioni di Sistema
Enumerazione delle informazioni sulla versione
Controlla se la versione di Windows ha vulnerabilità note (controlla anche le patch applicate).
Version Exploits
Questo sito è utile per cercare informazioni dettagliate sulle vulnerabilità di sicurezza di Microsoft. Questo database ha più di 4.700 vulnerabilità di sicurezza, mostrando la massiccia superficie di attacco che un ambiente Windows presenta.
Sul sistema
post/windows/gather/enum_patches
post/multi/recon/local_exploit_suggester
winpeas (Winpeas ha watson integrato)
Localmente con informazioni di sistema
Repo Github di exploit:
Environment
Qualsiasi credenziale/informazione succosa salvata nelle variabili di ambiente?
Cronologia di PowerShell
PowerShell Transcript files
Puoi imparare come attivarlo in https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/
PowerShell Module Logging
I dettagli delle esecuzioni della pipeline di PowerShell vengono registrati, comprendendo i comandi eseguiti, le invocazioni dei comandi e parti degli script. Tuttavia, i dettagli completi dell'esecuzione e i risultati dell'output potrebbero non essere catturati.
Per abilitare questo, segui le istruzioni nella sezione "Transcript files" della documentazione, scegliendo "Module Logging" invece di "Powershell Transcription".
Per visualizzare gli ultimi 15 eventi dai log di PowersShell, puoi eseguire:
PowerShell Script Block Logging
Un'attività completa e un registro completo del contenuto dell'esecuzione dello script vengono catturati, garantendo che ogni blocco di codice sia documentato mentre viene eseguito. Questo processo preserva una traccia di audit completa di ogni attività, preziosa per la forense e l'analisi del comportamento malevolo. Documentando tutte le attività al momento dell'esecuzione, vengono forniti approfondimenti dettagliati sul processo.
Gli eventi di registrazione per il Script Block possono essere trovati all'interno di Windows Event Viewer al percorso: Application and Services Logs > Microsoft > Windows > PowerShell > Operational. Per visualizzare gli ultimi 20 eventi puoi usare:
Impostazioni Internet
Unità
WSUS
Puoi compromettere il sistema se gli aggiornamenti non vengono richiesti utilizzando httpS ma http.
Inizi controllando se la rete utilizza un aggiornamento WSUS non SSL eseguendo il seguente:
Se ricevi una risposta come:
E se HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer
è uguale a 1
.
Allora, è sfruttabile. Se l'ultimo registro è uguale a 0, allora, l'entry WSUS sarà ignorata.
Per sfruttare queste vulnerabilità puoi usare strumenti come: Wsuxploit, pyWSUS - Questi sono script di exploit MiTM armati per iniettare aggiornamenti 'falsi' nel traffico WSUS non SSL.
Leggi la ricerca qui:
WSUS CVE-2020-1013
Leggi il rapporto completo qui. Fondamentalmente, questo è il difetto che questo bug sfrutta:
Se abbiamo il potere di modificare il nostro proxy utente locale, e gli aggiornamenti di Windows utilizzano il proxy configurato nelle impostazioni di Internet Explorer, abbiamo quindi il potere di eseguire PyWSUS localmente per intercettare il nostro stesso traffico ed eseguire codice come utente elevato sul nostro asset.
Inoltre, poiché il servizio WSUS utilizza le impostazioni dell'utente corrente, utilizzerà anche il suo archivio certificati. Se generiamo un certificato autofirmato per il nome host WSUS e aggiungiamo questo certificato nell'archivio certificati dell'utente corrente, saremo in grado di intercettare sia il traffico WSUS HTTP che HTTPS. WSUS non utilizza meccanismi simili a HSTS per implementare una validazione di tipo trust-on-first-use sul certificato. Se il certificato presentato è fidato dall'utente e ha il nome host corretto, sarà accettato dal servizio.
Puoi sfruttare questa vulnerabilità utilizzando lo strumento WSUSpicious (una volta che è stato liberato).
KrbRelayUp
Una vulnerabilità di elevazione dei privilegi locali esiste negli ambienti dominio di Windows sotto specifiche condizioni. Queste condizioni includono ambienti in cui la firma LDAP non è applicata, gli utenti possiedono diritti di auto-configurazione che consentono loro di configurare Delegazione Constrainata Basata su Risorse (RBCD), e la capacità per gli utenti di creare computer all'interno del dominio. È importante notare che questi requisiti sono soddisfatti utilizzando impostazioni predefinite.
Trova l'exploit in https://github.com/Dec0ne/KrbRelayUp
Per ulteriori informazioni sul flusso dell'attacco controlla https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/
AlwaysInstallElevated
Se questi 2 registri sono abilitati (il valore è 0x1), allora gli utenti di qualsiasi privilegio possono installare (eseguire) file *.msi
come NT AUTHORITY\SYSTEM.
Payload di Metasploit
Se hai una sessione meterpreter, puoi automatizzare questa tecnica utilizzando il modulo exploit/windows/local/always_install_elevated
PowerUP
Usa il comando Write-UserAddMSI
da power-up per creare all'interno della directory corrente un binario MSI di Windows per elevare i privilegi. Questo script scrive un installer MSI precompilato che richiede l'aggiunta di un utente/gruppo (quindi avrai bisogno di accesso GIU):
Just execute the created binary to escalate privileges.
MSI Wrapper
Leggi questo tutorial per imparare a creare un wrapper MSI utilizzando questi strumenti. Nota che puoi avvolgere un ".bat" file se vuoi solo eseguire comandi
MSI WrapperCreate MSI with WIX
Create MSI with WIXCreate MSI with Visual Studio
Genera con Cobalt Strike o Metasploit un nuovo payload TCP EXE Windows in
C:\privesc\beacon.exe
Apri Visual Studio, seleziona Crea un nuovo progetto e digita "installer" nella casella di ricerca. Seleziona il progetto Setup Wizard e clicca su Avanti.
Dai un nome al progetto, come AlwaysPrivesc, usa
C:\privesc
per la posizione, seleziona posiziona soluzione e progetto nella stessa directory, e clicca su Crea.Continua a cliccare su Avanti fino a raggiungere il passo 3 di 4 (scegli i file da includere). Clicca su Aggiungi e seleziona il payload Beacon che hai appena generato. Poi clicca su Fine.
Evidenzia il progetto AlwaysPrivesc nell'Esplora soluzioni e nelle Proprietà, cambia TargetPlatform da x86 a x64.
Ci sono altre proprietà che puoi cambiare, come Autore e Produttore che possono far sembrare l'app installata più legittima.
Fai clic destro sul progetto e seleziona Visualizza > Azioni personalizzate.
Fai clic destro su Installa e seleziona Aggiungi azione personalizzata.
Fai doppio clic su Cartella dell'applicazione, seleziona il tuo file beacon.exe e clicca su OK. Questo garantirà che il payload beacon venga eseguito non appena l'installer viene avviato.
Sotto le Proprietà dell'azione personalizzata, cambia Run64Bit in True.
Infine, compilalo.
Se viene mostrato l'avviso
File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'
, assicurati di impostare la piattaforma su x64.
MSI Installation
Per eseguire l'installazione del file .msi
malevolo in background:
Per sfruttare questa vulnerabilità puoi usare: exploit/windows/local/always_install_elevated
Antivirus e Rilevatori
Impostazioni di Audit
Queste impostazioni decidono cosa viene registrato, quindi dovresti prestare attenzione
WEF
Windows Event Forwarding, è interessante sapere dove vengono inviati i log
LAPS
LAPS è progettato per la gestione delle password degli amministratori locali, garantendo che ogni password sia unica, casuale e regolarmente aggiornata sui computer collegati a un dominio. Queste password sono memorizzate in modo sicuro all'interno di Active Directory e possono essere accessibili solo dagli utenti a cui sono state concesse autorizzazioni sufficienti tramite ACL, consentendo loro di visualizzare le password degli amministratori locali se autorizzati.
LAPSWDigest
Se attivo, le password in chiaro sono memorizzate in LSASS (Local Security Authority Subsystem Service). Ulteriori informazioni su WDigest in questa pagina.
Protezione LSA
A partire da Windows 8.1, Microsoft ha introdotto una protezione avanzata per l'Autorità di Sicurezza Locale (LSA) per bloccare i tentativi da parte di processi non attendibili di leggere la sua memoria o iniettare codice, aumentando ulteriormente la sicurezza del sistema. Ulteriori informazioni sulla protezione LSA qui.
Credentials Guard
Credential Guard è stato introdotto in Windows 10. Il suo scopo è proteggere le credenziali memorizzate su un dispositivo contro minacce come gli attacchi pass-the-hash.| Ulteriori informazioni su Credentials Guard qui.
Credenziali Memorizzate
Le credenziali di dominio sono autenticate dall'Autorità di Sicurezza Locale (LSA) e utilizzate dai componenti del sistema operativo. Quando i dati di accesso di un utente vengono autenticati da un pacchetto di sicurezza registrato, le credenziali di dominio per l'utente vengono tipicamente stabilite. Ulteriori informazioni sulle Credenziali Memorizzate qui.
Utenti e Gruppi
Enumerare Utenti e Gruppi
Dovresti controllare se uno dei gruppi a cui appartieni ha permessi interessanti.
Gruppi privilegiati
Se appartieni a un gruppo privilegiato, potresti essere in grado di elevare i privilegi. Scopri di più sui gruppi privilegiati e su come abusarne per elevare i privilegi qui:
Privileged GroupsManipolazione dei token
Scopri di più su cosa sia un token in questa pagina: Windows Tokens. Controlla la pagina seguente per scoprire token interessanti e come abusarne:
Abusing TokensUtenti connessi / Sessioni
Cartelle home
Politica delle Password
Ottieni il contenuto degli appunti
Running Processes
File and Folder Permissions
Prima di tutto, elenca i processi controlla se ci sono password all'interno della riga di comando del processo. Controlla se puoi sovrascrivere qualche binario in esecuzione o se hai permessi di scrittura nella cartella del binario per sfruttare possibili DLL Hijacking attacks:
Controlla sempre la presenza di possibili debugger electron/cef/chromium in esecuzione, potresti abusarne per elevare i privilegi.
Controllo dei permessi dei binari dei processi
Controllo dei permessi delle cartelle dei file binari dei processi (DLL Hijacking)
Estrazione della password dalla memoria
Puoi creare un dump della memoria di un processo in esecuzione utilizzando procdump di sysinternals. Servizi come FTP hanno le credenziali in chiaro nella memoria, prova a eseguire il dump della memoria e leggere le credenziali.
Applicazioni GUI insicure
Le applicazioni che girano come SYSTEM possono consentire a un utente di avviare un CMD o navigare tra le directory.
Esempio: "Aiuto e supporto di Windows" (Windows + F1), cerca "prompt dei comandi", clicca su "Clicca per aprire il prompt dei comandi"
Servizi
Ottieni un elenco di servizi:
Permessi
Puoi usare sc per ottenere informazioni su un servizio
Si consiglia di avere il binario accesschk da Sysinternals per controllare il livello di privilegio richiesto per ciascun servizio.
È consigliato verificare se "Utenti autenticati" possono modificare qualche servizio:
Puoi scaricare accesschk.exe per XP qui
Abilita il servizio
Se ricevi questo errore (ad esempio con SSDPSRV):
Errore di sistema 1058 si è verificato. Il servizio non può essere avviato, o perché è disabilitato o perché non ha dispositivi abilitati associati.
Puoi abilitarlo usando
Tieni presente che il servizio upnphost dipende da SSDPSRV per funzionare (per XP SP1)
Un'altra soluzione alternativa a questo problema è eseguire:
Modifica del percorso del file binario del servizio
Nello scenario in cui il gruppo "Utenti autenticati" possiede SERVICE_ALL_ACCESS su un servizio, è possibile modificare il file binario eseguibile del servizio. Per modificare ed eseguire sc:
Riavvia il servizio
I privilegi possono essere elevati attraverso vari permessi:
SERVICE_CHANGE_CONFIG: Consente la riconfigurazione del binario del servizio.
WRITE_DAC: Abilita la riconfigurazione dei permessi, portando alla possibilità di modificare le configurazioni del servizio.
WRITE_OWNER: Permette l'acquisizione della proprietà e la riconfigurazione dei permessi.
GENERIC_WRITE: Eredita anche la capacità di modificare le configurazioni del servizio.
GENERIC_ALL: Eredita anch'essa la capacità di modificare le configurazioni del servizio.
Per la rilevazione e l'exploitation di questa vulnerabilità, si può utilizzare l'exploit/windows/local/service_permissions.
Permessi deboli dei binari dei servizi
Controlla se puoi modificare il binario eseguito da un servizio o se hai permessi di scrittura sulla cartella in cui si trova il binario (DLL Hijacking). Puoi ottenere ogni binario eseguito da un servizio utilizzando wmic (non in system32) e controllare i tuoi permessi usando icacls:
Puoi anche usare sc e icacls:
Modifica delle autorizzazioni del registro dei servizi
Dovresti controllare se puoi modificare qualche registro di servizio. Puoi controllare le tue autorizzazioni su un registro di servizio eseguendo:
Dovrebbe essere verificato se Authenticated Users o NT AUTHORITY\INTERACTIVE possiedono permessi FullControl
. In tal caso, il binario eseguito dal servizio può essere modificato.
Per cambiare il percorso del binario eseguito:
Permessi AppendData/AddSubdirectory del registro dei servizi
Se hai questo permesso su un registro, significa che puoi creare sotto registri da questo. Nel caso dei servizi Windows, questo è sufficiente per eseguire codice arbitrario:
AppendData/AddSubdirectory permission over service registryPercorsi di Servizio Non Citati
Se il percorso a un eseguibile non è racchiuso tra virgolette, Windows cercherà di eseguire ogni parte che termina prima di uno spazio.
Ad esempio, per il percorso C:\Program Files\Some Folder\Service.exe, Windows cercherà di eseguire:
Elenca tutti i percorsi di servizio non citati, escludendo quelli appartenenti ai servizi Windows integrati:
Puoi rilevare ed esploitare questa vulnerabilità con metasploit: exploit/windows/local/trusted\_service\_path
Puoi creare manualmente un binario di servizio con metasploit:
Azioni di Recupero
Windows consente agli utenti di specificare azioni da intraprendere se un servizio fallisce. Questa funzionalità può essere configurata per puntare a un binario. Se questo binario è sostituibile, potrebbe essere possibile un'escalation dei privilegi. Maggiori dettagli possono essere trovati nella documentazione ufficiale.
Applicazioni
Applicazioni Installate
Controlla i permessi dei binari (forse puoi sovrascriverne uno e ottenere privilegi elevati) e delle cartelle (DLL Hijacking).
Permessi di Scrittura
Controlla se puoi modificare qualche file di configurazione per leggere qualche file speciale o se puoi modificare qualche binario che verrà eseguito da un account Amministratore (schedtasks).
Un modo per trovare permessi deboli su cartelle/file nel sistema è fare:
Esegui all'avvio
Controlla se puoi sovrascrivere qualche registro o binario che verrà eseguito da un utente diverso. Leggi la seguente pagina per saperne di più su interessanti posizioni di autorun per escalare i privilegi:
Privilege Escalation with AutorunsDriver
Cerca possibili driver di terze parti strani/vulnerabili
PATH DLL Hijacking
Se hai permessi di scrittura all'interno di una cartella presente nel PATH potresti essere in grado di dirottare una DLL caricata da un processo e escalare i privilegi.
Controlla i permessi di tutte le cartelle all'interno del PATH:
Per ulteriori informazioni su come abusare di questo controllo:
Writable Sys Path +Dll Hijacking PrivescRete
Condivisioni
hosts file
Controlla la presenza di altri computer noti hardcoded nel file hosts
Interfacce di Rete & DNS
Open Ports
Controlla i servizi riservati dall'esterno
Tabella di Routing
Tabella ARP
Regole del Firewall
Controlla questa pagina per i comandi relativi al Firewall (elenca regole, crea regole, disattiva, disattiva...)
Altri comandi per l'enumerazione della rete qui
Windows Subsystem for Linux (wsl)
Il binario bash.exe
può essere trovato anche in C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe
Se ottieni l'utente root, puoi ascoltare su qualsiasi porta (la prima volta che usi nc.exe
per ascoltare su una porta, verrà chiesto tramite GUI se nc
dovrebbe essere consentito dal firewall).
Per avviare facilmente bash come root, puoi provare --default-user root
Puoi esplorare il filesystem WSL
nella cartella C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\
Credenziali di Windows
Credenziali di Winlogon
Gestore delle credenziali / Vault di Windows
Da https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault Il Vault di Windows memorizza le credenziali degli utenti per server, siti web e altri programmi che Windows può accedere automaticamente agli utenti. A prima vista, questo potrebbe sembrare che ora gli utenti possano memorizzare le proprie credenziali di Facebook, le credenziali di Twitter, le credenziali di Gmail, ecc., in modo che possano accedere automaticamente tramite i browser. Ma non è così.
Il Vault di Windows memorizza le credenziali che Windows può utilizzare per accedere automaticamente agli utenti, il che significa che qualsiasi applicazione Windows che necessita di credenziali per accedere a una risorsa (server o sito web) può utilizzare questo Gestore delle credenziali e il Vault di Windows e utilizzare le credenziali fornite invece che gli utenti debbano inserire continuamente nome utente e password.
A meno che le applicazioni non interagiscano con il Gestore delle credenziali, non penso sia possibile per loro utilizzare le credenziali per una data risorsa. Quindi, se la tua applicazione desidera utilizzare il vault, dovrebbe in qualche modo comunicare con il gestore delle credenziali e richiedere le credenziali per quella risorsa dal vault di archiviazione predefinito.
Usa cmdkey
per elencare le credenziali memorizzate sulla macchina.
Poi puoi usare runas
con l'opzione /savecred
per utilizzare le credenziali salvate. Il seguente esempio chiama un binario remoto tramite una condivisione SMB.
Utilizzando runas
con un insieme di credenziali fornite.
Nota che mimikatz, lazagne, credentialfileview, VaultPasswordView, o dal modulo Empire Powershell.
DPAPI
L'API di Protezione Dati (DPAPI) fornisce un metodo per la crittografia simmetrica dei dati, utilizzato prevalentemente all'interno del sistema operativo Windows per la crittografia simmetrica delle chiavi private asimmetriche. Questa crittografia sfrutta un segreto dell'utente o del sistema per contribuire significativamente all'entropia.
DPAPI consente la crittografia delle chiavi attraverso una chiave simmetrica derivata dai segreti di accesso dell'utente. In scenari che coinvolgono la crittografia del sistema, utilizza i segreti di autenticazione del dominio del sistema.
Le chiavi RSA dell'utente crittografate, utilizzando DPAPI, sono memorizzate nella directory %APPDATA%\Microsoft\Protect\{SID}
, dove {SID}
rappresenta l'Identificatore di Sicurezza dell'utente. La chiave DPAPI, co-locata con la chiave master che protegge le chiavi private dell'utente nello stesso file, consiste tipicamente di 64 byte di dati casuali. (È importante notare che l'accesso a questa directory è ristretto, impedendo l'elenco dei suoi contenuti tramite il comando dir
in CMD, anche se può essere elencata tramite PowerShell).
Puoi usare il modulo mimikatz dpapi::masterkey
con gli argomenti appropriati (/pvk
o /rpc
) per decrittarlo.
I file delle credenziali protetti dalla password principale si trovano solitamente in:
Puoi usare il modulo mimikatz dpapi::cred
con il corretto /masterkey
per decriptare.
Puoi estrarre molti DPAPI masterkey dalla memoria con il modulo sekurlsa::dpapi
(se sei root).
Credenziali PowerShell
Le credenziali PowerShell sono spesso utilizzate per scripting e compiti di automazione come un modo per memorizzare comodamente credenziali criptate. Le credenziali sono protette usando DPAPI, il che significa che possono essere decriptate solo dallo stesso utente sullo stesso computer in cui sono state create.
Per decriptare una credenziale PS dal file che la contiene puoi fare:
Wifi
Connessioni RDP Salvate
Puoi trovarle in HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\
e in HKCU\Software\Microsoft\Terminal Server Client\Servers\
Comandi Eseguiti Recentemente
Gestore Credenziali Desktop Remoto
Usa il modulo Mimikatz dpapi::rdg
con il corretto /masterkey
per decriptare qualsiasi file .rdg
Puoi estrarre molti masterkey DPAPI dalla memoria con il modulo Mimikatz sekurlsa::dpapi
Sticky Notes
Le persone spesso usano l'app StickyNotes sui workstation Windows per salvare password e altre informazioni, senza rendersi conto che si tratta di un file di database. Questo file si trova in C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite
ed è sempre utile cercarlo ed esaminarlo.
AppCmd.exe
Nota che per recuperare le password da AppCmd.exe devi essere Amministratore e eseguire con un livello di alta integrità.
AppCmd.exe si trova nella directory %systemroot%\system32\inetsrv\
.
Se questo file esiste, allora è possibile che alcune credenziali siano state configurate e possano essere recuperate.
Questo codice è stato estratto da PowerUP:
SCClient / SCCM
Controlla se C:\Windows\CCM\SCClient.exe
esiste .
Gli installer vengono eseguiti con privilegi di SYSTEM, molti sono vulnerabili a DLL Sideloading (Info da https://github.com/enjoiz/Privesc).
File e Registro (Credenziali)
Credenziali Putty
Chiavi Host SSH di Putty
Chiavi SSH nel registro
Le chiavi private SSH possono essere memorizzate all'interno della chiave di registro HKCU\Software\OpenSSH\Agent\Keys
, quindi dovresti controllare se c'è qualcosa di interessante lì:
Se trovi un'entrata all'interno di quel percorso, probabilmente sarà una chiave SSH salvata. È memorizzata in modo crittografato ma può essere facilmente decrittografata utilizzando https://github.com/ropnop/windows_sshagent_extract. Ulteriori informazioni su questa tecnica qui: https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/
Se il servizio ssh-agent
non è in esecuzione e desideri che si avvii automaticamente all'avvio, esegui:
Sembra che questa tecnica non sia più valida. Ho provato a creare alcune chiavi ssh, aggiungerle con ssh-add
e accedere tramite ssh a una macchina. Il registro HKCU\Software\OpenSSH\Agent\Keys non esiste e procmon non ha identificato l'uso di dpapi.dll
durante l'autenticazione della chiave asimmetrica.
File non presidiati
Puoi anche cercare questi file utilizzando metasploit: post/windows/gather/enum_unattend
Esempio di contenuto:
Backup di SAM e SYSTEM
Credenziali Cloud
McAfee SiteList.xml
Cerca un file chiamato SiteList.xml
Cached GPP Pasword
Una funzionalità era precedentemente disponibile che consentiva il deployment di account amministratore locali personalizzati su un gruppo di macchine tramite le Preferenze di Criteri di Gruppo (GPP). Tuttavia, questo metodo presentava significative vulnerabilità di sicurezza. In primo luogo, gli Oggetti di Criteri di Gruppo (GPO), memorizzati come file XML in SYSVOL, potevano essere accessibili da qualsiasi utente di dominio. In secondo luogo, le password all'interno di questi GPP, crittografate con AES256 utilizzando una chiave predefinita documentata pubblicamente, potevano essere decrittografate da qualsiasi utente autenticato. Questo rappresentava un serio rischio, poiché poteva consentire agli utenti di ottenere privilegi elevati.
Per mitigare questo rischio, è stata sviluppata una funzione per scansionare i file GPP memorizzati localmente contenenti un campo "cpassword" che non è vuoto. Una volta trovato un file del genere, la funzione decrittografa la password e restituisce un oggetto PowerShell personalizzato. Questo oggetto include dettagli sul GPP e sulla posizione del file, aiutando nell'identificazione e nella risoluzione di questa vulnerabilità di sicurezza.
Cerca in C:\ProgramData\Microsoft\Group Policy\history
o in C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history (precedente a W Vista) per questi file:
Groups.xml
Services.xml
Scheduledtasks.xml
DataSources.xml
Printers.xml
Drives.xml
Per decrittografare il cPassword:
Utilizzando crackmapexec per ottenere le password:
Configurazione Web di IIS
Esempio di web.config con credenziali:
Credenziali OpenVPN
Registri
Chiedere credenziali
Puoi sempre chiedere all'utente di inserire le sue credenziali o anche le credenziali di un altro utente se pensi che possa conoscerle (nota che chiedere direttamente al cliente le credenziali è davvero rischioso):
Possibili nomi di file contenenti credenziali
File noti che qualche tempo fa contenevano password in chiaro o Base64
Cerca tutti i file proposti:
Credenziali nel Cestino
Dovresti anche controllare il Cestino per cercare credenziali al suo interno
Per recuperare password salvate da diversi programmi puoi usare: http://www.nirsoft.net/password_recovery_tools.html
All'interno del registro
Altre possibili chiavi di registro con credenziali
Estrai le chiavi openssh dal registro.
Cronologia dei Browser
Dovresti controllare i db dove sono memorizzate le password di Chrome o Firefox. Controlla anche la cronologia, i segnalibri e i preferiti dei browser, quindi forse alcune password sono memorizzate lì.
Strumenti per estrarre password dai browser:
Mimikatz:
dpapi::chrome
Sovrascrittura di DLL COM
Component Object Model (COM) è una tecnologia integrata nel sistema operativo Windows che consente l'intercomunicazione tra componenti software di lingue diverse. Ogni componente COM è identificato tramite un ID di classe (CLSID) e ogni componente espone funzionalità tramite una o più interfacce, identificate tramite ID di interfaccia (IIDs).
Le classi e le interfacce COM sono definite nel registro sotto HKEY_CLASSES_ROOT\CLSID e HKEY_CLASSES_ROOT\Interface rispettivamente. Questo registro è creato unendo HKEY_LOCAL_MACHINE\Software\Classes + HKEY_CURRENT_USER\Software\Classes = HKEY_CLASSES_ROOT.
All'interno dei CLSID di questo registro puoi trovare il registro figlio InProcServer32 che contiene un valore predefinito che punta a una DLL e un valore chiamato ThreadingModel che può essere Apartment (Single-Threaded), Free (Multi-Threaded), Both (Single o Multi) o Neutral (Thread Neutral).
Fondamentalmente, se puoi sovrascrivere una delle DLL che verranno eseguite, potresti escalare i privilegi se quella DLL verrà eseguita da un utente diverso.
Per sapere come gli attaccanti utilizzano il COM Hijacking come meccanismo di persistenza, controlla:
COM HijackingRicerca generica di password in file e registro
Cerca nei contenuti dei file
Cerca un file con un certo nome di file
Cerca nel registro chiavi e password
Strumenti che cercano password
MSF-Credentials Plugin è un plugin msf che ho creato per eseguire automaticamente ogni modulo POST di metasploit che cerca credenziali all'interno della vittima. Winpeas cerca automaticamente tutti i file contenenti password menzionati in questa pagina. Lazagne è un altro ottimo strumento per estrarre password da un sistema.
Lo strumento SessionGopher cerca sessioni, nomi utente e password di diversi strumenti che salvano questi dati in chiaro (PuTTY, WinSCP, FileZilla, SuperPuTTY e RDP)
Leaked Handlers
Immagina che un processo in esecuzione come SYSTEM apra un nuovo processo (OpenProcess()
) con accesso completo. Lo stesso processo crea anche un nuovo processo (CreateProcess()
) con privilegi bassi ma ereditando tutti i gestori aperti del processo principale.
Quindi, se hai accesso completo al processo con privilegi bassi, puoi afferrare il gestore aperto al processo privilegiato creato con OpenProcess()
e iniettare un shellcode.
Leggi questo esempio per ulteriori informazioni su come rilevare e sfruttare questa vulnerabilità.
Leggi questo altro post per una spiegazione più completa su come testare e abusare di più gestori aperti di processi e thread ereditati con diversi livelli di permessi (non solo accesso completo).
Named Pipe Client Impersonation
I segmenti di memoria condivisa, noti come pipe, consentono la comunicazione tra processi e il trasferimento di dati.
Windows fornisce una funzionalità chiamata Named Pipes, che consente a processi non correlati di condividere dati, anche su reti diverse. Questo assomiglia a un'architettura client/server, con ruoli definiti come named pipe server e named pipe client.
Quando i dati vengono inviati attraverso una pipe da un client, il server che ha impostato la pipe ha la possibilità di assumere l'identità del client, a condizione che abbia i necessari diritti SeImpersonate. Identificare un processo privilegiato che comunica tramite una pipe che puoi imitare offre l'opportunità di ottenere privilegi più elevati adottando l'identità di quel processo una volta che interagisce con la pipe che hai stabilito. Per istruzioni su come eseguire un attacco del genere, puoi trovare guide utili qui e qui.
Inoltre, il seguente strumento consente di intercettare una comunicazione di named pipe con uno strumento come burp: https://github.com/gabriel-sztejnworcel/pipe-intercept e questo strumento consente di elencare e vedere tutte le pipe per trovare privescs https://github.com/cyberark/PipeViewer
Misc
Monitoring Command Lines for passwords
Quando ottieni una shell come utente, potrebbero esserci attività pianificate o altri processi in esecuzione che passano credenziali sulla riga di comando. Lo script sottostante cattura le righe di comando dei processi ogni due secondi e confronta lo stato attuale con lo stato precedente, producendo eventuali differenze.
Furto di password dai processi
Da utente con privilegi bassi a NT\AUTHORITY SYSTEM (CVE-2019-1388) / Bypass UAC
Se hai accesso all'interfaccia grafica (tramite console o RDP) e UAC è abilitato, in alcune versioni di Microsoft Windows è possibile eseguire un terminale o qualsiasi altro processo come "NT\AUTHORITY SYSTEM" da un utente non privilegiato.
Questo rende possibile l'escalation dei privilegi e il bypass di UAC allo stesso tempo con la stessa vulnerabilità. Inoltre, non è necessario installare nulla e il binario utilizzato durante il processo è firmato e rilasciato da Microsoft.
Alcuni dei sistemi interessati sono i seguenti:
Per sfruttare questa vulnerabilità, è necessario eseguire i seguenti passaggi:
Hai tutti i file e le informazioni necessarie nel seguente repository GitHub:
https://github.com/jas502n/CVE-2019-1388
Da Administrator Medium a High Integrity Level / UAC Bypass
Leggi questo per imparare sugli Integrity Levels:
Integrity LevelsPoi leggi questo per imparare su UAC e sugli UAC bypass:
UAC - User Account ControlDa High Integrity a System
Nuovo servizio
Se stai già eseguendo un processo ad alta integrità, il passaggio a SYSTEM può essere facile semplicemente creando ed eseguendo un nuovo servizio:
AlwaysInstallElevated
Da un processo ad alta integrità potresti provare a abilitare le voci di registro AlwaysInstallElevated e installare una reverse shell utilizzando un .msi wrapper. Ulteriori informazioni sulle chiavi di registro coinvolte e su come installare un pacchetto .msi qui.
Privilegi High + SeImpersonate a System
Puoi trovare il codice qui.
Da SeDebug + SeImpersonate a privilegi di token completi
Se hai quei privilegi di token (probabilmente li troverai in un processo già ad alta integrità), sarai in grado di aprire quasi qualsiasi processo (processi non protetti) con il privilegio SeDebug, copiare il token del processo e creare un processo arbitrario con quel token. Utilizzando questa tecnica di solito è selezionato qualsiasi processo in esecuzione come SYSTEM con tutti i privilegi di token (sì, puoi trovare processi SYSTEM senza tutti i privilegi di token). Puoi trovare un esempio di codice che esegue la tecnica proposta qui.
Named Pipes
Questa tecnica è utilizzata da meterpreter per eseguire l'escale in getsystem
. La tecnica consiste nel creare un pipe e poi creare/abuse un servizio per scrivere su quel pipe. Poi, il server che ha creato il pipe utilizzando il privilegio SeImpersonate
sarà in grado di impersonare il token del client del pipe (il servizio) ottenendo privilegi SYSTEM.
Se vuoi saperne di più sui named pipes dovresti leggere questo.
Se vuoi leggere un esempio di come passare da alta integrità a System utilizzando i named pipes dovresti leggere questo.
Dll Hijacking
Se riesci a hijackare un dll che viene caricato da un processo in esecuzione come SYSTEM sarai in grado di eseguire codice arbitrario con quei permessi. Pertanto, il Dll Hijacking è utile anche per questo tipo di escalation dei privilegi e, inoltre, è molto più facile da ottenere da un processo ad alta integrità poiché avrà permessi di scrittura sulle cartelle utilizzate per caricare i dll. Puoi saperne di più sul Dll hijacking qui.
Da Administrator o Network Service a System
Da LOCAL SERVICE o NETWORK SERVICE a privilegi completi
Leggi: https://github.com/itm4n/FullPowers
Maggiori aiuti
Strumenti utili
Miglior strumento per cercare vettori di escalation dei privilegi locali di Windows: WinPEAS
PS
PrivescCheck
PowerSploit-Privesc(PowerUP) -- Controlla configurazioni errate e file sensibili (controlla qui). Rilevato.
JAWS -- Controlla alcune possibili configurazioni errate e raccoglie informazioni (controlla qui).
privesc -- Controlla configurazioni errate
SessionGopher -- Estrae informazioni sulle sessioni salvate di PuTTY, WinSCP, SuperPuTTY, FileZilla e RDP. Usa -Thorough in locale.
Invoke-WCMDump -- Estrae credenziali dal Credential Manager. Rilevato.
DomainPasswordSpray -- Spruzza le password raccolte attraverso il dominio
Inveigh -- Inveigh è uno strumento di spoofing e man-in-the-middle PowerShell ADIDNS/LLMNR/mDNS/NBNS.
WindowsEnum -- Enumerazione di base dei privilegi di Windows
Sherlock ~~~~ -- Cerca vulnerabilità di privesc note (DEPRECATO per Watson)
WINspect -- Controlli locali (Richiede diritti di amministratore)
Exe
Watson -- Cerca vulnerabilità di privesc note (deve essere compilato utilizzando VisualStudio) (precompilato)
SeatBelt -- Enumera l'host cercando configurazioni errate (più uno strumento di raccolta informazioni che di privesc) (deve essere compilato) (precompilato)
LaZagne -- Estrae credenziali da molti software (exe precompilato in github)
SharpUP -- Porting di PowerUp in C#
Beroot ~~~~ -- Controlla configurazioni errate (eseguibile precompilato in github). Non raccomandato. Non funziona bene in Win10.
Windows-Privesc-Check -- Controlla possibili configurazioni errate (exe da python). Non raccomandato. Non funziona bene in Win10.
Bat
winPEASbat -- Strumento creato basato su questo post (non ha bisogno di accesschk per funzionare correttamente ma può usarlo).
Locale
Windows-Exploit-Suggester -- Legge l'output di systeminfo e raccomanda exploit funzionanti (python locale) Windows Exploit Suggester Next Generation -- Legge l'output di systeminfo e raccomanda exploit funzionanti (python locale)
Meterpreter
multi/recon/local_exploit_suggestor
Devi compilare il progetto utilizzando la versione corretta di .NET (vedi questo). Per vedere la versione installata di .NET sull'host vittima puoi fare:
Bibliografia
Last updated