Dll Hijacking
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Bug bounty tip: jiandikishe kwa Intigriti, jukwaa la bug bounty la premium lililotengenezwa na hackers, kwa hackers! Jiunge nasi kwenye https://go.intigriti.com/hacktricks leo, na uanze kupata zawadi hadi $100,000!
DLL Hijacking inahusisha kudanganya programu inayotambulika ili kupakia DLL mbaya. Neno hili linajumuisha mbinu kadhaa kama DLL Spoofing, Injection, na Side-Loading. Inatumika hasa kwa ajili ya utekelezaji wa msimbo, kufikia kudumu, na, kwa kiwango kidogo, kupandisha mamlaka. Ingawa kuna mkazo kwenye kupandisha mamlaka hapa, mbinu ya kudanganya inabaki kuwa sawa katika malengo.
Mbinu kadhaa zinatumika kwa DLL hijacking, kila moja ikiwa na ufanisi wake kulingana na mkakati wa upakiaji wa DLL wa programu:
DLL Replacement: Kubadilisha DLL halisi na moja mbaya, kwa hiari kutumia DLL Proxying ili kuhifadhi kazi ya DLL ya asili.
DLL Search Order Hijacking: Kuweka DLL mbaya katika njia ya utafutaji kabla ya ile halali, ikitumia muundo wa utafutaji wa programu.
Phantom DLL Hijacking: Kuunda DLL mbaya kwa programu kupakia, ikidhani ni DLL inayohitajika isiyopo.
DLL Redirection: Kubadilisha vigezo vya utafutaji kama vile %PATH%
au faili za .exe.manifest
/ .exe.local
ili kuelekeza programu kwa DLL mbaya.
WinSxS DLL Replacement: Kubadilisha DLL halali na sawa mbaya katika saraka ya WinSxS, mbinu ambayo mara nyingi inahusishwa na DLL side-loading.
Relative Path DLL Hijacking: Kuweka DLL mbaya katika saraka inayodhibitiwa na mtumiaji pamoja na programu iliyokopwa, ikifanana na mbinu za Binary Proxy Execution.
Njia ya kawaida zaidi ya kupata Dlls zinazokosekana ndani ya mfumo ni kuendesha procmon kutoka sysinternals, kuiweka filta hizi 2 zifuatazo:
na kuonyesha tu Shughuli za Mfumo wa Faili:
Ikiwa unatafuta dll zinazokosekana kwa ujumla unapaswa kuacha hii ikikimbia kwa sekunde chache. Ikiwa unatafuta dll inayokosekana ndani ya executable maalum unapaswa kuweka filta nyingine kama "Jina la Mchakato" "linajumuisha" "<jina la exec>", kuendesha, na kusitisha kukamata matukio.
Ili kupandisha mamlaka, nafasi bora tuliyonayo ni kuwa na uwezo wa kuandika dll ambayo mchakato wenye mamlaka utajaribu kupakia katika baadhi ya mahali ambapo itatafutwa. Hivyo, tutakuwa na uwezo wa kuandika dll katika folda ambapo dll inatafutwa kabla ya folda ambapo dll ya asili iko (kesi ya ajabu), au tutakuwa na uwezo wa kuandika kwenye folda fulani ambapo dll itatafutwa na dll ya asili haipo kwenye folda yoyote.
Ndani ya nyaraka za Microsoft unaweza kupata jinsi Dlls zinavyopakiwa kwa usahihi.
Programu za Windows hutafuta DLLs kwa kufuata seti ya njia za utafutaji zilizowekwa awali, zikizingatia mpangilio maalum. Tatizo la DLL hijacking linatokea wakati DLL mbaya imewekwa kimkakati katika moja ya saraka hizi, kuhakikisha inapata kupakiwa kabla ya DLL halisi. Suluhisho la kuzuia hili ni kuhakikisha programu inatumia njia za moja kwa moja inaporejelea DLLs inazohitaji.
Unaweza kuona mpangilio wa utafutaji wa DLL kwenye mifumo ya 32-bit hapa chini:
Saraka ambayo programu ilipakia.
Saraka ya mfumo. Tumia GetSystemDirectory kazi kupata njia ya saraka hii.(C:\Windows\System32)
Saraka ya mfumo ya 16-bit. Hakuna kazi inayopata njia ya saraka hii, lakini inatafutwa. (C:\Windows\System)
Saraka ya Windows. Tumia GetWindowsDirectory kazi kupata njia ya saraka hii.
(C:\Windows)
Saraka ya sasa.
Saraka ambazo ziko kwenye mabadiliko ya mazingira ya PATH. Kumbuka kwamba hii haijumuishi njia ya kila programu iliyowekwa na funguo za App Paths za rejista. Funguo za App Paths hazitumiki wakati wa kuhesabu njia ya utafutaji wa DLL.
Huu ndio mpangilio wa kawaida wa utafutaji na SafeDllSearchMode imewezeshwa. Wakati imezimwa, saraka ya sasa inapaa hadi nafasi ya pili. Ili kuzima kipengele hiki, tengeneza HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode thamani ya rejista na uweke kuwa 0 (kawaida imewezeshwa).
Ikiwa LoadLibraryEx kazi inaitwa na LOAD_WITH_ALTERED_SEARCH_PATH utafutaji huanza katika saraka ya moduli ya executable ambayo LoadLibraryEx inakimbia.
Hatimaye, kumbuka kwamba dll inaweza kupakiwa ikionyesha njia kamili badala ya jina tu. Katika kesi hiyo, dll hiyo itaweza kutafutwa tu katika hiyo njia (ikiwa dll ina utegemezi wowote, zitatafutwa kama zilivyojulikana kwa jina).
Kuna njia nyingine za kubadilisha njia za kubadilisha mpangilio wa utafutaji lakini sitazielezea hapa.
Mambo fulani ya kipekee kwa mpangilio wa kawaida wa utafutaji wa DLL yanatajwa katika nyaraka za Windows:
Wakati DLL inayoshiriki jina lake na moja ambayo tayari imepakiwa kwenye kumbukumbu inakutana, mfumo hupita utafutaji wa kawaida. Badala yake, unafanya ukaguzi wa uelekeo na hati kabla ya kurudi kwa DLL iliyoko kwenye kumbukumbu. Katika hali hii, mfumo haufanyi utafutaji wa DLL.
Katika kesi ambapo DLL inatambuliwa kama DLL inayojulikana kwa toleo la sasa la Windows, mfumo utatumia toleo lake la DLL inayojulikana, pamoja na DLL zake zinazotegemea, bila kufanya mchakato wa utafutaji. Funguo ya rejista HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs ina orodha ya hizi DLL zinazojulikana.
Ikiwa DLL ina utegemezi, utafutaji wa hizi DLL zinazotegemea unafanywa kana kwamba zilionyeshwa tu kwa majina ya moduli zao, bila kujali ikiwa DLL ya awali ilitambuliwa kupitia njia kamili.
Mahitaji:
Tambua mchakato unaofanya kazi au utafanya kazi chini ya mamlaka tofauti (harakati za usawa au za pembeni), ambayo haina DLL.
Hakikisha ufikiaji wa kuandika upo kwa saraka yoyote ambayo DLL itatafutwa. Mahali hapa inaweza kuwa saraka ya executable au saraka ndani ya njia ya mfumo.
Ndio, mahitaji ni magumu kupatikana kwani kwa kawaida ni ajabu kupata executable yenye mamlaka ikikosekana dll na ni ajabu zaidi kuwa na ruhusa za kuandika kwenye folda ya njia ya mfumo (huwezi kwa kawaida). Lakini, katika mazingira yasiyo sahihi, hii inawezekana. Katika kesi uko na bahati na unakutana na mahitaji, unaweza kuangalia mradi wa UACME. Hata kama lengo kuu la mradi ni kupita UAC, unaweza kupata huko PoC ya Dll hijacking kwa toleo la Windows ambalo unaweza kutumia (labda tu kubadilisha njia ya folda ambapo una ruhusa za kuandika).
Kumbuka kwamba unaweza kuangalia ruhusa zako katika folda kwa kufanya:
Na kagua ruhusa za folda zote ndani ya PATH:
Unaweza pia kuangalia uagizaji wa executable na usafirishaji wa dll kwa kutumia:
Kwa mwongozo kamili juu ya jinsi ya kudhulumu Dll Hijacking ili kupandisha mamlaka na ruhusa za kuandika katika folda ya Njia ya Mfumo angalia:
Writable Sys Path +Dll Hijacking PrivescWinpeas itakagua ikiwa una ruhusa za kuandika kwenye folda yoyote ndani ya mfumo PATH. Zana nyingine za kiotomatiki zinazovutia kugundua udhaifu huu ni PowerSploit functions: Find-ProcessDLLHijack, Find-PathDLLHijack na Write-HijackDll.
Iwapo utapata hali inayoweza kutumiwa, moja ya mambo muhimu ili kufanikiwa kuitumia ni kuunda dll inayosafirisha angalau kazi zote ambazo executable itazipata kutoka kwake. Hata hivyo, kumbuka kwamba Dll Hijacking inakuwa na manufaa ili kupandisha kutoka Kiwango cha Uaminifu wa Kati hadi Juu (kupita UAC) au kutoka Kiwango cha Juu hadi SYSTEM. Unaweza kupata mfano wa jinsi ya kuunda dll halali ndani ya utafiti huu wa dll hijacking ulioangazia dll hijacking kwa utekelezaji: https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows. Zaidi ya hayo, katika sehemu inayofuata unaweza kupata baadhi ya misimbo ya msingi ya dll ambayo inaweza kuwa na manufaa kama mifano au kuunda dll yenye kazi zisizohitajika zilizofichwa.
Kimsingi Dll proxy ni Dll inayoweza kutekeleza msimbo wako mbaya unapopakuliwa lakini pia kuonyesha na kufanya kazi kama ilivyotarajiwa kwa kupeleka simu zote kwa maktaba halisi.
Kwa zana DLLirant au Spartacus unaweza kwa kweli kuashiria executable na kuchagua maktaba unayotaka kuproxify na kuunda dll iliyoprosify au kuashiria Dll na kuunda dll iliyoprosify.
Pata rev shell (x64):
Pata meterpreter (x86):
Unda mtumiaji (x86 sikuona toleo la x64):
Kumbuka kwamba katika kesi kadhaa Dll unayoandika lazima itolee nje kazi kadhaa ambazo zitakuwa zikichukuliwa na mchakato wa mwathirika, ikiwa kazi hizi hazipo binafsi haitakuwa na uwezo wa kuzipeleka na shambulio litashindwa.
Bug bounty tip: jiandikishe kwa Intigriti, jukwaa la bug bounty la kiwango cha juu lililotengenezwa na hackers, kwa hackers! Jiunge nasi kwenye https://go.intigriti.com/hacktricks leo, na anza kupata zawadi hadi $100,000!
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)