
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, обязательно посмотрите также Шпаргалку по командлетам.



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 (перетащите файл правой кнопкой мыши -> Создать ярлыки здесь)rundll32 и суффикс ,mainrundll32 C:\Path\to\NoPowerShell.dll,mainПри использовании NoPowerShell из cmd.exe или PowerShell необходимо экранировать символ вертикальной черты (|) с помощью крышки (^) или обратной кавычки (`) соответственно, например:
ls ^| select Namels `| select Name[System.Security.Principal.WindowsIdentity]::GetCurrent().Name| Командлет | Описание |
|---|---|
| Invoke-Command | Использование PSRemoting для выполнения команды на удалённой машине (которая в этом случае, конечно, будет залогирована) |
| * | Дополнительные команды *-Item* |
| Search-ADAccount | |
| Get-ADPrincipalGroupMembership | |
| Get-ADOrganizationalUnits | |
| * | Больше команд из модуля ActiveDirectory PowerShell |
| * | Утилиты Sysinternals, такие как pipelist и sdelete |
Авторы дополнительных командлетов NoPowerShell добавлены в таблицу ниже. Кроме того, в таблице перечислены команды, которые сообщество просит добавить. Вместе мы можем разработать мощный набор инструментов NoPowerShell!
| Командлет | Автор | GitHub | Описание | |
|---|---|---|---|---|
| Командлет | Модуль | Примечания |
|---|---|---|
| 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 |
Также обязательно посмотрите Шпаргалку с примерами использования этих командлетов.