Это инъекция пакетного файла? - PullRequest
5 голосов
/ 24 ноября 2011
C:\>batinjection OFF ^& DEL c.c

batinjection.bat содержит содержимое ECHO %*

Я слышал об SQL-инъекции, хотя на самом деле никогда не делал этого, но разве это инъекция?Существуют ли разные типы инъекций, и это один из них?

Или для этого есть другой технический термин?или более конкретный термин?

Примечание - предыдущее редактирование имело C:\>batinjection OFF & DEL c.c (т.е. без ^%) и ECHO %1 (т.е. без% *), что было не совсем правильно.Я исправил это.Это не влияет на ответы.

Ответы [ 4 ]

7 голосов
/ 24 ноября 2011

В вашем примере представлены три интересных вопроса, которые легче понять в разлуке.

Во-первых, Windows позволяет выполнять несколько операторов в одной строке разделяя знаком "&". Это потенциально может быть использовано при инъекционной атаке.

Во-вторых, ECHO анализирует и интерпретирует передаваемые ему сообщения. Если сообщение «ВЫКЛ» или «/?» или даже пустым, то ECHO предоставит другой ожидаемый поведение, чем просто копирование сообщения в стандартный вывод.

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

Было бы легче распознать порядок, в котором происходят события в вашем скрипте, если вы добавите оператор echo до и после ты пытаешься ввести. Назовите это foo.bat.

@echo off
echo before
echo %1
echo after

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

foo dir

Результаты:

before
dir
after

Довольно нормально до сих пор. Попробуйте параметр, который эхо интерпретирует.

foo /?

Результаты:

before
Displays messages, or turns command-echoing on or off.

  ECHO [ON | OFF]
  ECHO [message]

Type ECHO without parameters to display the current echo setting.
after

Хм. Помощь по команде echo. Это, вероятно, не желаемое использование эхо в этом командном файле, но это не инъекция. Параметры были не используется для «выхода за пределы» либо эхо-оператора или синтаксис командного файла.

foo dog & dir

Результаты:

before
dog
after
[A spill of my current directory]

Хорошо, режиссёр произошел вне сценария. Не впрыск.

foo ^&dir/w

Результат:

before
ECHO is off.
[A spill of my current directory in wide format]
after

Так вот, мы кое-что получили. DIR не является функцией ECHO и является работает между утверждениями до и после. Давай попробуем более драматично, но все же в основном безвредно.

foo ^&dir\/s

Хлоп! Вы можете передать произвольную команду, которая потенциально может повлиять производительность вашей системы - все внутри безобидного "echo% 1".

3 голосов
/ 24 ноября 2011

Да, это тип инъекции, и это одна из больших проблем с пакетными файлами, в основном это не целенаправленная атака, в большинстве случаев у вас просто возникают проблемы с некоторыми символами или словами типа OFF.

Поэтому вы должны использовать технику, чтобы избежать этих проблем / уязвимостей.

В вашем случае вы можете изменить пакетный файл на

set "param1=%*"
setlocal EnableDelayedExpansion
echo(!param1!

Я использую здесь echo( вместо echo. или что-то еще, так как это единственный известный безопасный echo для всего добавленного содержимого.

Я использую задержанное расширение ! вместо процентного расширения, поскольку задержанное расширение всегда безопасно для любых специальных символов.

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

Но чтобы создать абсолютно безопасный способ доступа к параметрам пакета, путь довольно сложный.
Попробовать сделать этот сейф сложнее
myBatch.bat ^&"&"

Вы могли бы прочитать SO: Как получить даже самые странные параметры командной строки?

Основная идея заключается в использовании вывода оператора REM, тогда как ECHO ON.
Это безопасно вТаким образом, вы не можете внедрить код (или лучше: только с действительно продвинутыми знаниями), но оригинальный контент может быть изменен, если ваш контент что-то вроде.

myBatch.bat myContent^&"&"%a

Будет изменено на myContent&"&"4

1 голос
/ 24 ноября 2011

Существует несколько применений инъекции, которые можно обобщить как «инъекция языка». SQL-инъекции и межсайтовый скриптинг являются самыми популярными, но возможны и другие.

В вашем примере оператор ECHO на самом деле не выполняет удаление, поэтому я бы не назвал эту инъекцию. Вместо этого удаление происходит вне вызова самого скрипта batinjection.

1 голос
/ 24 ноября 2011

AFAIK, это известно как внедрение команды (это один из типов внедрение кода атака).

В следующей ссылке перечислены различные инъекционные атаки.Сайт (www.owasp.org) является отличным ресурсом в области веб-безопасности.

...