2015-04-23 1 views
4

Я понимаю, что /bin/sh - это оболочка, которая выполняет команды, которые я набрал. Но дело в том, что, хотя я не нахожу /bin/sh, я могу ввести любую команду, которую я хочу.В чем разница между простое задание команды в Linux и вводом той же команды после выполнения '/ bin/sh'?

Я слышал, что когда крекеры хотят нападать на кого-то, он обычно хочет получить /bin/sh. В частности, я слышал, что /bin/sh упоминается в сочетании с переполнениями буфера и удаленных оболочек, и что взломщики могут использовать программы с использованием вредоносного кода, выполняемого с помощью/bin/sh, например exec ("bin/sh", ~something, something);.

Мне любопытно, почему он или она пытается «получить» /bin/sh или выполнить его.

Я также не уверен, что разница между просто набрав команду и ввести ту же команду, после выполнения /bin/sh, как показано в этом терминале взаимодействия:

[email protected] $ pwd 
/home/johndoe 
[email protected] $ /bin/sh 
sh-3.2 $ pwd 
/home/johndoe 
sh-3.2 $ whoami 
johndoe 
sh-3.2 $ 

Хотя я не казнят /bin/sh, я могу еще введите любую команду, которую я хочу ввести. Так почему и когда крекеры хотят использовать /bin/sh?

+2

Обратите внимание, что '/ bin/sh pwd' - это нечто совсем другое. –

ответ

-1

Когда вы вводите/bin/sh, все, что вы делаете, меняет вашу оболочку на/bin/sh. Если вы выполняете код, это не имеет значения.

+1

Разница заключается в том, какая оболочка в данный момент запущена. Они поддерживают несколько разные вещи, поэтому то, что вы можете с ними сделать, несколько отличается. '/ bin/sh', например, не поддерживает подстановку процессов, поэтому' cat <<(echo foo) 'будет ошибкой вместо вывода' foo', как это было бы с bash. –

+0

Конечно, но в его примере запуск таких вещей, как 'whoami' и' pwd', не будет иметь никакого значения в исполнении. Это также не будет иметь никакого отношения к скомпилированному коду. Есть определенные преимущества **, а не ** использование '/ bin/sh'. Даже если вы используете '/ bin/sh', если ваши сценарии оболочки указывают язык на использование' #!/Bin/bash', например, он все равно будет использовать bash. –

+0

Зависит от того, как вы его запускаете, но да. И да, мой вопрос был не в том, что вы ошибались, а в том, чтобы добавить нюанс в ответ, поскольку он в какой-то мере отличается. –

2

При входе в систему вам предоставляется оболочка. Это может быть /bin/bash, или /bin/sh, или (к сожалению) /bin/csh, поэтому вы можете вводить команды в эту оболочку. Если вы вызываете /bin/sh, вы не получаете многого: вы просто получаете новую оболочку. Причина, по которой взломщик хочет выполнить /bin/sh, заключается в том, что они могут не быть в оболочке изначально. Они могут запускать некоторую программу, которая должна ограничить их способность вызывать команды, поэтому получение /bin/sh - это огромный выигрыш. Честно говоря, взломщику все равно, получают ли они /bin/sh или /bin/bash или даже /bin/csh: дело в том, чтобы получить оболочку корневого уровня, чтобы они могли выполнять произвольные команды. Если они могут сделать программу setuid порождать оболочку, они получают root в поле. (То есть, если они выполняют команду типа eject, которая работает от имени пользователя root, когда они обманывают ее, то она получает привилегии root.)

2

Во-первых, о различии между выполнением команды на вашей оболочке , и выполнив его после вызова /bin/sh (по существу, нет существенной разницы, но я уточню):

Когда вы открываете терминал на своем локальном компьютере, вы видите окно и подсказку. Окно представляет собой терминальную программу, а внутри нее есть уже оболочка работает. Из взаимодействия оболочки, которое вы вставили в свой вопрос, похоже, что ваша оболочка по умолчанию - /bin/bash.

Упрощение, когда вы вводите команду в оболочку, она выполняет ее с использованием комбинации fork и exec. Итак, когда вы вводите /bin/sh, ваша оболочка просто выполняет ее так же. то есть одна оболочка выполняет другую оболочку. Внутри этой оболочки вы выполняете больше команд. Ничего особенного. Это еще один экземпляр оболочки, делающий то же самое, что делал предыдущий экземпляр.

Оболочка не особенно особенна для вас, когда вы уже вошли в компьютер и сидели на ней, печатаясь. В конце концов, это еще одна программа.Но это программа, которая может удобно выполнять другие программы. Вот почему вы его используете. Но это свойство делает его интересным для взломщиков, потому что они хотят удобно выполнять программы на других компьютерах. Но мы придем к этому немного. Просто запомните это: Оболочка - это программа, которая может удобно выполнять другие программы.

Теперь на почему крекеры заинтересованы в получении оболочек:

Оболочка не единственная программа, которая может позвонить exec (начать выполнение другой программы). Любая программа может это сделать. Разумеется, оболочка - самый удобный способ сделать это. К сожалению, для потенциального взломщика компьютеры не предлагают оболочку, если у них нет физического доступа к ней. Единственный интерфейс, который они имеют для компьютера, - это публичные службы, которыми управляет этот компьютер. например веб-сервер, обслуживающий страницы, действительно принимает входные данные от внешних компьютеров и производит вывод для них. В этом процессе веб-сервер считывает файлы на сервере, делает кучу других вещей и затем отправляет несколько байтов по проводу. Это не exec ничего (или даже если это так, злоумышленник не может напрямую контролировать то, что он exec s). то есть вы не знаете, что веб-сервер Google делает внутренне, когда вы видите их веб-страницу. Вы просто отправляете запрос и видите результат в своем браузере. Но если взломщик каким-то образом обманывает веб-сервер до exec программы оболочки (скажем /bin/sh или любого из ее родственников) и передает ввод в нее, то злоумышленник может запустить любую программу, которую они впоследствии захотят на этом сервере. И если этот публично открытый сервис работает как root: еще лучше. Это то, что нападающий заинтересован в этом. Потому что это способ двигаться к удобному управлению системой.

 Смежные вопросы

  • Нет связанных вопросов^_^