
PowerSploit - A PowerShell Post-Exploitation Framework
تم عمل Fork لإضافة بعض الميزات إلى PowerView.ps1 والتي أقوم بتنفيذها يدويًا بشكل متكرر
تنفيذ الأكواد على جهاز مستهدف.
Invoke-DllInjectionيحقن ملف DLL في معرف العملية (Process ID) الذي تختاره.
Invoke-ReflectivePEInjectionيحمّل ملف Windows PE (DLL/EXE) بشكل انعكاسي (Reflective) في عملية PowerShell، أو يحقن DLL بشكل انعكاسي في عملية بعيدة.
Invoke-Shellcodeيحقن شيل كود (Shellcode) في معرف العملية الذي تختاره أو داخل PowerShell محليًا.
Invoke-WmiCommandينفّذ كتلة ScriptBlock خاصة بـ PowerShell على جهاز مستهدف ويعيد مخرجاتها المنسقة باستخدام WMI كقناة C2.
تعديل و/أو تجهيز السكربتات للتنفيذ على جهاز تم اختراقه.
Out-EncodedCommandيضغط، ويشفّر Base-64، وينشئ مخرجات سطر أوامر لسكربت حمولة (Payload) خاص بـ PowerShell.
Out-CompressedDllيضغط، ويشفّر Base-64، ويخرج كودًا مولّدًا لتحميل مكتبة dll مُدارة في الذاكرة.
Out-EncryptedScriptيشفّر ملفات/سكربتات النصوص.
Remove-Commentيزيل التعليقات والمسافات البيضاء الزائدة من السكربت.
إضافة قدرات الثبات (Persistence) إلى سكربت PowerShell
New-UserPersistenceOptionتكوين خيارات الثبات على مستوى المستخدم لوظيفة Add-Persistence.
New-ElevatedPersistenceOptionتكوين خيارات الثبات بصلاحيات مرتفعة لوظيفة Add-Persistence.
Add-Persistenceإضافة قدرات الثبات إلى سكربت.
Install-SSPيُثبّت مكتبة dll لموفر دعم الأمان (SSP).
Get-SecurityPackagesيعدّد جميع حزم الأمان المحمّلة (SSPs).
برامج مكافحة الفيروسات (AV) لا تملك فرصة أمام PowerShell!
Find-AVSignatureيحدد مواقع توقيعات AV أحادية البايت باستخدام نفس الأسلوب الذي تستخدمه DSplit من "class101".
كل بياناتك ملك لي!
Invoke-TokenManipulationيعرض رموز تسجيل الدخول (Logon Tokens) المتاحة. ينشئ عمليات باستخدام رموز تسجيل دخول مستخدمين آخرين، وينتحل شخصية رموز تسجيل الدخول في الخيط الحالي.
Invoke-CredentialInjectionإنشاء عمليات تسجيل دخول ببيانات اعتماد نصية واضحة دون إطلاق حدث مشبوه برقم المعرف 4648 (Explicit Credential Logon).
Invoke-NinjaCopyينسخ ملفًا من وحدة تخزين مقسّمة بنظام NTFS عبر قراءة الوحدة الخام وتحليل بنيات NTFS.
Invoke-Mimikatzيحمّل Mimikatz 2.0 بشكل انعكاسي في الذاكرة باستخدام PowerShell. يمكن استخدامه لتفريغ بيانات الاعتماد دون كتابة أي شيء على القرص. يمكن استخدامه لأي وظيفة يوفرها Mimikatz.
Get-Keystrokesيسجّل المفاتيح المضغوطة والوقت والنافذة النشطة.
Get-GPPPasswordيسترجع كلمة المرور النصية الواضحة والمعلومات الأخرى للحسابات التي تم دفعها عبر تفضيلات نهج المجموعة (Group Policy Preferences).
Get-GPPAutologonيسترجع اسم المستخدم وكلمة مرور تسجيل الدخول التلقائي (Autologon) من registry.xml إذا تم دفعها عبر تفضيلات نهج المجموعة.
Get-TimedScreenshotوظيفة تلتقط لقطات شاشة على فترات منتظمة وتحفظها في مجلد.
New-VolumeShadowCopyينشئ نسخة ظل جديدة لوحدة التخزين (Volume Shadow Copy).
Get-VolumeShadowCopyيعرض مسارات الأجهزة لجميع نسخ الظل المحلية لوحدات التخزين.
Mount-VolumeShadowCopyيركّب نسخة ظل لوحدة تخزين.
Remove-VolumeShadowCopyيحذف نسخة ظل لوحدة تخزين.
Get-VaultCredentialيعرض كائنات بيانات اعتماد خزينة Windows (Windows Vault) بما في ذلك بيانات اعتماد الويب النصية الواضحة.
Out-Minidumpيولّد تفريغًا مصغرًا (Minidump) للذاكرة الكاملة لعملية ما.
Get-MicrophoneAudioيسجّل الصوت من ميكروفون النظام ويحفظه على القرص
إحداث فوضى عامة باستخدام PowerShell.
Set-MasterBootRecordكود إثبات مفهوم (Proof of Concept) يكتب فوق سجل الإقلاع الرئيسي (Master Boot Record) بالرسالة التي تختارها.
Set-CriticalProcessيتسبب في ظهور شاشة زرقاء (Blue Screen) على جهازك عند الخروج من PowerShell.
أدوات للمساعدة في رفع الصلاحيات على جهاز مستهدف.
PowerUpمركز تجميع لفحوصات رفع الصلاحيات الشائعة، إلى جانب بعض نواقل التسليح (Weaponization Vectors).
أدوات للمساعدة في مرحلة الاستطلاع (Reconnaissance) من اختبار الاختراق.
Invoke-Portscanيجري فحص منافذ بسيطًا باستخدام مقابس (Sockets) عادية، استنادًا بشكل فضفاض إلى حد ما إلى nmap.
Get-HttpStatusيعيد رموز حالة HTTP وعنوان URL الكامل للمسارات المحددة عند تزويده بملف قاموس.
Invoke-ReverseDnsLookupيفحص نطاقًا من عناوين IP بحثًا عن سجلات DNS PTR.
PowerViewPowerView عبارة عن سلسلة من الوظائف التي تقوم بتعداد (Enumeration) واستغلال (Exploitation) الشبكة ونطاقات Windows.
مجموعة من القواميس المستخدمة للمساعدة في مرحلة الاستطلاع من اختبار الاختراق. تم أخذ القواميس من المصادر التالية.
مشروع PowerSploit وجميع السكربتات الفردية تخضع لـ رخصة BSD 3-Clause ما لم يُنص على خلاف ذلك صراحةً.
ارجع إلى المساعدة المبنية على التعليقات (Comment-Based Help) في كل سكربت على حدة للحصول على معلومات استخدام مفصلة.
لتثبيت هذه الوحدة، ضع مجلد 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' في النهاية.
قدّم دائمًا مساعدة وصفية مبنية على التعليقات (Comment-Based Help) لكل سكربت. أيضًا، تأكد من تضمين اسمك ورخصة BSD 3-Clause (ما لم تكن هناك ظروف قاهرة تمنع تطبيق رخصة BSD).
تأكد من أن جميع الوظائف تتبع التوافق الصحيح بين الفعل والاسم في PowerShell. استخدم Get-Verb لسرد الأفعال الافتراضية التي يستخدمها PowerShell. سيتم النظر في الاستثناءات للأفعال المدعومة على أساس كل حالة على حدة.
أفضّل أن تكون أسماء المتغيرات مكتوبة بأحرف كبيرة وأن تكون وصفية قدر الإمكان.
وفّر مسافات منطقية بين الكود. ضع مسافة بادئة (Indent) للكود لجعله أكثر قابلية للقراءة.
إذا وجدت نفسك تكرر الكود، فاكتب وظيفة (Function).
التقط جميع الأخطاء المتوقعة ووفّر مخرجات ذات معنى. إذا كان لديك خطأ يجب أن يوقف تنفيذ السكربت، فاستخدم 'Throw'. إذا كان لديك خطأ لا يحتاج إلى إيقاف التنفيذ، فاستخدم Write-Error.
إذا كنت تكتب سكربتًا يتفاعل مع Win32 API، فحاول تجنب ترجمة C# مباشرةً باستخدام Add-Type. حاول استخدام وحدة PSReflect إن أمكن.
لا تستخدم مسارات مكتوبة بشكل ثابت (Hardcoded Paths). يجب أن يكون السكربت قابلًا للاستخدام مباشرة دون أي تعديل. لا ينبغي لأي شخص تعديل الكود إلا إذا أراد ذلك.
التوافق مع PowerShell v2 مرغوب فيه بشدة.
استخدم المعاملات الموضعية (Positional Parameters) واجعل المعاملات إلزامية عندما يكون ذلك منطقيًا. على سبيل المثال، أبحث عن شيء مثل ما يلي:
[Parameter(Position = 0, Mandatory = $True)]لا تستخدم أي أسماء مستعارة (Aliases) إلا إذا كان من المنطقي استخدامها لاستقبال مدخلات خط الأنابيب (Pipeline). فهي تجعل الكود أكثر صعوبة في القراءة للأشخاص غير الملمّين باسم مستعار معين.
حاول ألا تدع الأوامر تستمر لفترة طويلة. على سبيل المثال، خط الأنابيب هو مكان طبيعي لفاصل أسطر.
لا تبالغ في التعليقات المضمنة (Inline Comments). استخدمها فقط عندما تكون جوانب معينة من الكود قد تكون مربكة للقارئ.
بدلاً من استخدام Out-Null لكبت المخرجات غير المرغوب فيها/غير ذات الصلة، احفظ المخرجات غير المرغوب فيها في $null. القيام بذلك يوفر تحسينًا طفيفًا في الأداء.
استخدم قيمًا افتراضية لمعاملاتك عندما يكون ذلك منطقيًا. من الناحية المثالية، تريد سكربتًا يعمل دون الحاجة إلى أي معاملات.
إذا كان السكربت ينشئ كائنات مخصصة معقدة، فقم بتضمين ملف ps1xml ينسّق مخرجات الكائن بشكل صحيح.