macOS .Net Applications Injection
Ovo je sažetak posta https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/. Proverite ga za dalje detalje!
.NET Core Debugging
Usmeravanje Debugging Sesije
Upravljanje komunikacijom između debagera i debuggee u .NET-u se vrši putem dbgtransportsession.cpp. Ova komponenta postavlja dve imenovane cevi po .NET procesu, kao što se može videti u dbgtransportsession.cpp#L127, koje se iniciraju putem twowaypipe.cpp#L27. Ove cevi su sa sufiksima -in
i -out
.
Posetom korisničkom $TMPDIR
, mogu se pronaći debugging FIFO-ovi dostupni za debugging .Net aplikacija.
DbgTransportSession::TransportWorker je odgovoran za upravljanje komunikacijom iz debagera. Da bi se započela nova debugging sesija, debager mora poslati poruku putem out
cevi koja počinje sa MessageHeader
strukturom, detaljno opisanu u .NET izvoru:
Da biste zatražili novu sesiju, ova struktura se popunjava na sledeći način, postavljajući tip poruke na MT_SessionRequest
i verziju protokola na trenutnu verziju:
Ova glava se zatim šalje cilju koristeći write
syscall, nakon čega sledi sessionRequestData
struktura koja sadrži GUID za sesiju:
Operacija čitanja na out
cevi potvrđuje uspeh ili neuspeh uspostavljanja sesije debagovanja:
Читање Мемоарије
Када се успостави сесија дебаговања, меморија се може читати користећи MT_ReadMemory
тип поруке. Функција readMemory је детаљно објашњена, извршавајући неопходне кораке за слање захтева за читање и преузимање одговора:
Kompletan dokaz koncepta (POC) je dostupan ovde.
Pisanje u Memoriju
Slično tome, memorija se može pisati koristeći funkciju writeMemory
. Proces uključuje postavljanje tipa poruke na MT_WriteMemory
, određivanje adrese i dužine podataka, a zatim slanje podataka:
Povezani POC je dostupan ovde.
.NET Core Izvršavanje Koda
Da bi se izvršio kod, potrebno je identifikovati memorijsku oblast sa rwx dozvolama, što se može uraditi koristeći vmmap -pages:
Lociranje mesta za prepisivanje pokazivača funkcije je neophodno, a u .NET Core, to se može uraditi ciljanjem na Dynamic Function Table (DFT). Ova tabela, detaljno opisana u jithelpers.h
, koristi se od strane runtime-a za JIT kompajlaciju pomoćnih funkcija.
Za x64 sisteme, pretraživanje potpisa može se koristiti za pronalaženje reference na simbol _hlpDynamicFuncTable
u libcorclr.dll
.
Debugger funkcija MT_GetDCB
pruža korisne informacije, uključujući adresu pomoćne funkcije, m_helperRemoteStartAddr
, koja ukazuje na lokaciju libcorclr.dll
u memoriji procesa. Ova adresa se zatim koristi za započinjanje pretrage za DFT i prepisivanje pokazivača funkcije sa adresom shellcode-a.
Puni POC kod za injekciju u PowerShell je dostupan ovde.
References
Last updated