Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
polyshell — Bash/Batch/PowerShell полиглот! | Kitploit
Инструменты/GitHubGitHub/llamasoft/polyshell
Генерация полезной нагрузкиСкриптинг и автоматизацияТестирование на ПроникновениеRed TeamingРазработка Полезной Нагрузки
GitHubllamasoft/polyshell

polyshell

Bash/Batch/PowerShell полиглот!

Репозиторий
225203 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

PolyShell: полиглот для Bash/Batch/PowerShell

Что это такое

PolyShell — это скрипт, который одновременно корректен в Bash, Windows Batch и PowerShell (т.е. полиглот).

Это делает PolyShell полезным шаблоном для тестирования на проникновение, так как его можно выполнять на большинстве систем без необходимости в специфичных для цели полезных нагрузках. PolyShell также специально спроектирован для доставки через инъекцию ввода с помощью USB Rubby Ducky, MalDuino или аналогичного устройства.

Batch demo Powershell demo Unix shell demo

Как использовать

Как отдельный скрипт

  1. Скопируйте/переименуйте скрипт, чтобы он имел правильное расширение файла (.sh, .bat или .ps1).
  2. Запустите скрипт в оболочке Unix, как пакетный файл или с помощью PowerShell.

С помощью инъекции ввода

  1. Откройте терминал на целевой машине.
  2. Запустите полезную нагрузку.
  3. Нажмите Ctrl-C, затем выполните exit.

Метод инъекции ввода будет вести себя немного иначе, чем метод скрипта. При запуске как скрипт полезная нагрузка завершается сразу после обработки одного языка. При доставке через инъекцию полезная нагрузка вместо этого запускает цикл чтения. Без него полезная нагрузка закрыла бы окно терминала, но продолжила бы печатать в неизвестное окно. Ctrl-C прерывает скрипт из цикла чтения, позволяя ему выполняться без непреднамеренных побочных эффектов.

Кроме того, вставка скрипта в терминал может не сработать. Как только скрипт достигает цикла чтения, некоторые терминалы будут обрабатывать оставшийся вставленный текст как ввод цикла чтения (хорошо), но другие могут продолжить выполнение скрипта после выхода из цикла чтения (плохо).

Как это работает

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

root@kitploit:~
echo \" <<'BATCH_SCRIPT' >/dev/null ">NUL "\" \`" <#"

Каждый язык видит команду echo, но интерпретирует остальную часть строки по-разному. Например, вот что каждый язык будет интерпретировать как строку:

root@kitploit:~
      echo \" <<'BATCH_SCRIPT' >/dev/null ">NUL "\" \`" <#"
Bash                                      [-----]     [---]
Batch       [-----------------------------]     [-]   [---]
PS          [-----------------------------]     [-]

После выполнения строки скрипт bash окажется в heredoc, скрипт PowerShell — в многострочном комментарии, а пакетный скрипт продолжит нормальное выполнение. После завершения выполнения каждого языка мы его завершаем. Это избавляет нас от необходимости обходить его особенности позже в скрипте.

Особенности

Очевидно, что трюки, необходимые для создания этого полиглота, не следуют нормальным соглашениям о кодировании. Есть несколько особенностей, которые были использованы или которые пришлось обойти:

  • Все три языка имеют разные escape-символы:
    • Bash: обратная косая черта (\)
    • Batch: карет (^)
    • PowerShell: обратный апостроф (`)
  • Escape-символы работают внутри строк Bash и PowerShell, но не в строковых литералах Batch.
  • Перенаправления (т.е. < и >) имеют специальное значение во всех трех языках, если не заключены в кавычки.
  • Перенаправления не обязательно должны быть в конце команды.
    • Это корректно в Bash/Batch/PowerShell: echo >output.txt \"Hello World\"
  • Batch — единственный язык без многострочных строк или комментариев.
  • Batch обрабатывает > как перенаправление, даже если он непосредственно касается строки, а PowerShell — нет.
  • Операторы GOTO в Batch работают только при запуске как скрипт, а не в интерактивном режиме.
  • Многострочный комментарий PowerShell (<#) должен быть непосредственно предшествовать пробелу.
  • Here-документы Bash могут начинаться где угодно, если они не в кавычках и не являются комментарием.
Скачать инструмент