
PowerShell مُعاد بناؤه بلغة C# لأغراض Red Teaming
NoPowerShell هي أداة مطبَّقة بلغة C# تدعم تنفيذ أوامر شبيهة بأوامر PowerShell مع بقائها غير مرئية لأي آليات تسجيل خاصة بـ PowerShell. يمكن تحميل هذه الثنائية المتوافقة مع .NET Framework 2 داخل Cobalt Strike لتنفيذ الأوامر في الذاكرة. لا يتم استخدام System.Management.Automation.dll؛ بل تُستخدم مكتبات .NET الأصلية فقط. حالة استخدام بديلة لـ NoPowerShell هي تشغيلها كملف DLL عبر rundll32.exe في بيئة مقيّدة: rundll32 NoPowerShell.dll,main.
هذا المشروع يجعل من السهل على الجميع توسيع وظائفه باستخدام بضعة أسطر فقط من كود C#. لمزيد من المعلومات، راجع CONTRIBUTING.md.
أحدث الثنائيات متاحة من صفحة Releases. لا يتم تحديث فرع MASTER بانتظام؛ أحدث الأكواد والأوامر متاحة في فرع DEV. لبدء تطوير مهاراتك في NoPowerShell، تأكد أيضاً من الاطلاع على Cheatsheet الخاص بالأوامر.



