
Spartacus DLL/COM Hijacking Toolkit
[!CAUTION] यह रिपॉजिटरी अनुरक्षित नहीं है, नवीनतम संस्करण के लिए https://github.com/sadreck/Spartacus पर जाएं।
यदि आपने 1960 की फिल्म स्पार्टाकस देखी है, तो आपको वह दृश्य याद होगा जहां रोमन लोग स्पार्टाकस से आत्मसमर्पण करने के लिए कह रहे हैं। जैसे ही असली स्पार्टाकस खड़ा हुआ, बहुत से अन्य लोग भी खड़े हो गए और "आई एम स्पार्टाकस" वाक्यांश का उपयोग करके स्वयं को उसके रूप में दावा किया।
जब एक प्रक्रिया जो DLL हाइजैकिंग के प्रति संवेदनशील है, किसी DLL को लोड करने के लिए पूछती है, तो वह किसी तरह पूछती है "वर्जन.डीएलएल कौन है?" और यादृच्छिक निर्देशिकाएं दावा करने लगती हैं "मैं वर्जन.डीएलएल हूं" और "नहीं, मैं वर्जन.डीएलएल हूं"। और इस प्रकार, स्पार्टाकस।
DllMain से सब कुछ चलाने के बजाय व्यक्तिगत रूप से प्रॉक्सी किए गए फ़ंक्शन के माध्यम से अपना पेलोड निष्पादित करें। यह तकनीक https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain पर वर्णित वॉकथ्रू से प्रेरित और कार्यान्वित की गई है, Shantanu Khandelwal द्वारा।[रक्षा] निगरानी मोड चल रहे अनुप्रयोगों की पहचान करने का प्रयास करता है जो कॉल को प्रॉक्सी कर रहे हैं, जैसे "DLL हाइजैकिंग प्रगति पर है"। यह केवल किसी भी आसानी से मिलने वाले लाभ को प्राप्त करने के लिए है और इस पर भरोसा नहीं किया जाना चाहिए।Spartacus का नवीनतम संस्करण रिलीज़ के अंतर्गत खोजें और डाउनलोड करें। अन्यथा बस इस रिपॉजिटरी को क्लोन करें और स्रोत से बिल्ड करें।
नीचे Spartacus द्वारा समर्थित प्रत्येक मोड का विवरण दिया गया है।
नोट: कमांड लाइन तर्क v1 से v2 में काफी बदल गए हैं।
Spartacus की मूल कार्यक्षमता केवल DLL हाइजैकिंग कमजोरियों को खोजना था। यह इस प्रकार काम करता है:
CreateFile है।.dll के साथ समाप्त होता है।procmon.exe या procmon64.exe नहीं है।ड्रॉप फ़िल्टर्ड इवेंट्स सक्षम करें।ऑटो स्क्रॉल अक्षम करें।ENTER न दबाए।ENTER दबाने पर प्रोसेस मॉनिटर समाप्त हो जाता है।सभी घटनाओं को एकत्र करें और उन्हें C:\Data\logs.pml में सहेजें। सभी कमजोर DLL को C:\Data\VulnerableDLLFiles.csv के रूप में और सभी प्रॉक्सी DLL समाधान C:\Data\Solutions में सहेजे जाएंगे।
--mode dll --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose
मौजूदा PML इवेंट लॉग आउटपुट को पार्स करें, आउटपुट को CSV में सहेजें, और प्रॉक्सी विज़ुअल स्टूडियो समाधान उत्पन्न करें।
--mode dll --existing --pml C:\MyData\SomeBackup.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose


Spartacus की एक नई कार्यक्षमता स्थानीय COM हाइजैकिंग कमजोरियों की पहचान करना है। यह इस प्रकार काम करता है:
RegOpenKey है।procmon.exe या procmon64.exe नहीं है।ड्रॉप फ़िल्टर्ड इवेंट्स सक्षम करें।ऑटो स्क्रॉल अक्षम करें।ENTER न दबाए।ENTER दबाने पर प्रोसेस मॉनिटर समाप्त हो जाता है।InprocServer32 में समाप्त होती हैं और जिनका परिणाम NAME_NOT_FOUND है।HKEY_CURRENT_USER के अंतर्गत है, तो HKEY_CLASSES_ROOT के अंतर्गत इसका GUID खोजें और इसका विवरण निर्यात CSV में शामिल करें (यदि मिला)।COM हाइजैकिंग के लिए Spartacus गलत कॉन्फ़िगर किए गए COM प्रविष्टियों के लिए स्थानीय सिस्टम को स्कैन करने का भी समर्थन करता है:
HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, और HKEY_LOCAL_MACHINE सभी को गणना करें।InProcServer, InProcServer32, LocalServer, या LocalServer32 कहा जाता है।सभी घटनाओं को एकत्र करें और उन्हें C:\Data\logs.pml में सहेजें। सभी कमजोर COM जानकारी C:\Data\VulnerableCOM.csv के रूप में सहेजी जाएगी।
--mode com --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose
कमजोर COM प्रविष्टियों की पहचान करने के लिए मौजूदा PML फ़ाइल को संसाधित करें।
--mode com --existing --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose
लापता/गलत कॉन्फ़िगर किए गए COM लाइब्रेरी और निष्पादन योग्य की पहचान करने के लिए स्थानीय सिस्टम रजिस्ट्री की गणना करें।
--mode com --acl --csv C:\Data\VulnerableCOM.csv --verbose


