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 डीबगर से संचार प्रबंधित करने के लिए जिम्मेदार है। एक नई डीबगिंग सत्र प्रारंभ करने के लिए, एक डीबगर को एक MessageHeader
संरचना के साथ out
पाइप के माध्यम से एक संदेश भेजना होगा, जो .NET स्रोत कोड में विस्तार से वर्णित है:
एक नए सत्र का अनुरोध करने के लिए, यह स्ट्रक्ट निम्नलिखित रूप में पूरा किया जाता है, संदेश प्रकार को MT_SessionRequest
और प्रोटोकॉल संस्करण को वर्तमान संस्करण पर सेट करके:
यह हेडर फिर write
सिसकॉल का उपयोग करके लक्ष्य को भेजा जाता है, जिसके बाद 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