LINUX.ORG.RU

создать симлинк в /lib без использования sudo

 


0

2

привет!

случайно удалил симлинк /lib/x86_64-linux-gnu/libc.so.6, и теперь не могу его востановить потому что sudo отказывается работать. ошибка: libc.so.6: No such file or directory.

это удаленная машина, AWS. подключен по ssh. не отключаюсь, понимаю что не смогу подключиться.

каким образом я могу востановить симлинк (или просто скопировать libc-2.23.so как libc.so.6) не используя sudo?

спасибо!

★★★

Последнее исправление: niXman (всего исправлений: 2)

В директории где libc

$ LD_PRELOAD=libc-2.23.so sudo ln -s libc-2.23.so libc.so.6

Ну а вдруг сработает

anonymous
()
Ответ на: комментарий от anonymous

Не сработает, с setuidными бинарями это работать не должно. Если у негогет уже открытого рутового шелла, то никак это не решается.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

с setuidными бинарями это работать не должно

так и думал, иначе это реально дырище

anonymous
()

Быть аккуратнее с -f в rm в следующий раз. Есть возможность обратится к кому-то,у кого есть физический доступ?

Dog ★★★
()

А копирование работает? В смысле создать копию файла с таким именем?

Получение рута через su?

Копирование симлинка по ssh?

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 2)

«Как шмальнуть себе в голову и не попасть в ногу» для чайников.

WitcherGeralt ★★
()

Найти сплойт под ядро, если не самое свежее, поднять привилегии до рутовых, сделать симлинк.

Dark_SavanT ★★★★★
()

и не проще тупо удалить эту нерабочую систему и заново развернуть чистую? какой смысл всего этого сакральный?

xmikex ★★★★
()
Ответ на: комментарий от xmikex

как минимум, натереть мозоль на заднице и в такое не попадать.
вар2: возможности насильно реинкарнировать систему нет.

pfg ★★★★★
()
Ответ на: комментарий от t184256

Думаю даже без setuid оно бы не сработало. Так прописана зависимость от libc.so.6, он скорее всего будет пытаться её подгрузить даже если все функции уже есть в прелоаденой библиотеке. Хотя может конечно и не так, но вряд ли.

firkax ★★★★★
()

Проблему (без эксплоитов) не решить, но не удержусь от чтения морали: избавляйся от sudo. Рут-задачи надо делать из рут-консоли (она легко отличается по # вместо $ и у неё свой пароль), остальные - от непривилегированного юзера, который не должен ничего себе мочь повысить. Тогда бы, возможно, и не было случайного удаления. А если бы было - у тебя бы скорее всего остался запущеный рут-шелл, через который бы всё легко восстановилось (хотя конечно не просто командой ln).

firkax ★★★★★
()
Ответ на: комментарий от firkax

Думаю даже без setuid оно бы не сработало

Не-не. Точно работает. Всякие ls и прочие chmod вызываются с LD_PRELOAD с убитым симлинком.

Сижу тут, играюсь. Пытаюсь собрать util-linux со статическим su. Пока не выходит )

Toxo2 ★★★★
()
Ответ на: комментарий от Toxo2

Пытаюсь собрать util-linux со статическим su. Пока не выходит )

В чём собственно проблема? Неужели они в такой примитивной софтине так накрутили что её проблема скомпилировать? Тогда проще свою написать, там делов то: спросить пароль через controlling terminal и сделать setgroups() setgid() setuid() и настроить переменные типа $HOME, всё делается на основе данных, полученный функциями из pwd.h и grp.h (они из libc).

firkax ★★★★★
()
Ответ на: комментарий от firkax

В чём собственно проблема?

Где-то тут: Using 'getpwuid' in statically linked application requires at runtime the shared libraries from glibc version used.

Тогда проще свою написать

Напишите ) Я не умею )

Toxo2 ★★★★
()
Ответ на: комментарий от Toxo2

Статическую линковку c glibc убрали, или не убрали, но хорошо спрятали во всех дистрах. Но это неточно

anonymous
()
Ответ на: комментарий от anonymous

Поэтому только musl

Тоже так подумал. Сижу в виртуальном VoidLinux на musl теперь пытаюсь.

Toxo2 ★★★★
()
Ответ на: комментарий от Toxo2

Сижу тут, играюсь. Пытаюсь собрать util-linux со статическим su. Пока не выходит )

Есть же статический busybox, в котором и su есть в том числе.

Kron4ek ★★★★★
()
Ответ на: комментарий от Toxo2

Мда и правда. Ну это уже авторы glibc постарались. Возможно это связано с поддержкой файла /etc/nsswitch.conf (теоретически можно настроить другую базу юзеров вместо /etc/passwd). Хотя я ни разу не видел чтобы кто-то его менял.

firkax ★★★★★
()
Ответ на: комментарий от anonymous

Ну я линковал статически и не знал что её «убрали». Эти варнинги только на некоторые не сильно популярные функции пишутся. Единственное - бинарник огромный получается, в FreeBSD намного меньше.

