Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
SilentMoonwalk — पूरी तरह से गतिशील कॉल स्टैक स्पूफ़र का PoC कार्यान्वयन | Kitploit
उपकरण/GitHubGitHub/klezvirus/silentmoonwalk
शोषणरिवर्स इंजीनियरिंगबाइनरी विश्लेषणरेड टीमिंगपेलोड डेवलपमेंट
GitHubklezvirus/silentmoonwalk

SilentMoonwalk

पूरी तरह से गतिशील कॉल स्टैक स्पूफ़र का PoC कार्यान्वयन

रिपॉजिटरी देखें
9851132 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

SilentMoonwalk

पूर्णतः गतिशील कॉल स्टैक स्पूफर का PoC कार्यान्वयन

TL;DR

SilentMoonwalk एक पूर्णतः गतिशील कॉल स्टैक स्पूफर का PoC कार्यान्वयन है, जो मूल कॉलर को कॉल स्टैक से हटाने की तकनीक को लागू करता है, नियंत्रण प्रवाह से अनवाइंडिंग को डीसिंक्रोनाइज़ करने के लिए ROP का उपयोग करता है।

लेखक

यह PoC स्टैक स्पूफिंग के विषय पर संयुक्त शोध का परिणाम है। शोध के लेखक हैं:

  • KlezVirus
  • Waldo-IRC
  • Trickster0

मैं इस बात पर जोर देना चाहता हूँ कि यह कार्य Waldo-IRC और Trickster0 के काम के बिना असंभव होता, जिन्होंने PoC के शुरुआती चरणों और PoC के पीछे के शोध में योगदान दिया।

अवलोकन

यह रिपॉजिटरी मनमाने Windows API को कॉल करते समय कॉल स्टैक को स्पूफ करने के लिए एक PoC कार्यान्वयन प्रदर्शित करती है।

यह प्रयास इस Twitter थ्रेड और इस Twitter थ्रेड से प्रेरित था, जहाँ sensei namazso ने स्टैक अनवाइंडिंग दृष्टिकोण को ROP श्रृंखला के साथ विस्तारित करने का सुझाव दिया ताकि अनवाइंडिंग को वास्तविक नियंत्रण प्रवाह से डीसिंक्रोनाइज़ किया जा सके और बाद में मूल स्टैक को पुनर्स्थापित किया जा सके।

यह PoC उपरोक्त के समान कुछ करने का प्रयास करता है, और मूल कॉल स्टैक को पूरी तरह छिपाने के लिए डीसिंक स्टैक का उपयोग करता है, साथ ही EXE इमेज बेस को भी हटा देता है। वापसी पर, मूल स्टैक को पुनर्स्थापित करने के लिए एक ROP गैजेट को आमंत्रित किया जाता है। कोड में, इस प्रक्रिया को लूप में 10 बार दोहराया जाता है, प्रत्येक पुनरावृत्ति में विभिन्न फ्रेम का उपयोग करके, स्थिरता साबित करने के लिए।

समर्थित मोड

उपकरण वर्तमान में 2 मोड का समर्थन करता है, जहाँ एक वास्तव में एक गैर-काम करने वाले पॉप RBP फ्रेम के लिए गलत पैच है, जो वर्तमान RSP को स्थानांतरित करके और कॉल स्टैक में दो नकली फ्रेम जोड़कर संचालित होता है। चूँकि यह सिंथेटिक फ्रेम का उपयोग करके संचालित होता है, मैं इस मोड को "SYNTHETIC" के रूप में संदर्भित करता हूँ।

जब उपकरण उस फ्रेम का चयन करता है जो स्टैक से RBP रजिस्टर को पॉप करके अनवाइंड होता है, तो यह एक अनुपयुक्त फ्रेम का चयन कर सकता है, जिसके परिणामस्वरूप अचानक कटा हुआ कॉल स्टैक बनता है, जैसा कि नीचे देखा जा सकता है।

Windows 10 Call Stack - Cut

सिंथेटिक कॉल स्टैक मोड

