Uruchom plik binarny będący własnością root bez sudo

12

Podczas rozmowy kwalifikacyjnej miałem pytanie:

Jak możesz uruchomić (uruchomić) program z użytkownikiem user1bez sudouprawnień i bez dostępu do rootkonta:

$ whoami
user1
$ ls -l ~/binary_program
-rw-r--r-- 1 root root 126160 Jan 17 18:57 /home/user1/binary_program
inivanoff1
źródło

Odpowiedzi:

17

Ponieważ masz uprawnienia do odczytu:

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

Oczywiście nie da to automatycznie magicznych eskalowanych uprawnień. Nadal będziesz wykonywał ten plik binarny jako zwykły użytkownik.

Joseph R.
źródło
4
@ user2555595 Obawiam się, że się mylisz. Spróbuj usunąć bit wykonania z pliku, który posiadasz, i wykonaj go. Nawet root otrzymuje „odmowę uprawnień” podczas wykonywania pliku bez ustawionego bitu wykonywania.
Joseph R.
masz rację, dziękuję za informację
user2555595
5
@ user2555595 Dotyczy to tylko skryptów , a nie plików binarnych. W szczególności tylko bashskrypty powłoki POSIX, jeśli bashsą wywoływane jako interpreter.
Thomas Nyman
Dziękujemy za informację, ludzie! Miłego dnia!
inivanoff1
2
@ inivanoff1 Nie zapomnij zaznaczyć jednej z odpowiedzi „Zaakceptowano”, aby ludzie wiedzieli, że to pytanie zostało rozwiązane.
Joseph R.
20

Możesz użyć dynamicznego linkera / modułu ładującego systemu Linux bezpośrednio do uruchomienia plików wykonywalnych ELF, o których przeczytałeś, ale nie możesz wykonać uprawnień:

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

Gdy plik wykonywalny ELF jest wykonywany normalnie, wykorzystywany jest dynamiczny linker, który jest przechowywany w .interpsekcji kodu programu. Powody bezpośredniego wywoływania dynamicznego linkera (poza rozmowami kwalifikacyjnymi) obejmują przekazanie mu opcji wiersza poleceń w celu zmodyfikowania jego zachowania.

Zauważ, że faktyczna lokalizacja dynamicznego linkera może bardzo zależeć od środowiska, na przykład w 64-bitowym Ubuntu, w którym linker jest /lib64/ld-linux-x86-64.so.2.

Thomas Nyman
źródło