Запустите бинарный файл, принадлежащий root без sudo

12

У меня был вопрос на собеседовании:

Как выполнить (запустить) программу с пользователем user1без sudoправ и без доступа к rootучетной записи:

$ whoami
user1
$ ls -l ~/binary_program
-rw-r--r-- 1 root root 126160 Jan 17 18:57 /home/user1/binary_program
inivanoff1
источник

Ответы:

17

Поскольку у вас есть разрешение на чтение:

$ cp ~/binary_program my_binary
$ chmod +x my_binary
$ ./my_binary

Конечно, это автоматически не предоставит вам повышенные привилегии. Вы по-прежнему выполняете этот двоичный файл как обычный пользователь.

Джозеф Р.
источник
4
@ user2555595 Боюсь, ты не прав. Попробуйте удалить бит выполнения из файла, которым вы владеете, и выполнить его. Даже root получает разрешение «отказано» при выполнении файла без установленного бита выполнения.
Джозеф Р.
Вы правы, спасибо за информацию
user2555595
5
@ user2555595 Это относится только к сценариям , а не к двоичным файлам . Более конкретно, только bashсценарии оболочки POSIX, если bashон вызывается как интерпретатор.
Томас Найман,
Спасибо за вашу информацию, люди! Хорошего дня!
inivanoff1
2
@ inivanoff1 Пожалуйста, не забудьте пометить один из ответов «Принят», чтобы люди знали, что этот вопрос решен.
Джозеф Р.
20

Вы можете использовать динамический компоновщик / загрузчик Linux напрямую для запуска исполняемых файлов ELF, для которых вы прочитали, но не имеете прав на выполнение:

$ /lib/ld-linux.so.* /home/user1/binary_program

Когда исполняемый файл ELF выполняется обычным образом, используется динамический компоновщик, который хранится в .interpразделе программного кода. Причины прямого вызова динамического компоновщика (вне собеседований) включают в себя передачу ему параметров командной строки для изменения его поведения.

Обратите внимание, что фактическое расположение динамического компоновщика может сильно зависеть от среды, например, в 64-битной Ubuntu компоновщик находится /lib64/ld-linux-x86-64.so.2.

Томас Найман
источник