समस्या का एक मूर्खतापूर्ण समाधान दो नकली फ्रेम बनाना और उन्हें कटे हुए कॉल स्टैक से जोड़ना होगा। इससे एक प्रकार का स्पष्ट रूप से वैध कॉल स्टैक बन जाएगा, भले ही POP RBP कॉल करने वाला कोई उपयुक्त फ्रेम न हो, लेकिन:

  • आप डीसिंक तकनीक का लाभ खो देंगे
  • स्टैक अभी भी अनवाइंड करने योग्य होगा
  • परिणामी कॉल स्टैक पहली नज़र में वैध लग सकता है, लेकिन यह संभवतः सख्त जाँच पास नहीं करेगा

_सिंथेटिक स्पूफ का परिणाम नीचे दी गई छवि में देखा जा सकता है:

Windows 10 Call Stack - Apparently Legit, non unwoundable - getchar

चित्र 1: Windows 10 - स्पष्ट रूप से वैध, गैर-अनवाइंड करने योग्य कॉल स्टैक जिसमें EXE मॉड्यूल पूरी तरह से हटा दिया गया है (बिना पैरामीटर के फ़ंक्शन getchar को कॉल करना)

नोट: यह ऑपरेशन मोड डिफ़ॉल्ट रूप से अक्षम है। इस मोड को सक्षम करने के लिए, CALLSTACK_TYPE को 1 में बदलें

डीसिंक स्टैक मोड

यह मोड उपरोक्त समस्या का सही समाधान है, जिसमें अनुपयुक्त फ्रेम को केवल एक अन्य उपयुक्त फ्रेम से बदल दिया जाता है।

Windows 10 Call Stack - Legit, unwoundable - MessageBoxExA

चित्र 2: Windows 10 - वैध, अनवाइंड करने योग्य कॉल स्टैक जिसमें EXE मॉड्यूल पूरी तरह से हटा दिया गया है (4 पैरामीटर वाले फ़ंक्शन MessageBoxA को कॉल करना)

उपयोगिता

रिपॉजिटरी में, आप रनटाइम फ़ंक्शन का निरीक्षण करने के लिए एक छोटी उपयोगिता भी पा सकते हैं, जो रनटाइम फ़ंक्शन प्रविष्टियों का विश्लेषण करने में उपयोगी हो सकती है।

root@kitploit:~
UnwindInspector.exe -h

 Unwind Inspector v0.100000

 अनिवार्य तर्क:
   -m <मॉड्यूल>: लक्ष्य DLL
   -f <फ़ंक्शन>: लक्ष्य फ़ंक्शन
   -a <फ़ंक्शन-पता>: लक्ष्य फ़ंक्शन पता

नमूना आउटपुट:

root@kitploit:~
UnwindInspector.exe -m kernelbase -a 0x7FFAAE12182C
[*] फ़ंक्शन पता 0x7ffaae12182c का उपयोग कर रहा है

  रनटाइम फ़ंक्शन (0x000000000000182C, 0x00000000000019ED)
  अनवाइंड जानकारी पता: 0x000000000026AA88
    संस्करण: 0
    Ver + Flags: 00000000
    SizeOfProlog: 0x1f
    CountOfCodes: 0xc
    FrameRegister: 0x0
    FrameOffset: 0x0
    UnwindCodes:
    [00h] Frame: 0x741f - 0x04  - UWOP_SAVE_NONVOL     (RDI, 0x001f)
    [01h] Frame: 0x0015 - 0x00  - UWOP_PUSH_NONVOL     (RAX, 0x0015)
    [02h] Frame: 0x641f - 0x04  - UWOP_SAVE_NONVOL     (RSI, 0x001f)
    [03h] Frame: 0x0014 - 0x00  - UWOP_PUSH_NONVOL     (RAX, 0x0014)
    [04h] Frame: 0x341f - 0x04  - UWOP_SAVE_NONVOL     (RBX, 0x001f)
    [05h] Frame: 0x0012 - 0x00  - UWOP_PUSH_NONVOL     (RAX, 0x0012)
    [06h] Frame: 0xb21f - 0x02  - UWOP_ALLOC_SMALL     (R11, 0x001f)
    [07h] Frame: 0xf018 - 0x00  - UWOP_PUSH_NONVOL     (R15, 0x0018)
    [08h] Frame: 0xe016 - 0x00  - UWOP_PUSH_NONVOL     (R14, 0x0016)
    [09h] Frame: 0xd014 - 0x00  - UWOP_PUSH_NONVOL     (R13, 0x0014)
    [0ah] Frame: 0xc012 - 0x00  - UWOP_PUSH_NONVOL     (R12, 0x0012)
    [0bh] Frame: 0x5010 - 0x00  - UWOP_PUSH_NONVOL     (RBP, 0x0010)

