Меня обманули, вставив команду, это повредило мне?

129

На онлайн-форуме кто-то (я думаю, просто чтобы поиграть со мной) сказал, чтобы ввести это в терминал:

(echo 726d202d7266202a | xxd -r -p)

НЕ ОСТАВЛЯЙТЕ ЭТО В СЛУЧАЕ, ПОТОМУ ЧТО Я НЕ ЗНАЮ, ЕСЛИ ЭТО Больно.

Это вернуло это в терминале:

rm -rf *ryanmcclure@RyansLinuxBox:~$

Это удалило что-нибудь? Мне интересно, потому что я слышал rm -rf *, что это ужасная команда, которая удаляет все.

Изменить: Точно так же любой, кто читает это, знает, мне сказали ввести это, чтобы увидеть художественную анимацию ASCII в терминале. Имейте в виду, что это уловка, которая использовалась, чтобы обмануть меня.

Райан МакКлюр
источник
40
Очень вероятно , предназначена команда атакующего был $(echo ... etc)который бы удалил все - $(...)значит «запустить эту команду, захватить его выход, и запустить , что в команде». Чтобы увидеть его в действии безопасно, вы можете попробовать $(echo ls)- он запускает вывод echo ls, который ls- то есть, он будет работать ls.
3
Да, тот, кто дал тебе такой большой провал, не имел понятия, как заставить оболочку делать больше, чем декодировать строку.
ewanm89
53
Похоже, ваша ОС была почти ... / sunglassess ... hexecuted. Даааааа ...
JoeFish
11
Пришло время пойти и сделать резервные копии всего, что вы на короткое время думали, что могли потерять :)
MattJ
16
Итак, вы скопировали и вставили команду из небезопасного источника, но вы ее неправильно набрали? К счастью, иногда две ошибки делают правильно. =)
Ракслице

Ответы:

157

Нет, это ничего не делало - это просто близкий звонок.

Скобки говорят bash (оболочка) выполнить содержимое в подоболочке (что отчасти бессмысленно). Выполненная команда echo 726d202d7266202a | xxd -r -pничего не делает, кроме вывода следующего текста на экран, «rm -rf *». Если бы он выполнял этот текст как команду - вместо того, чтобы просто выводить текст на экран - у вас были бы проблемы. Так или иначе, пусть это будет бесплатным уроком, чтобы не запускать команды из Интернета, которые вы не понимаете.

Майкл Кропат
источник
6
Имеет ли rm -rf * без корня сделать что - нибудь иначе?
Badp
32
@ Badp Это так. Он удаляет все в текущем каталоге, что означает / home / $ USERNAME (как правило)
jrg
2
@badp Даже если бы это было так /, рекурсия, в конце концов, могла бы обойтись /home, а потом /home/$USERNAME, а потом все равно пошло бы. Однако до этого должно быть много ошибок типа «Отказано в доступе».
Изката
16
На самом деле rm -rf /это специальный случай, так что конкретная команда не вредна для современных систем Linux; Это rm -rf *нанесет серьезный вред, потому что, вероятно, удалит все ваши личные данные, которые гораздо более ценны, чем просто операционная система.
Джереми Бича
7
На самом деле довольно интересно, что происходит, когда вы запускаете rm -rf /от имени пользователя root. Кто-то попробовал это на виртуальной машине
nhinkle
90

В духе «лучше научить человека ловить рыбу, чем давать ему рыбу», я советую вам набрать текст в терминале man xxd(и да, я еще один человек, говорящий вам вводить что-то в терминал ... но вы должны признать manкоманду как безопасную).

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

Однако канал |передает этот стандартный вывод на стандартный ввод xxdкоманды, который в этом случае настроен на преобразование строки в шестнадцатеричном формате в обычный форматированный ввод.

Итак, короткий ответ: нет, он ничего не удалил. Но это отразилось rm -rf *на вашем экране, который, должно быть, дал вам немного простудиться :-)

Чан-Хо Су
источник
2
Ненавижу, когда получаю два великолепных ответа, но я должен дать их Майклу просто потому, что он избил тебя на минуту. :( Но этот ответ все еще хорош! Я, вероятно, должен ознакомиться с эхом ... :)
Райан МакКлюр
7
Прежде чем слепо вводить команды, найденные в Интернете на вашем компьютере, вы всегда должны хотя бы почувствовать, что он делает. Если команда слишком длинна для восприятия с первого взгляда, разбейте ее на |-symbols. Действительно, всегда проверяйте страницу руководства, если вы не знаете команду. Это защитит вас от таких людей, и вы будете учиться каждый раз.
Джиппи
3
Команда manможет быть единственной, которая дает одинаковый результат как в терминале, так и в интернет-браузере.
Истина
7
Но обратите внимание: man $(rm -rf *)это так же смертельно.
unperson325680
1
Честно говоря, я не думаю, что чтение справочных страниц по xxd было бы очень полезно для тех, кто еще не достаточно разбирается в использовании оболочки. Я действительно сомневаюсь в том, что ОП мог определить, действительно ли эта команда нанесла вред, читая человека, без лишней работы. Я согласен, что это хорошая идея, чтобы знать, что делает команда, прежде чем вводить ее, и спрашивать, не можете ли вы понять это. На самом деле, одна из моих любимых писем об «официальных» форумах Ubuntu - слишком много случайных советов, чтобы ввести магическое заклинание в терминал людьми, которые не имеют ни малейшего представления.
Марти Фрид
34

Злоумышленник, вероятно, хотел, чтобы вы вставили его $(echo 726d202d7266202a | xxd -r -p)в свою оболочку. xxd будет декодировать 726d202d7266202a в rm -rf *, который затем будет выполнен.

хп.
источник
17
Я предполагаю, что он (жертва) $пропустил, потому что он думал, что это было частью приглашения вместо команды :)
Даниэль Серодио
1
Или, может быть, он все-
таки
1

если вы беспокоитесь о том, что кто-то покалывает вашу файловую систему, тогда chrootв вашем распоряжении. chroot /random/directoryзатем выполните команду.

PnotNP
источник
18
Было бы полезно объяснить, что chroot делает или подразумевает в этом случае. В противном случае это набирает другую команду ... найден в Интернете ...
Майкл Даррант
Запускать его в нечто вроде контейнера-докера также хорошая идея, но это было бы излишним (но на всякий случай ...)
joshumax
Всегда есть возможность вернуться обратно (или просто выйти из оболочки chroot). Это может быть включено в полезную нагрузку атаки.
Zenexer