macOS .Net Applications Injection
Hii ni muhtasari wa chapisho https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/. Angalia kwa maelezo zaidi!
Udukuzi wa .NET Core
Kuanzisha Kikao cha Udukuzi
Usimamizi wa mawasiliano kati ya kudukuzi na programu inayodukuliwa katika .NET unadhibitiwa na dbgtransportsession.cpp. Sehemu hii inaweka mabomba mawili yaliyopewa jina kwa kila mchakato wa .NET kama ilivyoonekana katika dbgtransportsession.cpp#L127, ambayo huanzishwa kupitia twowaypipe.cpp#L27. Mabomba haya yanamaliziwa na -in
na -out
.
Kwa kutembelea $TMPDIR
ya mtumiaji, mtu anaweza kupata mabomba ya udukuzi yanayopatikana kwa ajili ya programu za .Net.
DbgTransportSession::TransportWorker inahusika na usimamizi wa mawasiliano kutoka kwa kudukuzi. Ili kuanzisha kikao kipya cha udukuzi, kudukuzi lazima atume ujumbe kupitia mabomba ya out
ukiwa na muundo wa MessageHeader
struct, ulioelezewa kwa undani katika msimbo wa chanzo wa .NET:
Kuomba kikao kipya, muundo huu unajazwa kama ifuatavyo, ukiweka aina ya ujumbe kuwa MT_SessionRequest
na toleo la itifaki kuwa toleo la sasa:
Kichwa hiki kisha kinatumwa kwa lengo kwa kutumia write
syscall, ikifuatiwa na sessionRequestData
struct inayojumuisha GUID kwa kikao:
Operesheni ya kusoma kwenye bomba la out
inathibitisha mafanikio au kushindwa kwa kuanzisha kikao cha kurekebisha makosa:
Kusoma Kumbukumbu
Marudio ya kubugia yameanzishwa, kumbukumbu inaweza kusomwa kwa kutumia aina ya ujumbe MT_ReadMemory
. Kazi ya kusoma kumbukumbu imefafanuliwa, ikitekeleza hatua zinazohitajika kutuma ombi la kusoma na kupata jibu.
Uthibitisho kamili wa dhana (POC) inapatikana hapa.
Kuandika Kumbukumbu
Vivyo hivyo, kumbukumbu inaweza kuandikwa kwa kutumia kazi ya writeMemory
. Mchakato unahusisha kuweka aina ya ujumbe kuwa MT_WriteMemory
, kisha kutoa anwani na urefu wa data, na hatimaye kutuma data:
POC inapatikana hapa.
.NET Core Utekelezaji wa Kanuni
Ili kutekeleza kanuni, mtu anahitaji kutambua eneo la kumbukumbu lenye ruhusa za rwx, ambalo linaweza kufanywa kwa kutumia vmmap -pages:
Kupata mahali pa kubadilisha kidole cha kazi ni muhimu, na katika .NET Core, hii inaweza kufanywa kwa kulenga Dynamic Function Table (DFT). Jedwali hili, lililoelezwa katika jithelpers.h
, hutumiwa na runtime kwa kazi za msaada wa kompilisheni ya JIT.
Kwa mifumo ya x64, unaweza kutumia utafutaji wa saini kupata marejeleo kwa ishara _hlpDynamicFuncTable
katika libcorclr.dll
.
Kazi ya kudebugi ya MT_GetDCB
hutoa habari muhimu, ikiwa ni pamoja na anwani ya kazi ya msaada, m_helperRemoteStartAddr
, inayoonyesha mahali pa libcorclr.dll
katika kumbukumbu ya mchakato. Anwani hii kisha hutumiwa kuanza utafutaji wa DFT na kubadilisha kidole cha kazi na anwani ya shellcode.
Msimbo kamili wa POC kwa kuingiza katika PowerShell unapatikana hapa.
Marejeo
Last updated