निर्माण

PoC बनाने और चित्र में दिखाए गए समान व्यवहार देखने के लिए, सुनिश्चित करें:

  • GS अक्षम करें (/GS-)
  • कोड ऑप्टिमाइज़ेशन अक्षम करें (/Od)
  • होल प्रोग्राम ऑप्टिमाइज़ेशन अक्षम करें (/GL हटाएं)
  • आकार और गति प्राथमिकता अक्षम करें (/Os, /Ot हटाएं)
  • इंट्रिन्सिक सक्षम करें यदि सक्षम नहीं है (/Oi)

पिछला कार्य

इस विषय पर पिछले कार्य का उल्लेख करना उचित है, जिसने इस कार्य की नींव रखी।

  • Return Address Spoofing: मूल तकनीक और विचार, Namaszo द्वारा। मेरी जानकारी में हर दूसरा PoC इसी पर बनाया गया है।
  • YouMayPasser: Arash द्वारा यह अद्भुत कार्य Namaszo के Return Address Spoofing PoC का पहला उचित रूप से किया गया विस्तार है।
  • VulcanRaven: एक कॉल स्टैक स्पूफर जो किसी अन्य वास्तविक कॉल स्टैक को दर्पण करके एक थ्रेड स्टैक को सिंथेटिक रूप से बनाकर स्पूफिंग संचालित करता है।
  • Unwinder: एक बहुत अच्छा Rust PoC कार्यान्वयन एक कॉल स्टैक स्पूफर का जो कॉल स्टैक में फ्रेम को बदलने के लिए अनवाइंड कोड जानकारी को पार्स करके संचालित होता है।

श्रेय

  • waldo-irc और trickster0 को बहुत-बहुत धन्यवाद, जिन्होंने इस शोध में मेरे साथ सहयोग किया। मैं उनका ऋणी हूँ।
  • इसके पीछे के विचार का सारा श्रेय namaszo को जाता है, जिन्हें मैं व्यक्तिगत रूप से प्रतिभाशाली मानता हूँ। उन्होंने रिलीज़ से पहले इस PoC की क्रॉस-जाँच भी की, इसलिए उन्हें बहुत धन्यवाद।

नोट्स

  • [केवल SYNTHETIC स्टैक]: जिस तरह से मैं गैजेट ढूंढ रहा हूँ उसमें सीमा के कारण, अभी के लिए अधिकतम तर्क संख्या 8 है (अधिक पैरामीटर जोड़ना और संशोधित करना TRIVIAL है, लेकिन मैं परेशान नहीं हो सका)।
  • [केवल DSESYNC स्टैक]: जिस तरह से मैं स्पूफर सेट कर रहा हूँ उसमें सीमा के कारण, अभी के लिए समर्थित अधिकतम तर्क संख्या 4 है।
  • इस पर परीक्षण काफी सीमित था। हो सकता है कि कुछ अपवाद हों जिनके बारे में मुझे अभी पता नहीं है।
  • 128-बिट रजिस्टरों को शामिल करने वाली अनवाइंडिंग का परीक्षण नहीं किया गया।
  • 128-बिट रजिस्टरों का उपयोग करने वाले फ़ंक्शन को कॉल करना आधिकारिक रूप से समर्थित नहीं है।
टूल डाउनलोड करें