Spartacus उस DLL के आधार पर विज़ुअल स्टूडियो समाधान उत्पन्न करने का समर्थन करता है जिसका आप शोषण करना चाहते हैं, जिससे आपके उपयोग के लिए कंकाल परियोजनाएं बनाई जा सकें।
DllMain फ़ंक्शन से निष्पादित करना होगा।DllMain के बाहर किसी फ़ंक्शन से निष्पादित कर सकते हैं।version.dll का शोषण करना चाहते हैं, तो आप अपना इम्प्लांट GetFileVersionInfoExW से चला सकते हैं यदि वह फ़ंक्शन कमजोर एप्लिकेशन द्वारा कॉल किया जाता है।एक समाधान उत्पन्न करें जो सभी निर्यातों को पुनर्निर्देशित करता है (कोई फ़ंक्शन प्रॉक्सी नहीं)।
--mode proxy --dll C:\Windows\System32\version.dll --solution "C:\data\tmp\refactor-version" --overwrite --verbose --external-resources
एक साथ कई DLL इनपुट करना संभव है।
--mode proxy --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\userenv.dll --solution "C:\data\tmp\dll-collection" --overwrite --verbose --external-resources
जितना संभव हो उतने कार्यों के लिए प्रॉक्सी बनाएं (Ghidra के आउटपुट के आधार पर)।
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose
ऊपर जैसा ही, लेकिन समाधान उत्पन्न करने के लिए बाहरी एसेट फ़ाइलों का उपयोग करें (यदि आपको उन्हें संशोधित करने की आवश्यकता है)।
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources
उन कार्यों के लिए पूर्व-निर्मित फ़ंक्शन प्रोटोटाइप का उपयोग करें जिनके लिए Ghidra फ़ंक्शन परिभाषाएं निकालने में असमर्थ था।
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources --prototypes C:\data\prototypes.csv
केवल फ़ंक्शन GetFileVersionInfoExW और GetFileVersionInfoExA के लिए प्रॉक्सी उत्पन्न करें।
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\version.dll --solution C:\Projects\spartacus-version --verbose --overwrite --external-resources --only "GetFileVersionInfoExW, GetFileVersionInfoExA"
मौजूदा *.h फ़ाइलों से एक फ़ंक्शन प्रोटोटाइप डेटाबेस उत्पन्न करें, जो उन कार्यों के लिए प्रॉक्सी फ़ंक्शन बनाने में सहायता करता है जिनके लिए Ghidra अपनी फ़ंक्शन परिभाषा निकालने में सक्षम नहीं था।
--mode proxy --action prototypes --path "C:\Program Files (x86)\Windows Kits" --csv C:\data\prototypes.csv --verbose
DLL के निर्यातों की सूची बनाएं और जांचें कि क्या प्रत्येक फ़ंक्शन के लिए पूर्व-निर्मित प्रोटोटाइप है।
--mode proxy --action exports --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\amsi.dll --prototypes ./Assets/prototypes.csv
Spartacus अब स्व-हस्ताक्षरित प्रमाणपत्र उत्पन्न करने (मौजूदा फ़ाइलों से गुणों की प्रतिलिपि बनाते हुए) और DLL फ़ाइलों पर हस्ताक्षर करने का समर्थन करता है।
C:\Windows\System32\version.dll (हस्ताक्षरित DLL होना चाहिए) से गुणों का उपयोग करके एक हस्ताक्षर प्रमाणपत्र बनाएं।
--mode sign --action generate --pfx "C:\Output\certificate.pfx" --password "Welcome1" --not-before "2022-12-31 00:00:55" --not-after "2026-01-01 00:00:01" --copy-from C:\Windows\System32\version.dll --verbose
मौजूदा/उत्पन्न प्रमाणपत्र का उपयोग करके DLL पर हस्ताक्षर करें।
--mode sign --action sign --pfx "C:\Output\certificate.pfx" --password "Welcome1" --path "C:\Input\MyFakeVersion.dll" --algorithm SHA256 --verbose
Spartacus में एक --detect मोड भी है, जो सक्रिय DLL प्रॉक्सीिंग की पहचान करने का प्रयास करता है। इसके पीछे का तर्क है:
इस सुविधा का उपयोग करने के लिए, बस --detect के साथ Spartacus चलाएँ।
Spartacus --sign मोड का समर्थन करता है जो आपको स्व-हस्ताक्षरित प्रमाणपत्र उत्पन्न करने के साथ-साथ संकलित DLL पर उनके साथ हस्ताक्षर करने की अनुमति देता है।
एक स्व-हस्ताक्षरित प्रमाणपत्र उत्पन्न करें, मौजूदा फ़ाइल से जारीकर्ता/विषय की प्रतिलिपि बनाएं:
--mode sign --action generate --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --not-before "2023-01-01 00:00:04" --not-after "2025-01-01 00:00:42" --copy-from C:\Windows\System32\version.dll --verbose
और उस प्रमाणपत्र का उपयोग अपनी संकलित फ़ाइल पर हस्ताक्षर करने के लिए करें:
--mode sign --action sign --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --path "C:\Projects\Spartacus-AMSI\amsi.dll" --algorithm SHA256 --verbose
अपने जीवन को आसान बनाने के लिए, CommandLineGenerator.html फ़ाइल का उपयोग करें।
चाहे वह टाइपो हो, बग हो, या कोई नई सुविधा, Spartacus योगदान के लिए बहुत खुला है जब तक हम निम्नलिखित पर सहमत हैं:
proxy मोड का उपयोग कर सकते हैं।| मोड | तर्क | विवरण |
|---|
--mode | उपयोग करने के लिए मोड को परिभाषित करें, इनमें से एक: dll, proxy, com, और detect। | |
all | --verbose | विस्तृत आउटपुट सक्षम करें। |
all | --debug | डीबग आउटपुट सक्षम करें। |
all | --external-resources | डिफ़ॉल्ट रूप से Spartacus VS समाधान फ़ाइलें आदि उत्पन्न करने के लिए एम्बेडेड संसाधनों का उपयोग करेगा। यदि आपको टेम्पलेट्स को संशोधित करने की आवश्यकता है, तो इस तर्क का उपयोग करके Spartacus को ./Assets फ़ोल्डर से सभी फ़ाइलें लोड करने के लिए कहें। |
dll, com | --procmon | SysInternals Process Monitor procmon.exe या procmon64.exe का स्थान (फ़ाइल)। |
dll, com | --pml | ProcMon इवेंट लॉग फ़ाइल को स्टोर करने का स्थान (फ़ाइल)। यदि फ़ाइल मौजूद है, तो इसे अधिलेखित कर दिया जाएगा। जब --existing के साथ उपयोग किया जाता है, तो यह पढ़ने के लिए इवेंट लॉग फ़ाइल को इंगित करेगा और अधिलेखित नहीं किया जाएगा। |
dll, com | --pmc | एक कस्टम ProcMon (PMC) फ़ाइल परिभाषित करें। यह फ़ाइल संशोधित नहीं की जाएगी और जैसी है वैसी ही उपयोग की जाएगी। |
dll, com | --csv | निष्पादन के CSV आउटपुट को स्टोर करने का स्थान (फ़ाइल)। |
dll, proxy | --solution | उस निर्देशिका का पथ जहां प्रॉक्सी DLL के लिए समाधान संग्रहीत किए जाएंगे। |
dll, com | --existing | स्विच इंगित करने के लिए कि Spartacus को मौजूदा ProcMon इवेंट लॉग फ़ाइल (PML) को संसाधित करना चाहिए। इवेंट लॉग फ़ाइल को इंगित करने के लिए --pml का उपयोग करें, तब उपयोगी जब आप घंटों तक ProcMon चला रहे हों या बूट लॉगिंग में इसका उपयोग किया हो। |
dll | --all | डिफ़ॉल्ट रूप से Windows या Program Files निर्देशिकाओं में कोई भी DLL छोड़ दिया जाएगा। आउटपुट में उन निर्देशिकाओं को शामिल करने के लिए इसका उपयोग करें। |
proxy | --ghidra | Ghidra की 'analyzeHeadless.bat' फ़ाइल का पथ। तब उपयोग किया जाता है जब आप केवल DllMain के बजाय विशिष्ट कार्यों को प्रॉक्सी करना चाहते हैं। |
proxy | --dll | उस DLL का पथ जिसे आप प्रॉक्सी करना चाहते हैं, और इस तर्क के कई उदाहरण शामिल किए जा सकते हैं। इसके अलावा, इसमें वाइल्डकार्ड भी हो सकते हैं जैसे C:\Windows\System32\*.dll - हालांकि सभी पथों का अंत *.dll होना चाहिए। |
proxy, sign | --overwrite | यदि --solution (proxy) या --pfx (sign) फ़ाइल पहले से मौजूद है, तो इसे अधिलेखित करने के लिए इस फ्लैग का उपयोग करें। |
proxy | --only | केवल इस चर में परिभाषित कार्यों के लिए प्रॉक्सी फ़ंक्शन उत्पन्न करें। मान अल्पविराम से अलग किए गए हैं जैसे 'WTSFreeMemory,WTSFreeMemoryExA,WTSSetUserConfigA'। |
proxy | --action | डिफ़ॉल्ट क्रिया VS समाधान उत्पन्न करना है। --action prototypes, इनपुट के रूप में एक Windows SDK फ़ोल्डर लेता है और फ़ंक्शन प्रोटोटाइप का डेटाबेस उत्पन्न करने के लिए *.h फ़ाइलों को पार्स करता है। --action exports एक DLL के निर्यात कार्यों को प्रदर्शित करता है और जब --prototypes के साथ पूरक किया जाता है तो यह प्रदर्शित करेगा कि क्या फ़ंक्शन परिभाषा पूर्व-निर्मित है। |
sign | --action | जब sign मॉड्यूल के साथ --action का उपयोग किया जाता है, तो यह दो विकल्पों में से एक लेता है, PFX बनाने के लिए generate और फ़ाइल पर हस्ताक्षर करने के लिए sign। |
proxy | --path | वर्तमान में केवल --action prototypes के साथ काम करता है और Windows SDK निर्देशिका का स्थान है। |
proxy | --prototypes | prototypes.csv का स्थान (वर्तमान में ./Assets फ़ोल्डर के अंतर्गत)। |
com | --acl | लापता/गलत कॉन्फ़िगर किए गए COM लाइब्रेरी और निष्पादन योग्य के लिए स्थानीय सिस्टम की गणना करें। |
sign | --subject | --action generate के साथ प्रमाणपत्र विषय निर्दिष्ट करने के लिए उपयोग किया जाता है। |
sign | --issuer | --action generate के साथ प्रमाणपत्र के जारीकर्ता को निर्दिष्ट करने के लिए उपयोग किया जाता है। |
sign | --copy-from | --action generate के साथ जारीकर्ता और विषय की प्रतिलिपि बनाने के लिए एक मौजूदा हस्ताक्षरित फ़ाइल निर्दिष्ट करने के लिए उपयोग किया जाता है। |
sign | --not-before | --action generate के साथ उस तिथि को परिभाषित करने के लिए उपयोग किया जाता है जब से नया प्रमाणपत्र मान्य होगा, प्रारूप YYYY-MM-DD HH:MM:SS है। |
sign | --not-after | --action generate के साथ उस तिथि को परिभाषित करने के लिए उपयोग किया जाता है जब तक नया प्रमाणपत्र मान्य होगा, प्रारूप YYYY-MM-DD HH:MM:SS है। |
sign | --pfx | जब --action generate के साथ उपयोग किया जाता है तो यह वह स्थान है जहां pfx फ़ाइल सहेजी जाएगी। जब --action sign के साथ उपयोग किया जाता है तो यह वह स्थान है जहां से pfx फ़ाइल लोड की जाएगी। |
sign | --password | जब --action generate के साथ उपयोग किया जाता है तो यह --pfx फ़ाइल के लिए पासवर्ड परिभाषित करता है। |
sign | --path | जब --action sign के साथ उपयोग किया जाता है तो यह हस्ताक्षरित किए जाने वाले निष्पादन योग्य/DLL फ़ाइल का स्थान परिभाषित करता है। |
sign | --algorithm | जब --action sign के साथ उपयोग किया जाता है तो यह हैशिंग एल्गोरिदम को परिभाषित करता है जो हस्ताक्षर करने के लिए उपयोग किया जाएगा। विकल्प हैं: MD5, SHA1, SHA256, SHA384, SHA512। |
sign | --timestamp | जब --action sign के साथ उपयोग किया जाता है तो यह टाइमस्टैम्प सर्वर को परिभाषित करता है, जैसे http://timestamp.sectigo.com या http://timestamp.digicert.com। |