Dll Hijacking
Savet za bug bounty: prijavite se za Intigriti, premium platformu za bug bounty kreiranu od hakera, za hakere! Pridružite nam se na https://go.intigriti.com/hacktricks danas, i počnite da zarađujete nagrade do $100,000!
Osnovne informacije
DLL Hijacking uključuje manipulisanje pouzdane aplikacije da učita zlonamerni DLL. Ovaj termin obuhvata nekoliko taktika poput DLL Spoofing-a, Injection-a i Side-Loading-a. Glavno se koristi za izvršavanje koda, postizanje postojanosti i, ređe, eskalaciju privilegija. Bez obzira na fokus na eskalaciji ovde, metoda preuzimanja ostaje dosledna u svim ciljevima.
Česte tehnike
Postoje nekoliko metoda koje se koriste za DLL preuzimanje, pri čemu je efikasnost svake zavisna od strategije učitavanja DLL-a aplikacije:
Zamena DLL-a: Zamena originalnog DLL-a zlonamernim, opciono korišćenjem DLL Proxying-a da bi se sačuvala funkcionalnost originalnog DLL-a.
DLL Search Order Hijacking: Postavljanje zlonamernog DLL-a u pretragu ispred legitimnog, iskorišćavajući šablon pretrage aplikacije.
Phantom DLL Hijacking: Kreiranje zlonamernog DLL-a za učitavanje od strane aplikacije, misleći da je to nepostojeći potreban DLL.
DLL Redirection: Modifikacija parametara pretrage poput
%PATH%
ili.exe.manifest
/.exe.local
fajlova da bi se aplikacija usmerila na zlonamerni DLL.WinSxS DLL Replacement: Zamena legitimnog DLL-a zlonamernim pandanom u WinSxS direktorijumu, metoda često povezana sa DLL side-loading-om.
Relative Path DLL Hijacking: Postavljanje zlonamernog DLL-a u direktorijum koji kontroliše korisnik sa kopiranom aplikacijom, podsećajući na tehnike Binary Proxy Execution.
Pronalaženje nedostajućih Dll-ova
Najčešći način pronalaženja nedostajućih Dll-ova unutar sistema je pokretanje procmon iz sysinternals-a, postavljanjem sledećih 2 filtera:
i prikazivanje File System Activity:
Ako tražite nedostajuće dll-ove uopšte ostavite ovo pokrenuto nekoliko sekundi. Ako tražite nedostajući dll unutar određene izvršne datoteke trebalo bi da postavite drugi filter poput "Process Name" "contains" "<ime izvršne datoteke>", izvršite je i zaustavite snimanje događaja.
Iskorišćavanje nedostajućih Dll-ova
Da bismo eskalirali privilegije, najbolja šansa koju imamo je da napišemo dll koji će pokušati da učita privilegovani proces na nekom od mesta gde će biti pretražen. Stoga ćemo moći da napišemo dll u folderu gde će se dll pretraživati pre foldera gde se nalazi originalni dll (čudan slučaj), ili ćemo moći da pišemo u neki folder gde će se tražiti dll i originalni dll ne postoji ni u jednom folderu.
Redosled pretrage DLL-a
Unutar Microsoft dokumentacije možete pronaći kako se DLL-ovi učitavaju specifično.
Windows aplikacije traže DLL-ove prateći set unapred definisanih putanja pretrage, pridržavajući se određenog redosleda. Problem sa DLL preuzimanjem nastaje kada se štetan DLL strategijski 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 odnosi na DLL-ove koje zahteva.
Možete videti redosled pretrage DLL-ova na 32-bitnim sistemima ispod:
Direktorijum iz kog je aplikacija učitana.
Sistemski direktorijum. Koristite GetSystemDirectory funkciju da biste dobili putanju ovog direktorijuma.(C:\Windows\System32)
16-bitni sistemski direktorijum. Ne postoji funkcija koja dobavlja putanju ovog direktorijuma, ali se pretražuje. (C:\Windows\System)
Windows direktorijum. Koristite GetWindowsDirectory funkciju da biste dobili putanju ovog direktorijuma.
(C:\Windows)
Trenutni direktorijum.
Direktorijumi navedeni u PATH okruženjskoj promenljivoj. Napomena: ovo ne uključuje putanju po aplikaciji navedenu ključem App Paths u registru. Ključ App Paths se ne koristi prilikom računanja putanje pretrage DLL-a.
To je podrazumevani redosled pretrage sa omogućenim SafeDllSearchMode-om. Kada je onemogućen, trenutni direktorijum se penje na drugo mesto. Da biste onemogućili ovu funkciju, kreirajte vrednost registra HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode i postavite je na 0 (podrazumevano je omogućeno).
Ako se funkcija LoadLibraryEx poziva 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 navođenjem apsolutne putanje umesto samo imena. U tom slučaju, taj dll će se tražiti samo na toj putanji (ako dll ima bilo kakve zavisnosti, biće tražene kao što su upravo učitane po imenu).
Postoje i drugi načini za izmenu redosleda pretrage, ali ih ovde neću objašnjavati.
Izuzeci u redosledu pretrage dll fajlova prema Windows dokumentaciji
Određeni izuzeci od standardnog redosleda pretrage DLL fajlova su navedeni u Windows dokumentaciji:
Kada se naiđe na DLL fajl koji deli ime sa već učitanim fajlom u memoriji, sistem preskače uobičajenu pretragu. Umesto toga, vrši proveru preusmerenja i manifesta pre nego što se podrazumevano vrati na DLL već učitan u memoriju. U ovom scenariju, sistem ne vrši pretragu za DLL fajlom.
U slučajevima kada se DLL prepozna kao poznati DLL za trenutnu verziju Windows-a, sistem će koristiti svoju verziju poznatog DLL fajla, zajedno sa svim zavisnim DLL fajlovima, preskačući proces pretrage. Ključ registra HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs sadrži listu ovih poznatih DLL fajlova.
Ukoliko DLL fajl ima zavisnosti, pretraga za ovim zavisnim DLL fajlovima se vrši kao da su naznačeni samo njihovi nazivi modula, bez obzira da li je početni DLL identifikovan putanjom.
Eskalacija privilegija
Zahtevi:
Identifikovati proces koji radi ili će raditi pod različitim privilegijama (horizontalno ili lateralno kretanje), koji nedostaje DLL fajl.
Osigurati da je dostupan pristup pisanju za bilo koju direktorijum u kojem će se tražiti DLL. Ova lokacija može biti direktorijum izvršne datoteke ili direktorijum unutar sistemskog puta.
Da, zahtevi su komplikovani za pronaći jer je podrazumevano pomalo čudno pronaći privilegovanu izvršnu datoteku koja nedostaje dll fajlu i još je čudnije imati dozvole za pisanje u folderu sistema (to nije moguće podrazumevano). Međutim, u neskonfigurisanim okruženjima ovo je moguće. U slučaju da imate sreće i ispunjavate zahteve, možete proveriti projekat UACME. Iako je glavni cilj projekta zaobilazak UAC-a, tamo možete pronaći PoC za Dll preusmeravanje za Windows verziju koju možete koristiti (verovatno samo menjajući putanju foldera u kojem imate dozvole za pisanje).
Imajte na umu da možete proveriti svoje dozvole u folderu koristeći:
I proverite dozvole svih foldera unutar PUTANJE:
Takođe možete proveriti uvoze izvršne datoteke i izvoze DLL datoteke pomoću:
Za potpuni vodič o tome kako zloupotrebiti Dll Hijacking radi eskalacije privilegija sa dozvolama za pisanje u System Path folderu proverite:
pageWritable Sys Path +Dll Hijacking PrivescAutomatizovani alati
Winpeas će proveriti da li imate dozvole za pisanje u bilo kom folderu unutar sistema PATH. 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 iskorišćiv scenarij, jedna od najvažnijih stvari za uspešno iskorišćavanje bilo bi kreiranje dll-a koji izvozi barem sve funkcije koje će izvršna datoteka uvesti iz njega. U svakom slučaju, imajte na umu da Dll Hijacking dolazi u ruci kako bi eskaliro od srednjeg nivoa integriteta do visokog (bypassing UAC) ili od visokog integriteta do SYSTEM-a. Možete pronaći primer kako kreirati validan dll unutar ovog studija o dll hijackingu fokusiranom na dll hijacking za izvršavanje: https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows. Osim toga, u narednoj sekciji možete pronaći neke osnovne dll kodove koji mogu biti korisni kao predlošci ili za kreiranje dll-a sa neobaveznim izvezenim funkcijama.
Kreiranje i kompajliranje Dll-ova
Dll Proksiranje
U osnovi, Dll proxy je Dll sposoban da izvrši vaš zlonamerni kod prilikom učitavanja, ali takođe i da izloži i radi kao očekivano prenoseći sve pozive pravoj biblioteci.
Pomoću alata DLLirant ili Spartacus možete zapravo označiti izvršnu datoteku i izabrati biblioteku koju želite da proksirate i generisati proksifikovani dll ili označiti Dll i generisati proksifikovani dll.
Meterpreter
Get rev shell (x64):
Dobijanje meterpretera (x86):
Kreirajte korisnika (x86 Nisam video x64 verziju):
Tvoj sopstveni
Imajte na umu 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 eksploatacija će neuspeti.
Reference
Savet o nagradi za otkrivanje grešaka: prijavite se za Intigriti, premium platformu za otkrivanje grešaka kreiranu od hakera, za hakere! Pridružite nam se na https://go.intigriti.com/hacktricks danas, i počnite da zarađujete nagrade do $100,000!
Last updated