macOS .Net Applications Injection
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)
Dit is 'n opsomming van die pos https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/. Kyk daarna vir verdere besonderhede!
Die hantering van kommunikasie tussen die debugger en debuggee in .NET word bestuur deur dbgtransportsession.cpp. Hierdie komponent stel twee benoemde pype per .NET proses op soos gesien in dbgtransportsession.cpp#L127, wat geinitieer word via twowaypipe.cpp#L27. Hierdie pype is gesuffikseerd met -in
en -out
.
Deur die gebruiker se $TMPDIR
te besoek, kan 'n mens debugging FIFOs vind wat beskikbaar is vir debugging .Net toepassings.
DbgTransportSession::TransportWorker is verantwoordelik vir die bestuur van kommunikasie van 'n debugger. Om 'n nuwe debugging sessie te begin, moet 'n debugger 'n boodskap via die out
pyp stuur wat begin met 'n MessageHeader
struktuur, soos in die .NET bronkode uiteengesit:
Om 'n nuwe sessie aan te vra, word hierdie struktuur soos volg ingevul, met die boodskap tipe op MT_SessionRequest
en die protokol weergawe op die huidige weergawe:
Hierdie kop is dan na die teiken gestuur met die write
syscall, gevolg deur die sessionRequestData
struktuur wat 'n GUID vir die sessie bevat:
'n Leesoperasie op die out
pyp bevestig die sukses of mislukking van die debugging sessie se totstandkoming:
Sodra 'n foutopsporing sessie gevestig is, kan geheue gelees word met behulp van die MT_ReadMemory
boodskap tipe. Die funksie readMemory is gedetailleerd, en voer die nodige stappe uit om 'n leesversoek te stuur en die antwoord te verkry:
Die volledige bewys van konsep (POC) is beskikbaar hier.
Op soortgelyke wyse kan geheue geskryf word met die writeMemory
funksie. Die proses behels om die boodskap tipe op MT_WriteMemory
te stel, die adres en lengte van die data te spesifiseer, en dan die data te stuur:
Die geassosieerde POC is beskikbaar hier.
Om kode uit te voer, moet 'n mens 'n geheuegebied met rwx-toestemmings identifiseer, wat gedoen kan word met vmmap -pages:
Locating a place to overwrite a function pointer is necessary, and in .NET Core, this can be done by targeting the Dynamic Function Table (DFT). This table, detailed in jithelpers.h
, is used by the runtime for JIT compilation helper functions.
Vir x64 stelsels kan handtekening jag gebruik word om 'n verwysing na die simbool _hlpDynamicFuncTable
in libcorclr.dll
te vind.
Die MT_GetDCB
debuggingsfunksie bied nuttige inligting, insluitend die adres van 'n helper funksie, m_helperRemoteStartAddr
, wat die ligging van libcorclr.dll
in die prosesgeheue aandui. Hierdie adres word dan gebruik om 'n soektog na die DFT te begin en 'n funksie-aanwyser met die shellcode se adres te oorskryf.
The full POC code for injection into PowerShell is accessible here.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)