macOS .Net Applications Injection
यह https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/ पोस्ट का सारांश है। आगे की जानकारी के लिए इसे देखें!
.NET Core Debugging
डिबगिंग सत्र स्थापित करना
.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 विस्तृत है, पढ़ने के अनुरोध को भेजने और प्रतिक्रिया प्राप्त करने के लिए आवश्यक कदम उठाता है:
पूर्ण प्रमाण अवधारणा (POC) यहाँ उपलब्ध है।
मेमोरी लिखना
इसी तरह, writeMemory
फ़ंक्शन का उपयोग करके मेमोरी लिखी जा सकती है। प्रक्रिया में संदेश प्रकार को MT_WriteMemory
पर सेट करना, डेटा का पता और लंबाई निर्दिष्ट करना, और फिर डेटा भेजना शामिल है:
संबंधित POC यहाँ उपलब्ध है।
.NET Core कोड निष्पादन
कोड निष्पादित करने के लिए, एक को मेमोरी क्षेत्र की पहचान करनी होती है जिसमें rwx अनुमतियाँ होती हैं, जिसे vmmap -pages: का उपयोग करके किया जा सकता है।
एक फ़ंक्शन पॉइंटर को ओवरराइट करने के लिए स्थान ढूंढना आवश्यक है, और .NET Core में, यह डायनामिक फ़ंक्शन टेबल (DFT) को लक्षित करके किया जा सकता है। यह तालिका, जो jithelpers.h
में विस्तृत है, रनटाइम द्वारा JIT संकलन सहायक फ़ंक्शनों के लिए उपयोग की जाती है।
x64 सिस्टम के लिए, सिग्नेचर हंटिंग का उपयोग libcorclr.dll
में प्रतीक _hlpDynamicFuncTable
के संदर्भ को खोजने के लिए किया जा सकता है।
MT_GetDCB
डिबगर फ़ंक्शन उपयोगी जानकारी प्रदान करता है, जिसमें एक सहायक फ़ंक्शन का पता, m_helperRemoteStartAddr
, शामिल है, जो प्रक्रिया मेमोरी में libcorclr.dll
के स्थान को इंगित करता है। इस पते का उपयोग DFT के लिए खोज शुरू करने और फ़ंक्शन पॉइंटर को शेलकोड के पते के साथ ओवरराइट करने के लिए किया जाता है।
PowerShell में इंजेक्शन के लिए पूरा POC कोड यहाँ उपलब्ध है।
संदर्भ
Last updated