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)
यह https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/ पोस्ट का सारांश है। आगे की जानकारी के लिए इसे देखें!
.NET में डिबगर और डिबगी के बीच संचार का प्रबंधन dbgtransportsession.cpp द्वारा किया जाता है। यह घटक प्रत्येक .NET प्रक्रिया के लिए दो नामित पाइप स्थापित करता है, जैसा कि dbgtransportsession.cpp#L127 में देखा गया है, जो twowaypipe.cpp#L27 के माध्यम से आरंभ होते हैं। इन पाइपों के अंत में -in
और -out
जोड़ा जाता है।
उपयोगकर्ता के $TMPDIR
पर जाकर, .Net अनुप्रयोगों के लिए उपलब्ध डिबगिंग FIFOs पाए जा सकते हैं।
DbgTransportSession::TransportWorker संचार प्रबंधन के लिए जिम्मेदार है। एक नया डिबगिंग सत्र शुरू करने के लिए, एक डिबगर को out
पाइप के माध्यम से एक संदेश भेजना चाहिए जो MessageHeader
संरचना से शुरू होता है, जो .NET स्रोत कोड में विस्तृत है:
इस नए सत्र का अनुरोध करने के लिए, इस संरचना को निम्नलिखित रूप से भरा जाता है, संदेश प्रकार को MT_SessionRequest
और प्रोटोकॉल संस्करण को वर्तमान संस्करण पर सेट करते हुए:
यह हेडर फिर write
syscall का उपयोग करके लक्ष्य पर भेजा जाता है, इसके बाद sessionRequestData
संरचना होती है जिसमें सत्र के लिए एक GUID होता है:
out
पाइप पर एक पढ़ने का ऑपरेशन डिबगिंग सत्र की स्थापना की सफलता या विफलता की पुष्टि करता है:
एक डिबगिंग सत्र स्थापित होने के बाद, मेमोरी को MT_ReadMemory
संदेश प्रकार का उपयोग करके पढ़ा जा सकता है। फ़ंक्शन readMemory विस्तृत है, पढ़ने के अनुरोध को भेजने और प्रतिक्रिया प्राप्त करने के लिए आवश्यक कदम उठाता है:
The complete proof of concept (POC) is available here.
इसी तरह, मेमोरी को writeMemory
फ़ंक्शन का उपयोग करके लिखा जा सकता है। प्रक्रिया में संदेश प्रकार को MT_WriteMemory
पर सेट करना, डेटा का पता और लंबाई निर्दिष्ट करना, और फिर डेटा भेजना शामिल है:
संबंधित POC यहाँ उपलब्ध है।
कोड निष्पादित करने के लिए, एक को मेमोरी क्षेत्र की पहचान करनी होती है जिसमें rwx अनुमतियाँ होती हैं, जिसे vmmap -pages का उपयोग करके किया जा सकता है।
एक फ़ंक्शन पॉइंटर को ओवरराइट करने के लिए स्थान ढूंढना आवश्यक है, और .NET Core में, यह Dynamic Function Table (DFT) को लक्षित करके किया जा सकता है। यह तालिका, जो jithelpers.h
में विस्तृत है, रनटाइम द्वारा JIT संकलन सहायक फ़ंक्शनों के लिए उपयोग की जाती है।
x64 सिस्टम के लिए, सिग्नेचर हंटिंग का उपयोग libcorclr.dll
में प्रतीक _hlpDynamicFuncTable
के संदर्भ को खोजने के लिए किया जा सकता है।
MT_GetDCB
डिबगर फ़ंक्शन उपयोगी जानकारी प्रदान करता है, जिसमें एक सहायक फ़ंक्शन का पता, m_helperRemoteStartAddr
, शामिल है, जो प्रक्रिया मेमोरी में libcorclr.dll
के स्थान को इंगित करता है। इस पते का उपयोग DFT के लिए खोज शुरू करने और फ़ंक्शन पॉइंटर को शेलकोड के पते के साथ ओवरराइट करने के लिए किया जाता है।
PowerShell में इंजेक्शन के लिए पूरा POC कोड यहाँ उपलब्ध है।
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)