تم تطوير NoPowerShell لاستخدامها مع أمر execute-assembly في Cobalt Strike أو في بيئة مقيّدة باستخدام rundll32.exe.
أسباب استخدام NoPowerShell:
ping بدلاً من Test-NetConnection)powerpick أو powershell، فهي متاحة في nps (مثل أوامر وحدة ActiveDirectory)راجع CHEATSHEET.md.
استخدم أمر execute-assembly في Cobalt Strike لتشغيل NoPowerShell.exe. على سبيل المثال: execute-assembly /path/to/NoPowerShell.exe Get-Command.
يمكن استخدام NoPowerShell.cna اختيارياً لإضافة الاسم المستعار nps إلى Cobalt Strike.
bofnet_initbofnet_load /path/to/NoPowerShell.dllbofnet_execute NoPowerShell.Program Get-Commandتسمح هذه النسخة المعدّلة بتشغيل ملفات .NET القابلة للتنفيذ العادية
bofnet_initbofnet_load /path/to/NoPowerShell.exebofnet_executeassembly NoPowerShell Get-CommandNoPowerShell.dll (اسحب باستخدام الزر الأيمن -> Create shortcuts here)rundll32 قبل اسم الملف وإلحاق ,mainrundll32 C:\Path\to\NoPowerShell.dll,mainعند استخدام NoPowerShell من cmd.exe أو PowerShell، تحتاج إلى تخطي رمز الأنبوب (|) باستخدام علامة الإقحام (^) أو العلامة الخلفية (`) على التوالي، على سبيل المثال:
ls ^| select Namels `| select Name[System.Security.Principal.WindowsIdentity]::GetCurrent().Nameيُضاف مؤلفو أوامر NoPowerShell الإضافية إلى الجدول أدناه. علاوة على ذلك، يدرج الجدول الأوامر التي يطلب المجتمع إضافتها. معاً يمكننا تطوير مجموعة أدوات NoPowerShell قوية!
| الأمر | المساهِم | GitHub | الوصف | |
|---|---|---|---|---|
تأكد أيضاً من الاطلاع على Cheatsheet للحصول على أمثلة حول كيفية استخدام هذه الأوامر.
تحتوي أوامر NoPowerShell المتعددة وملف NoPowerShell DLL على كود أنشأه مطوّرون آخرون.
من تأليف Arris Huijgen (@bitsadmin - https://github.com/bitsadmin/)
| الأمر | الوصف |
|---|
| Invoke-Command | تنفيذ أمر على جهاز بعيد باستخدام PSRemoting (والذي سيتم تسجيله بالطبع في هذه الحالة) |
| * | المزيد من أوامر *-Item* |
| Search-ADAccount | |
| Get-ADPrincipalGroupMembership | |
| Get-ADOrganizationalUnits | |
| * | المزيد من الأوامر من وحدة ActiveDirectory في PowerShell |
| * | أدوات Sysinternals مثل pipelist و sdelete |
| الأمر | الوحدة | ملاحظات |
|---|
| Get-ADUser | ActiveDirectory | |
| Get-ADObject | ActiveDirectory | |
| Get-ADReplicationSubnet | ActiveDirectory | |
| Get-ADGroup | ActiveDirectory | |
| Get-ADGroupMember | ActiveDirectory | |
| Get-ADComputer | ActiveDirectory | |
| Get-ADDomainController | ActiveDirectory | |
| Get-ADTrust | ActiveDirectory | |
| Copy-Acl | Additional | |
| Get-RemoteSmbShare | Additional | |
| Resolve-AdiDnsName | Additional | |
| Get-Whoami | Additional | |
| Get-WinStation | Additional | |
| Compress-Archive | Archive | يتطلب .NET 4.5 أو أحدث |
| Expand-Archive | Archive | يتطلب .NET 4.5 أو أحدث |
| Get-Help | Core | |
| Get-Command | Core | |
| Where-Object | Core | |
| Resolve-DnsName | DnsClient | |
| Get-LocalGroupMember | LocalAccounts | |
| Get-LocalGroup | LocalAccounts | |
| Set-Clipboard | Management | |
| Get-PSDrive | Management | |
| Get-HotFix | Management | |
| Stop-Process | Management | |
| Get-ChildItem | Management | |
| Copy-Item | Management | |
| Invoke-WmiMethod | Management | |
| Remove-Item | Management | |
| Get-ItemPropertyValue | Management | |
| Get-ItemProperty | Management | |
| Get-ComputerInfo | Management | |
| Get-DnsClientCache | Management | |
| Get-Process | Management | |
| Get-WmiObject | Management | |
| Get-Clipboard | Management | |
| Get-Content | Management | |
| Test-NetConnection | NetTCPIP | |
| Get-NetTCPConnection | NetTCPIP | |
| Get-NetNeighbor | NetTCPIP | لا يدعم IPv6 بعد |
| Get-NetRoute | NetTCPIP | |
| Get-NetIPAddress | NetTCPIP | |
| Get-Service | NoPowerShell.Commands | |
| Get-LocalUser | NoPowerShell.Commands | |
| Get-WinEvent | NoPowerShell.Commands | |
| New-Shortcut | NoPowerShell.Commands | |
| Get-Acl | Security | |
| Get-SmbMapping | SmbShare | |
| Get-SmbShare | SmbShare | |
| Invoke-Sqlcmd | SQLPS | |
| Get-FileHash | Utility | |
| ConvertFrom-SddlString | Utility | |
| Sort-Object | Utility | |
| Measure-Object | Utility | |
| Invoke-WebRequest | Utility | |
| Select-Object | Utility | |
| Out-File | Utility | |
| Format-Table | Utility | |
| Format-List | Utility | |
| Export-Csv | Utility | |
| ConvertTo-Csv | Utility | |
| Write-Output | Utility |
| المساهِم | الموقع | ملاحظات |
|---|
| مساهمو pinvoke.net | https://www.pinvoke.net/ | تستخدم أوامر متعددة مقتطفات من pinvoke |
| Michael Conrad | https://github.com/MichaCo/ | أجزاء من أمر Resolve-Dns مبنية على كود مشروع DnsClient.Net |
| Rex Logan | https://stackoverflow.com/a/1148861 | معظم كود أمر Get-NetNeighbor مصدره منشوره في StackOverflow |
| مطورو PowerShell | https://github.com/PowerShell/ | كود NoPowerShell DLL مبني إلى حد كبير على الكود الذي يعالج إدخال وحدة التحكم في PowerShell |
| Benjamin Delpy | https://github.com/gentilkiwi/ | كود Get-WinStation مستوحى من كود أمر ts::sessions في Mimikatz |
| Dan Ports | https://github.com/danports/ | كود تنظيم البيانات الخاص بـ Get-Winstation منسوخ جزئياً من مشروع Cassia |
| Mazdak | https://www.codeproject.com/Articles/2937/Getting-local-groups-and-member-names-in-C | استدعاءات الدوال الأصلية لأمر Get-LocalGroupMember |
| Rex Logan | https://stackoverflow.com/a/1148861 | كود أمر Get-NetNeighbor |