
PowerSploit - إطار عمل باورشيل لما بعد الاستغلال
تنفيذ كود على جهاز هدف.
Invoke-DllInjectionيحقن ملف DLL في معرف العملية الذي تختاره.
Invoke-ReflectivePEinjectionيقوم بتحميل ملف PE لنظام ويندوز (DLL/EXE) بشكل عاكس في عملية PowerShell، أو يحقن DLL بشكل عاكس في عملية بعيدة.
Invoke-Shellcodeيحقن شيلكود في معرف العملية الذي تختاره أو داخل PowerShell محليًا.
Invoke-WmiCommandينفذ كتلة سكريبت PowerShell على جهاز هدف ويعيد مخرجاته المنسقة باستخدام WMI كقناة C2.
تعديل و/أو تحضير السيناريوهات للتنفيذ على جهاز مخترق.
Out-EncodedCommandيضغط ويشفر بصيغة Base64 وينشئ مخرجات سطر أوامر لحمولة سكريبت PowerShell.
Out-CompressedDllيضغط ويشفر بصيغة Base64 وينشئ كودًا لتحميل DLL مُدار في الذاكرة.
Out-EncryptedScriptيشفر ملفات النصوص/السيناريوهات.
Remove-Commentيزيل التعليقات والمسافات البيضاء الزائدة من السكريبت.
إضافة قدرات الثبات إلى سكريبت PowerShell
New-UserPersistenceOptionتكوين خيارات الثبات على مستوى المستخدم لوظيفة Add-Persistence.
New-ElevatedPersistenceOptionتكوين خيارات الثبات المرتفعة لوظيفة Add-Persistence.
Add-Persistenceإضافة قدرات الثبات إلى سكريبت.
Install-SSPتثبيت ملف DLL لموفر دعم الأمان (SSP).
Get-SecurityPackagesتعداد جميع حزم الأمان المحملة (SSPs).
مضاد الفيروسات ليس له فرصة أمام PowerShell!
Find-AVSignatureتحديد تواقيع AV ذات البايت الواحد باستخدام نفس طريقة DSplit من "class101".
كل بياناتك أصبحت ملكي!
Invoke-TokenManipulationسرد رموز تسجيل الدخول المتاحة. ينشئ عمليات باستخدام رموز تسجيل دخول مستخدمين آخرين، ويتقمص رموز تسجيل الدخول في السلسلة الحالية.
Invoke-CredentialInjectionإنشاء جلسات تسجيل دخول ببيانات اعتماد نصية دون إثارة حدث 4648 المشبوه (تسجيل دخول ببيانات اعتماد صريحة).
Invoke-NinjaCopyنسخ ملف من وحدة تخزين مقسمة بنظام NTFS عن طريق قراءة الوحدة الخام وتحليل بنى NTFS.
Invoke-Mimikatzتحميل Mimikatz 2.0 بشكل عاكس في الذاكرة باستخدام PowerShell. يمكن استخدامه لتفريغ بيانات الاعتماد دون كتابة أي شيء على القرص. يمكن استخدامه لأي وظيفة يوفرها Mimikatz.
Get-Keystrokesتسجيل المفاتيح المضغوطة والوقت والنافذة النشطة.
Get-GPPPasswordاسترداد كلمة المرور النصية ومعلومات أخرى للحسابات التي تم دفعها عبر تفضيلات نهج المجموعة.
Get-GPPAutologonاسترداد اسم المستخدم وكلمة المرور للتسجيل التلقائي من registry.xml إذا تم دفعه عبر تفضيلات نهج المجموعة.
Get-TimedScreenshotوظيفة تلتقط لقطات شاشة على فترات منتظمة وتحفظها في مجلد.
New-VolumeShadowCopyإنشاء نسخة ظل جديدة لوحدة تخزين.
Get-VolumeShadowCopyسرد مسارات الأجهزة لجميع نسخ الظل المحلية.
Mount-VolumeShadowCopyتثبيت نسخة ظل لوحدة تخزين.
Remove-VolumeShadowCopyحذف نسخة ظل لوحدة تخزين.
Get-VaultCredentialعرض كائنات بيانات اعتماد خزينة ويندوز بما في ذلك بيانات اعتماد الويب النصية.
Out-Minidumpإنشاء تفريغ ذاكرة كامل لعملية.
Get-MicrophoneAudioتسجيل الصوت من ميكروفون النظام وحفظه على القرص.
إحداث فوضى عامة باستخدام PowerShell.
Set-MasterBootRecordكود إثبات مفهوم يكتب فوق سجل الإقلاع الرئيسي برسالة من اختيارك.
Set-CriticalProcessيتسبب في ظهور شاشة زرقاء لجهازك عند الخروج من PowerShell.
أدوات للمساعدة في رفع الامتيازات على هدف.
PowerUpمركز تجميع لفحوصات رفع الامتيازات الشائعة، إلى جانب بعض نواقل التسلح.
أدوات للمساعدة في مرحلة الاستطلاع لاختبار الاختراق.
Invoke-Portscanيقوم بمسح بسيط للمنافذ باستخدام مآخذ عادية، بناءً (إلى حد كبير) على nmap.
Get-HttpStatusإرجاع رموز حالة HTTP وعنوان URL الكامل للمسارات المحددة عند توفير ملف قاموس.
Invoke-ReverseDnsLookupمسح نطاق عناوين IP لسجلات PTR لنظام أسماء النطاقات.
PowerViewPowerView هي سلسلة من الوظائف التي تقوم بتعداد الشبكات ونطاقات ويندوز واستغلالها.
مجموعة من القواميس المستخدمة للمساعدة في مرحلة الاستطلاع لاختبار الاختراق. تم أخذ القواميس من المصادر التالية.
مشروع PowerSploit وجميع السكريبتات الفردية تخضع لترخيص BSD 3-Clause ما لم يُنص صراحةً على خلاف ذلك.
ارجع إلى التعليمات المبنية على التعليقات في كل سكريبت فردي للحصول على معلومات مفصلة حول الاستخدام.
لتثبيت هذه الوحدة، قم بوضع مجلد PowerSploit بالكامل في أحد أدلة الوحدات الخاصة بك. مسارات وحدات PowerShell الافتراضية مدرجة في متغير البيئة $Env:PSModulePath.
مسار الوحدة الافتراضي لكل مستخدم هو: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" مسار الوحدة الافتراضي على مستوى الكمبيوتر هو: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
لاستخدام الوحدة، اكتب Import-Module PowerSploit
لعرض الأوامر المستوردة، اكتب Get-Command -Module PowerSploit
إذا كنت تستخدم PowerShell v3 وتريد إزالة التحذير المزعج 'هل تريد حقًا تشغيل السكريبتات التي تم تنزيلها من الإنترنت'، بمجرد وضع PowerSploit في مسار الوحدة الخاص بك، قم بتشغيل السطر التالي:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerSploit) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
للحصول على مساعدة لكل أمر فردي، استخدم Get-Help.
ملاحظة: تم تصميم جميع الأدوات الموجودة في هذه الوحدة بحيث يمكن تشغيلها بشكل فردي. إدراجها في وحدة ما يزيد من قابلية النقل.
نحتاج إلى مساهمات! إذا كانت لديك فكرة رائعة لـ PowerSploit، فسنكون سعداء بإضافتها. ستتطلب الإضافات الجديدة ما يلي:
لجميع المساهمين والمساهمين المستقبليين في PowerSploit، أطلب منك اتباع دليل الأسلوب هذا عند كتابة السكريبتات/الوحدات.
تجنب Write-Host بأي ثمن. دوال/cmdlets PowerShell ليست أدوات سطر أوامر! لن يتم النظر في طلبات السحب التي تحتوي على كود يستخدم Write-Host. بدلاً من ذلك، يجب عليك إخراج كائنات مخصصة. لمزيد من المعلومات حول إنشاء كائنات مخصصة، اقرأ هذه المقالات:
إذا كنت ترغب في عرض معلومات تصحيح ذات صلة على الشاشة، استخدم Write-Verbose. يمكن للمستخدم دائمًا إضافة '-Verbose'.
قدم دائمًا تعليمات وصفية مبنية على التعليقات لكل سكريبت. أيضًا، تأكد من تضمين اسمك وترخيص BSD 3-Clause (ما لم تكن هناك ظروف استثنائية تمنع تطبيق ترخيص BSD).
تأكد من أن جميع الدوال تتبع اتفاقية اسم الفعل-الاسم الصحيحة لـ PowerShell. استخدم Get-Verb لسرد الأفعال الافتراضية المستخدمة من قبل PowerShell. سيتم النظر في الاستثناءات للأفعال المدعومة على أساس كل حالة على حدة.
أفضل أن تكون أسماء المتغيرات مكتوبة بالأحرف الكبيرة وأن تكون وصفية قدر الإمكان.
قدم مسافات منطقية بين الكود الخاص بك. قم بمسافة بادئة للكود لجعله أكثر قابلية للقراءة.
إذا وجدت نفسك تكرر الكود، اكتب دالة.
التقط جميع الأخطاء المتوقعة وقدم مخرجات ذات معنى. إذا كان لديك خطأ يجب أن يوقف تنفيذ السكريبت، استخدم 'Throw'. إذا كان لديك خطأ لا يحتاج إلى إيقاف التنفيذ، استخدم Write-Error.
إذا كنت تكتب سكريبتًا يتفاعل مع واجهة برمجة تطبيقات Win32، حاول تجنب تجميع C# بشكل مضمن مع Add-Type. حاول استخدام وحدة PSReflect إذا أمكن.
لا تستخدم مسارات ثابتة (hardcoded). يجب أن يكون السكريبت قابلاً للاستخدام فورًا دون تعديل. لا ينبغي لأحد أن يضطر إلى تعديل الكود إلا إذا أراد ذلك.
التوافق مع PowerShell v2 مطلوب بشدة.
استخدم معاملات موضعية واجعل المعاملات إلزامية عندما يكون ذلك منطقيًا. على سبيل المثال، أبحث عن شيء مثل:
[Parameter(Position = 0, Mandatory = $True)]لا تستخدم أي أسماء مستعارة إلا إذا كان ذلك منطقيًا لاستقبال مدخلات خط الأنابيب. إنها تجعل الكود أكثر صعوبة في القراءة للأشخاص غير المألوفين باسم مستعار معين.
حاول ألا تجعل الأوامر تعمل لفترة طويلة جدًا. على سبيل المثال، خط الأنابيب هو مكان طبيعي لفاصل سطر.
لا تفرط في استخدام التعليقات المضمنة. استخدمها فقط عندما تكون جوانب معينة من الكود قد تكون محيرة للقارئ.
بدلاً من استخدام Out-Null لكبت المخرجات غير المرغوب فيها/غير ذات الصلة، احفظ المخرجات غير المرغوب فيها إلى $null. القيام بذلك يوفر تحسينًا طفيفًا في الأداء.
استخدم قيمًا افتراضية لمعاملاتك عندما يكون ذلك منطقيًا. من الناحية المثالية، تريد سكريبتًا يعمل دون الحاجة إلى أي معاملات.
إذا كان السكريبت ينشئ كائنات مخصصة معقدة، قم بتضمين ملف ps1xml يقوم بتنسيق مخرجات الكائن بشكل صحيح.