
ترسانة PowerShell لعشاق الأمن
[!IMPORTANT]
هذا المستودع مؤرشف الآن. على الرغم من أنها كانت رحلة ممتعة، أعتقد أن PSArmoury قد استنفدت فائدتها.
PowerShell Armoury مصممة لمختبري الاختراق، وفرق "أدخل اللون المناسب هنا"، وأي شخص آخر يستخدم مجموعة متنوعة من أدوات PowerShell أثناء مهامه. تتيح لك تنزيل وتخزين جميع نصوص PowerShell المفضلة لديك في ملف واحد مبهم.
لن تحتاج إلى عناء تحديث 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، وهو الذي تقوم بتنفيذه. كود التهرب والإبهام وفك الإبهام مخزن في ملفات .ps1 منفصلة داخل مجلد modules. هذه الملفات المنفصلة يتم استدعاؤها بواسطة السكريبت الرئيسي ويجب أن تسهل عليك تغيير وظائف محددة (مثل تجاوز AMSI).
بالإضافة إلى مجلد modules، يوجد أيضًا مجلد utilities. ستجد هنا سكريبتات مستقلة يمكن أن تكون مفيدة في سيناريوهات محددة.
المسار الافتراضي لمجلد modules هو .\modules حيث تشير النقطة إلى مجلد العمل الحالي للشيل. يمكنك تغيير مسار مجلد modules باستخدام الوسيطة -ModulesDirectory للأمر New-PSArmoury.
أسماء ملفات السكريبت نفسها مثبتة بشكل ثابت في السكريبت الرئيسي ومن المتوقع دائمًا أن تكون:
دعنا نلقي نظرة فاحصة على هذين الملفين.
يجب أن يحتوي هذا السكريبت على الكود المخصص لتجاوز ما تريد تجاوزه. افتراضيًا، يحتوي على تجاوز AMSI معروف (بفضل amsi.fail). يرجى ملاحظة ما يلي:
يجب أن يحتوي هذا السكريبت على الكود المستخدم للإبهام وفك الإبهام. obfuscation.ps1 الافتراضي يستخدم تشفير RC2. أمثلة جاهزة للاستخدام:
لاحظ أن TEMPLATE_obfuscation_empty.ps1 لا يفعل شيئًا على الإطلاق ويعمل كقالب لبناء وظيفتك الخاصة.
إذا كنت ترغب في استخدام أي منها، فقط أعد تسميته إلى "obfuscation.ps1" واحذف الملف الافتراضي.
إذا كنت ترغب في إنشاء نسخة مخصصة، ضع في اعتبارك ما يلي فيما يتعلق بالإبهام:
وتأكد من تذكر هذه الأمور فيما يتعلق بفك الإبهام:
مجلد utilities يحتوي على سكريبتات مستقلة مفيدة.
يجب أن يكون ملف التكوين json صالحًا يتكون من مصفوفة واحدة تحتوي على كائن واحد أو أكثر، حيث يتم تفسير كل كائن كمصدر سكريبت واحد. كل كائن له السمات التالية
Name (إجباري)
اسم من اختيارك لتحديد السكريبت المضمن في هذا الكائن. هذا مجرد مرجع لنفسك.
URL (إجباري)
الموقع للحصول على محتوى السكريبت. يمكن أن يكون عنوان URL لمورد ويب (https://) أو مسار محلي (C:) أو مورد شبكة (\...). يتم إلقاء URL في Net.Webclient أو Get-Item الخاص بـ PowerShells على التوالي. لذا، بشكل أساسي، أي تنسيق يمكن لأحد هذين التعامل معه افتراضيًا يجب أن يعمل.
Type (إجباري)
يعطي تلميحًا حول موقع السكريبت لمنشئ armoury. هناك ثلاثة أنواع صالحة:
FileInclusionFilter (اختياري)
سيتم تفسيره فقط في كائن من نوع "GitHub". سيتم مطابقته باستخدام عامل المقارنة "like" الخاص بـ PowerShell مع اسم الملف بالكامل، لذا ضع في اعتبارك أنك تحتاج إلى تضمين أحرف البدل بنفسك. لا تنس تضمين علامة نجمية (*) إذا كنت تريد مطابقة جزء من اسم الملف. "*.ps1" يعني جميع الملفات التي تنتهي بـ ".ps1" ولكن ".ps1" يعني فقط ".ps1".
ليس عليك تضمين عامل تصفية، ولكن إذا قمت بذلك، فيجب عليك استخدامه. يعني InclusionFilter فارغ عدم وجود ملفات.
FileExclusionFilter (اختياري)
مثل InclusionFilter ولكن بالطبع بالعكس. الاستبعاد له الأولوية.
راجع تعليمات PowerShell المضمنة (man -full New-PSArmoury) لمزيد من التفاصيل.
-Path
المسار إلى ملف armoury الجديد الخاص بك. الافتراضي هو ".\MyArmoury.ps1"
-FromFile
قم بتحميل نصوص PowerShell الخاصة بك مباشرة من مجلد أو ملف محلي ولا تحتاج إلى توفير ملف تكوين.
-Config
المسار إلى ملف تكوين JSON الخاص بك. ألق نظرة على العينة المرفقة مع هذا السكريبت للحصول على أفكار.
-ModulesDirectory
المسار إلى مجلد modules. الافتراضي هو ".\modules". إذا تم استخدام ModulesDirectory، فلا يمكن استخدام معاملات EvasionPath و ObfuscationPath.
-EvasionPath
المسار إلى سكريبت التهرب. إذا تم استخدام EvasionPath و ObfuscationPath، فلا يمكن استخدام معامل ModulesDirectory.
-ObfuscationPath
المسار إلى سكريبت الإبهام. إذا تم استخدام EvasionPath و ObfuscationPath، فلا يمكن استخدام معامل ModulesDirectory.
-ValidateOnly
استخدم هذا مع "-Config" للسماح للسكريبت بالتحقق من الصيغة الأساسية لملف تكوين JSON الخاص بك دون تنفيذه.
-GithubCredentials
مرر اسم مستخدم GitHub ورمز الوصول ككائن بيانات اعتماد حتى لا يطلب السكريبت ذلك. مفيد إذا كنت تنشئ armoury بشكل متكرر للاختبار.
استخدم مثل هذا:
$c = get-credential
New-PSArmoury -GithubCredentials $c
يجب عليك تقديم اسم مستخدم GitHub صالح بالإضافة إلى رمز وصول شخصي، حتى يتمكن السكريبت من استخدام API الخاص بـ GitHub بشكل صحيح. لا تستخدم اسم المستخدم/كلمة المرور لأن هذا لن يعمل على أي حال إذا كان لديك MFA مفعل (ويجب عليك تفعيل MFA). أيضًا، الوصول إلى API باستخدام اسم المستخدم/كلمة المرور الأساسي مهمل.
اتبع هذا الدليل لإنشاء رمز وصول شخصي.
يرجى ملاحظة: الإذن الوحيد الذي نحتاجه على رمز الوصول هو public_repo في قسم repo.
هذا لأنك تحتاج فقط إلى الرمز حتى لا يقوم GitHub بحظرنا إذا قمت بتحليل مستودعات أكبر (مثل PowerSploit) لملفات .ps1 لتضمينها.
إذا كنت ترغب في إنشاء armoury بالإعدادات الافتراضية (ملاحظة: هذا لن يقوم بإبهام أي شيء إلى جانب ترميز base64)، فقط قم بتشغيل ما يلي.
. .\New-PSArmoury.ps1
New-PSArmoury
سينشئ هذا ملف .ps1 يسمى "MyArmoury.ps1" في مجلد العمل الحالي باستخدام
يمكنك تحميل armoury في جلستك الحالية باستخدام
cat -raw .\MyArmoury.ps1 | iex
تحميل armoury الخاص بك يستدعي الخطوات التالية:
بعد ذلك، ستكون جميع أكواد PowerShell التي وضعتها في armoury متاحة. فقط قم باستدعاء cmdlets كالمعتاد مثل هذا
Invoke-Rubeus -Command "kerberoast /stats"
Get-DomainGroupMember -Identity "Domain Admins" -Recurse
إذا حدث أنك لا تتذكر ما وضعته داخل armoury، فقط قم بتحميله واستدعاء المخزون :-)
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