
सुरक्षा पेशेवरों के लिए एक PowerShell शस्त्रागार
[!IMPORTANT]
यह रिपॉजिटरी अब संग्रहीत हो गई है। हालाँकि यह एक मजेदार यात्रा थी, मुझे लगता है कि PSArmoury अपनी उपयोगिता खो चुका है।
पावरशेल आर्मरी पेंटेस्टर्स, "यहाँ रंग डालें"-टीमर्स और उन सभी के लिए है जो अपने अभियानों के दौरान विभिन्न पावरशेल टूल्स का उपयोग करते हैं। यह आपको अपनी सभी पसंदीदा पावरशेल स्क्रिप्ट्स को एक ही, अस्पष्टित फ़ाइल में डाउनलोड और स्टोर करने की अनुमति देता है।
आपको Rubeus, PowerView, ... को मैन्युअल रूप से अपडेट करने की चिंता करने की ज़रूरत नहीं है। बस एक बार कॉन्फ़िगरेशन फ़ाइल बनाएँ या टूल के साथ शामिल डिफ़ॉल्ट का उपयोग करें। अब से, आपको अगले अभियान पर जाने से पहले बस "New-PSArmoury" चलाना होगा। इसके अतिरिक्त, PSArmoury आपके कोड को अस्पष्ट करता है और एक शामिल AMSI बाईपास के साथ आता है। मॉड्यूलर डिज़ाइन से आपके लिए चोरी या अस्पष्टता कोड को बदलना आसान हो जाना चाहिए, यदि उस पर कोई डिटेक्शन हो।
PSArmoury का वर्तमान संस्करण मॉड्यूलर डिज़ाइन को पसंद करता है।
New-PSArmoury.ps1
PSArmoury.json
utilities
ConvertTo-Powershell.ps1
Invoke-Shuffle.ps1
modules
evasion.ps1
obfuscation.ps1
कोड को एक मुख्य जनरेटर स्क्रिप्ट में विभाजित किया गया है जिसे New-PSArmoury.ps1 कहा जाता है, जिसे आप निष्पादित करते हैं। चोरी, अस्पष्टता और अस्पष्टता हटाने का कोड modules निर्देशिका में अलग-अलग .ps1 फ़ाइलों में संग्रहीत किया जाता है। इन अलग-अलग फ़ाइलों को मुख्य स्क्रिप्ट द्वारा आमंत्रित किया जाता है और इससे आपके लिए विशिष्ट फ़ंक्शन (जैसे कि AMSI बाईपास) को बदलना आसान होना चाहिए। मॉड्यूल निर्देशिका के अतिरिक्त, utilities निर्देशिका भी है। यहाँ आपको स्टैंडअलोन स्क्रिप्ट मिलेंगी जो विशिष्ट परिदृश्यों में उपयोगी हो सकती हैं।
मॉड्यूल निर्देशिका का डिफ़ॉल्ट पथ .\modules है जहाँ डॉट आपके शेल के वर्तमान कार्यशील निर्देशिका को संदर्भित करता है। आप New-PSArmoury के -ModulesDirectory तर्क का उपयोग करके मॉड्यूल निर्देशिका का पथ बदल सकते हैं। हालाँकि स्क्रिप्ट फ़ाइलों के नाम मुख्य स्क्रिप्ट में हार्ड-कोडेड हैं और हमेशा इस प्रकार होने की उम्मीद की जाती है:
आइए इन दोनों पर करीब से नज़र डालते हैं।
इस स्क्रिप्ट में वह कोड होना चाहिए जो आप जिसे भी बायपास करना चाहते हैं, उसे बायपास करने के लिए है। डिफ़ॉल्ट रूप से, इसमें एक प्रसिद्ध AMSI बाईपास होता है (amsi.fail को धन्यवाद)। कृपया ध्यान दें कि:
इस स्क्रिप्ट में अस्पष्टता और अस्पष्टता हटाने के लिए उपयोग किया जाने वाला कोड होना चाहिए। डिफ़ॉल्ट obfuscation.ps1 RC2 एन्क्रिप्शन का उपयोग करता है। उपयोग के लिए तैयार उदाहरण:
ध्यान दें कि TEMPLATE_obfuscation_empty.ps1 वास्तव में कुछ नहीं करता है और आपके अपने फ़ंक्शन बनाने के लिए एक टेम्पलेट के रूप में कार्य करता है। यदि आप उनमें से किसी एक का उपयोग करना चाहते हैं, तो बस इसे "obfuscation.ps1" नाम दें और डिफ़ॉल्ट फ़ाइल को हटा दें।
यदि आप एक अनुकूलित संस्करण बनाना चाहते हैं, तो अस्पष्टता के संबंध में निम्नलिखित बातों का ध्यान रखें:
और अस्पष्टता हटाने के संदर्भ में इन बातों को याद रखना सुनिश्चित करें:
उपयोगिताएँ निर्देशिका में उपयोगी स्टैंडअलोन स्क्रिप्ट शामिल हैं।
कॉन्फ़िग फ़ाइल को एक मान्य json होना चाहिए जिसमें एक या अधिक ऑब्जेक्ट वाली एक एकल सरणी हो, जहाँ प्रत्येक ऑब्जेक्ट को एक स्क्रिप्ट स्रोत के रूप में व्याख्यायित किया जाता है। प्रत्येक ऑब्जेक्ट में निम्नलिखित गुण होते हैं:
नाम (अनिवार्य)
इस ऑब्जेक्ट में शामिल स्क्रिप्ट की पहचान करने के लिए आपकी पसंद का एक नाम। यह केवल आपके संदर्भ के लिए है।
URL (अनिवार्य)
स्क्रिप्ट सामग्री प्राप्त करने का स्थान। यह एक वेब संसाधन (https://) का URL, स्थानीय पथ (C:) या नेटवर्क संसाधन (\...) हो सकता है। URL को क्रमशः Net.Webclient या PowerShell के Get-Item में डाला जाता है। इसलिए मूल रूप से हर वह प्रारूप जो इन दोनों में से कोई एक डिफ़ॉल्ट रूप से संभाल सकता है, काम करना चाहिए।
प्रकार (अनिवार्य)
यह आर्मरी निर्माता को स्क्रिप्ट स्थान के बारे में संकेत देता है। तीन मान्य प्रकार हैं:
FileInclusionFilter (वैकल्पिक)
केवल "GitHub" प्रकार के ऑब्जेक्ट में व्याख्यायित किया जाएगा। पूर्ण फ़ाइल नाम के विरुद्ध PowerShell के "like" तुलना ऑपरेटर से मिलान किया जाएगा, इसलिए ध्यान रखें कि आपको वाइल्डकार्ड स्वयं शामिल करने होंगे। यदि आप फ़ाइल नाम के किसी भाग से मिलान करना चाहते हैं, तो एक तारा (*) शामिल करना न भूलें। "*.ps1" का अर्थ है वे सभी फ़ाइलें जो ".ps1" से समाप्त होती हैं, लेकिन ".ps1" का अर्थ केवल ".ps1" है।
आपको एक फ़िल्टर शामिल करने की आवश्यकता नहीं है, लेकिन यदि आप करते हैं, तो आपको इसका उपयोग करना होगा। एक खाली InclusionFilter का अर्थ है कोई फ़ाइल नहीं।
FileExclusionFilter (वैकल्पिक)
InclusionFilter की तरह लेकिन स्पष्ट रूप से दूसरी तरफ। बहिष्करण की प्राथमिकता अधिक है।
अधिक विवरण के लिए इनलाइन पावरशेल सहायता (man -full New-PSArmoury) देखें।
-Path
आपकी नई आर्मरी फ़ाइल का पथ। डिफ़ॉल्ट ".\MyArmoury.ps1" है।
-FromFile
अपनी पावरशेल स्क्रिप्ट को सीधे किसी स्थानीय फ़ोल्डर या फ़ाइल से लोड करें और आपको कॉन्फ़िग फ़ाइल प्रदान करने की आवश्यकता नहीं है।
-Config
आपकी JSON-कॉन्फ़िग फ़ाइल का पथ। विचारों के लिए इस स्क्रिप्ट के साथ आने वाले नमूने पर एक नज़र डालें।
-ModulesDirectory
मॉड्यूल निर्देशिका का पथ। डिफ़ॉल्ट ".\modules" है। यदि ModulesDirectory का उपयोग किया जाता है, तो EvasionPath और ObfuscationPath पैरामीटर का उपयोग नहीं किया जा सकता है।
-EvasionPath
चोरी स्क्रिप्ट का पथ। यदि EvasionPath और ObfuscationPath का उपयोग किया जाता है, तो ModulesDirectory-पैरामीटर का उपयोग नहीं किया जा सकता है।
-ObfuscationPath
अस्पष्टता स्क्रिप्ट का पथ। यदि EvasionPath और ObfuscationPath का उपयोग किया जाता है, तो ModulesDirectory-पैरामीटर का उपयोग नहीं किया जा सकता है।
-ValidateOnly
इसे "-Config" के साथ उपयोग करें ताकि स्क्रिप्ट आपकी JSON कॉन्फ़िग फ़ाइल के मूल सिंटैक्स को निष्पादित किए बिना सत्यापित कर सके।
-GithubCredentials
Github उपयोगकर्ता नाम और एक्सेस टोकन को क्रेडेंशियल ऑब्जेक्ट के रूप में पास करें ताकि स्क्रिप्ट इसके लिए संकेत न दे। यदि आप परीक्षण के लिए बार-बार एक आर्मरी बनाते हैं तो उपयोगी है।
इस प्रकार उपयोग करें:
$c = get-credential
New-PSArmoury -GithubCredentials $c
आपको एक मान्य Github उपयोगकर्ता नाम के साथ-साथ एक व्यक्तिगत एक्सेस टोकन प्रदान करना होगा, ताकि स्क्रिप्ट Github API का ठीक से उपयोग कर सके। उपयोगकर्ता नाम/पासवर्ड का उपयोग न करें क्योंकि यदि आपने MFA सक्षम किया है तो यह वैसे भी काम नहीं करेगा (और आपको MFA सक्षम करना चाहिए)। इसके अलावा, मूल उपयोगकर्ता नाम/पासवर्ड के साथ API तक पहुँचना पदावनत है।
व्यक्तिगत एक्सेस टोकन बनाने के लिए इस गाइड का पालन करें।
कृपया ध्यान दें: एक्सेस टोकन पर हमें केवल repo अनुभाग में public_repo अनुमति की आवश्यकता है।
ऐसा इसलिए है क्योंकि आपको केवल टोकन की आवश्यकता है ताकि Github हमें ब्लॉक न करे यदि आप शामिल करने के लिए .ps1 फ़ाइलों के लिए बड़ी रिपॉजिटरी (जैसे PowerSploit) को पार्स करते हैं।
यदि आप डिफ़ॉल्ट सेटिंग्स के साथ एक आर्मरी बनाना चाहते हैं (ध्यान दें: यह base64 एन्कोडिंग के अलावा बिल्कुल भी अस्पष्ट नहीं करेगा), तो बस निम्नलिखित चलाएँ।
. .\New-PSArmoury.ps1
New-PSArmoury
यह वर्तमान कार्यशील निर्देशिका में "MyArmoury.ps1" नामक एक .ps1 फ़ाइल बनाएगा जिसमें उपयोग होगा:
आप निम्न का उपयोग करके आर्मरी को अपने वर्तमान सत्र में लोड कर सकते हैं:
cat -raw .\MyArmoury.ps1 | iex
अपनी आर्मरी लोड करने से निम्नलिखित चरण शुरू होते हैं:
उसके बाद, आपने आर्मरी में जो भी पावरशेल कोड डाला है, वह उपलब्ध हो जाएगा। बस cmdlets को सामान्य रूप से इस प्रकार आमंत्रित करें:
Invoke-Rubeus -Command "kerberoast /stats"
Get-DomainGroupMember -Identity "Domain Admins" -Recurse
यदि आपको याद नहीं है कि आपने आर्मरी के अंदर क्या डाला था, तो बस इसे लोड करें और इन्वेंट्री को कॉल करें :-)
Get-PSArmoury
New-PSArmoury को -EvasionPath और -ObfuscationPath पैरामीटर के साथ इस प्रकार शुरू करें:
New-PSArmoury -Config C:\myarmouryconfig.json -ObfuscationPath .\modules\TEMPLATE_obfuscation_byte_convert.ps1 -EvasionPath .\modules\evasion.ps1
ध्यान दें: इस मामले में, फ़ोल्डर में सभी .ps1 फ़ाइलें जोड़ी जाएँगी क्योंकि हम एक फ़ोल्डर पथ सबमिट करते हैं। यदि हम किसी एकल फ़ाइल का पथ सबमिट करते हैं, तो केवल वही फ़ाइल संसाधित की जाएगी।
New-PSArmoury -FromFile C:\myscriptfolder