TL; DR Нет, вы не на 100% в безопасности. Или другими словами, подумайте дважды. ;)
Не выполняйте фрагменты кода без понимания основ. Используйте, man
чтобы узнать больше о команде или программе. Используйте Google или другой поисковый портал, если вы не понимаете. И если вы все еще сомневаетесь, просто не выполняйте код.
Ты мне доверяешь? Затем запустите:
man man
Хорошо, не опасно, вы видите man-страницу man
Но как насчет кода ниже, вы мне доверяете?
$(perl -MMIME::Base64 -0777ne 'print decode_base64($_)' <<< "ZWNobyAnQk9PSCEnCg==")
Не? Отличная идея. Давайте разберем код:
perl
Переводчик языка Perl
-MMIME::Base64
Кодирование и декодирование строк base64
-0777ne
-0777
- Изменяет разделитель строк на undef, что позволяет нам захламлять файл, передавая все строки в Perl за один раз.
-e
Флаг (execute) - это то, что позволяет нам указать код Perl, который мы хотим запустить, прямо в командной строке.
-n
- Подача ввода в Perl построчно.
'print decode_base64($_)'
- Декодирует строку, строка сохраняется в $_
.
"ZWNobyAnQk9PSCEnCg=="
- И это? Что это?
Давайте начнем тест.
Мы знаем, что-то вроде base64 и выглядит закодированным. Поэтому расшифруйте строку с помощью:
base64 --decode <<< "ZWNobyAnQk9PSCEnCg=="
И результат ... хорошо, не очень опасно:
echo 'BOOH!'
Теперь мы можем сделать то же самое с Perl
perl -MMIME::Base64 -0777ne 'print decode_base64($_)' <<< "ZWNobyAnQk9PSCEnCg=="
И вывод, какой сюрприз:
echo 'BOOH!'
Но было ли это опасно? Это опасно
$(…)
Эта конструкция выполняет вывод команд в круглых скобках.
Давайте попробуем, вы мне доверяете?
$(perl -MMIME::Base64 -0777ne 'print decode_base64($_)' <<< "ZWNobyAnQk9PSCEnCg==")
"КНИГА!
А как насчет
c3VkbyBraWxsYWxsIG5hdXRpbHVzCg==
Попробуйте ... Вы мне доверяете?