Иногда, когда я cat
бинарный файл по ошибке, мой терминал искажается. Ничто быстрое reset
не может исправить, но теоретически злоумышленник не может создать файл, который при отображении на терминале будет выполнять произвольный код? Через эксплойт в эмуляторе терминала или другим способом.
terminal
cat
special-characters
Gunchars
источник
источник
more
) или в терминале (less
) для проверки содержимого файлов. Мало того, что он не переведет ваш терминал в странное состояние, весь файл не будет пролетать за один выстрел.stty sane
сбрасывает xterm (или аналогичный), который был переключен, например, в другой набор символов.mosh
В документации есть некоторые соображения по этому поводуОтветы:
Возможность использования такого выхода зависит от программы терминала и от того, что делает этот терминал, в зависимости от отправляемых кодов выхода. Я не знаю о терминальных программах, имеющих такие эксплуатируемые функции, и единственная проблема сейчас будет в том случае, если существует неизвестное переполнение буфера или что-то подобное, что может быть использовано.
В некоторых старых
hardware
терминалах это может быть проблемой, так как вы программируете, например, функциональные клавиши с такими escape-последовательностями, сохраняя последовательность команд для этого ключа в аппаратном обеспечении. Вам все еще нужно физическое нажатие клавиши, чтобы активировать это.Но всегда есть (как справедливо отметил Хауке «мозговая смерть») человек, желающий добавить такую функцию, если она решает для них проблему, не понимая лазейки, которую они создают. По моему опыту с программным обеспечением с открытым исходным кодом, из-за того, что многие смотрят на код, это случается реже, чем с закрытым исходным кодом. (Я помню, что в почтовой программе Irix от Silicon Grahpics, в середине девяностых, вы могли включать команды, выполняемые на машине-получателе, реальные пути к исполняемым файлам, ....)
источник
write
команды, - таким образом, выполняя команды / сценарии как пользователь, владеющий терминалом. Предположительно, это причина, по которой многие рекомендуют отключать сообщенияmesg -n
для пользователей большую часть времени иroot
всегда . AFAIK, это действительно было сделано - хотя я не знаю, эксплуатировалось ли оно когда-либо. Так случайный текст изcat
исполняемого Ted, может , возможно , будет выполнен.Большинство эмуляторов терминала отправляют обратно некоторый ответ, если они получают определенные escape-последовательности (см. Документацию по управляющим последовательностям xterm ). Например, вы можете отправить
\e[0c
в эмулятор, похожий на VT100, и он отправит обратно атрибуты устройства, что-то вроде этого\e[?1;2c
(вероятно, это то, что заметил Кит). Но эти ответы не являются произвольными строками. Тем не менее, иметь исполняемый файл с именем2c
где-то в вашей системе, который делает что-то фатальное, - плохая идея.Обновление: риски на самом деле больше, чем я думал, из-за возможности установить заголовок окна xterm и отослать заголовок обратно, используя соответствующие escape-последовательности ( http://www.securityfocus.com/bid/6940/ ) , В отличие от приведенного выше примера, заголовок может быть почти произвольной строкой.
источник
Это изменяет заголовок терминала в GNOME Terminal 3.6.1, если он не переопределен чем-то вроде PS1 :
Теперь откройте новое окно терминала GNOME, чтобы проверить
cat
версию:Да, это также устанавливает заголовок терминала.
Раньше была проблема безопасности с escape-кодом, в результате чего заголовок печатался в командной строке , поэтому вы могли эффективно создать файл, который при
cat
печати ed выводил бы (я не уверен, что вы могли бы вставить туда новую строку) произвольные команды. Ой!источник
Хотя использование
cat
может не привести к выполнению кода, escape-коды будут обработаны, так что вы легко можете быть введены в заблуждение, полагая, что скрипт безвреден, хотя на самом деле он вредоносный.Вот пример команды, которую вы можете запустить, которая создаст «вредоносный» скрипт оболочки:
Когда вы просматриваете файл, он кажется достаточно безопасным:
Но если вы на самом деле запустить его ...
Сценарий работает, включая необработанные коды перехода, чтобы переместить курсор на пару строк вверх, поэтому остальная часть сценария написана поверх вредоносного кода, скрывая его.
Практически любая другая программа раскроет скрипт для того, что он есть. Только программы, которые не обрабатывают содержимое файла (например
cat
,more
иless -r
), будут давать вводящий в заблуждение вывод.Обратите внимание, что
tail
иhead
выдает тот же вводящий в заблуждение вывод. Поэтому использование «less + F» безопаснее, чем «tail -f».источник
echo $(cat demo.sh)
,cat demo.sh | grep . --color=yes
(Примечание:--color=yes
это то , что показывая «вредоносный» код здесь) или встроенныеcat -v demo.sh
.cat
отображение содержимого файла .cat
произвольного файла, как задан вопрос!Я определенно испытывал
xterm
вставку произвольных символов в себя, как будто я их набрал. И иногда это, по-видимому, включало символ новой строки, так что я получилngwerm:0riu: command not found
в качестве ответа. Я не вижу причин, по которым кто-то не мог создать файл, который отправлял бы конкретные вредные команды. Так что да, по крайней мере, некоторые терминалы подвержены атакам с произвольным воздействием.источник
Ну, эмулятор терминала в основном просто печатает отправленные ему символы.
Все, кроме простой печати символа в текущей позиции, например, установка новой позиции, изменение цвета, изменение названия и т. Д., Выполняется с помощью escape-последовательностей.
Набор поддерживаемых escape-последовательностей обычно состоит из четко определенных стандартов, таких как ANSI , который не определяет способ запуска других процессов. Хотя было бы возможно реализовать такую последовательность, я не знаю ни одного эмулятора терминала, преднамеренно разрешающего такие вещи.
Теоретически ошибка, такая как переполнение буфера, может использоваться для запуска произвольной функциональности. Но это было бы возможно почти во всех других двоичных файлах.
источник
Как правило, нет никакого риска поймать произвольный файл. Мой обычный метод анализа файла заключается в следующем:
Вышеприведенное позволяет мне определять тип файла с помощью
file
команды, аstrings
команда позволяет мне выгружать любые идентифицируемые строки из потенциальных двоичных файлов, которые я не уверен в их происхождении.пример
вывод файла вывод строкисточник