TL; DR Ні, ви не на 100% безпечні. Або з іншими словами, подумайте двічі. ;)
Не виконуйте фрагменти коду, не розуміючи основ. Використовуйте, man
щоб дізнатися більше про команду чи програму. Використовуйте Google або інший пошуковий портал, якщо ви не розумієте. І якщо ви все ще сумніваєтесь, просто не виконайте код.
Ви довіряєте мені? Потім запустіть:
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==
Спробуйте ... Ви мені довіряєте?