Ну вобщем как всегда, в линуксах всё криво и костыльно.

firkax ★★★★★
()
Ответ на: комментарий от Kron4ek

Есть же статический busybox

Вы - гений! )

У меня получилось в ArchLinux. Только для этого надо установить busybox и поставить ему SUID (chmod +s) и тогда LD_PRELOAD=libc-2.33.so busybox su впускает в root с убитым симлиинком /lib/libc.so.6

Осталось только автору темы как-то придумать где его взять готовый )

Toxo2 ★★★★
()
Ответ на: комментарий от Toxo2

Осталось только автору темы как-то придумать где его взять готовый )

Ага, в этом и основная проблема. Busybox не проблема скачать через wget, но suid бит на него не поставишь без root прав :)

Kron4ek ★★★★★
()
Последнее исправление: Kron4ek (всего исправлений: 1)
Ответ на: комментарий от Kron4ek

но suid бит на него не поставишь без root прав :)

Насколько я понимаю - он же уже может быть установлен.

У меня тут под рукой образ диска Angstrom Linux в ext4. Тупо файл. Я его тупо mount. А у него внутри уже готовые /bin/busybox.nosuid /bin/busybox.suid с правильными битами.

Вроде.

Toxo2 ★★★★
()
Ответ на: комментарий от Toxo2

Странно, тут с какой стороны ни посмотри а получается что-то несуразное.

1) Допустим, сработал LD_PRELOAD на busybox. Получается, LD_PRELOAD сработал на suid-бинарник, чего быть не должно.

2) Допустим, он не сработал на сам busybox, но сработал на его подпроцесс su, благодаря какой-то внутренней логике busybox-а. Тогда получается - в busybox дыра, ведь в прелоаде могло быть что угодно (в т.ч. троян), и оно транзитом дошло до проги, выдающей рут-права.

3) Допустим, busybox не рассчитан на suid-запуск, значит п.2 это не дыра а некорректная установка. Но зачем тогда в нём su? Он же не будет без suid работаь никак.

edit: а, понял, busybox же статический, а LD_PRELOAD тут лишний, он не влияет на успех (если таки влияет - то всё же несуразица)

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

Допустим, сработал LD_PRELOAD на busybox

busybox - это статический экзешник, не использует glibc, так что ему все равно на LD_PRELOAD.

anonymous
()
Ответ на: комментарий от Toxo2

Ну, если уже установлен, то проблема решена можно сказать. Это если у ТСа, конечно, вообще есть разблокированный root аккаунт, а то мало ли.

Kron4ek ★★★★★
()
Ответ на: комментарий от firkax

а, понял, busybox же статический, а LD_PRELOAD тут лишний, он не влияет на успех (если таки влияет - то всё же несуразица)

Влияет, сейчас проверил на виртуалке с удаленным libc.so.6. Без LD_PRELOAD получаю ошибку об отсутствии libc.so.6. Так что да, тут LD_PRELOAD почему-то срабатывает на suid бинарник.

А нет, до меня дошло, что это не сам su из состава busybox LD_PRELOAD требует, а шелл (в моем случае bash). Но, тем не менее, на успех это влияет, если не использовать статический шелл.

Kron4ek ★★★★★
()
Последнее исправление: Kron4ek (всего исправлений: 3)

К Aws можно через панель управление подключить раздел или смонтировать тот, что есть на другой машине. А вообще под scp можно все исправить.

anonymous
()

export LD_LIBRARY_PATH=xxx

anonymous
()
Ответ на: комментарий от Kron4ek

А нет, до меня дошло, что это не сам su из состава busybox LD_PRELOAD требует, а шелл (в моем случае bash).

Хм, ну не то что бы это в прямую дыра, ведь su (без прелоадов, т.е. оригинальный) честно спросил пароль перед запуском баша, но как-то не совсем приятно что LD_PRELOAD проскочил внутрь. Хотя может это, в учётом честно спрошенного пароля, и штатное поведение.

Интересно а почему busybox-su запускает bash а не ещё один busybox.

firkax ★★★★★
()
Ответ на: комментарий от anonymous

scp не рутовое будет, если речь про команду для cp over ssh.

firkax ★★★★★
()
Ответ на: комментарий от Kron4ek

Ну, если уже установлен, то проблема решена можно сказать.

На самом деле - ничего не получилось. Он только выглядит внешне, словно suid root:root, даже если его монтировать в fuse. Только не работает.

Собрал busybox 1.35 статически с musl и только с одним апплетом - su, остальное всё повыключал в его menuconfig.

Создал пустой файл через dd, mkfs его, смонтировал и положил на него тот собранный busybox, установил suid root:root.

Тут - пока всё красиво вроде.

Но эту фс-внутри-файла всё-равно приходится монтировать с sudo на целевой машине, чтобы из неё работал busybox su. С fuse2fs, хоть и выглядит внешне правильно, но при запуске пароль не проходит.

Эх... Тогда сдаюсь. ) Прости, ТС )

Toxo2 ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.