Почему chroot (2) недоступен для непривилегированных пользователей?

Товарищи по U&L: Прежде чем отклонять мой ответ об использовании C-стиля с функцией main () , перейдите по этой ссылке: https: // unix.stackexchange.com/a/313561/85039 Использование основных функций в скриптах - обычная практика, используемая многими профессионалами в данной области.


Как указал Жиль, подоболочки не могут делать переменные доступными вне своей среды. Но давайте подойдем к этой проблеме с другой стороны - если вы напишете свой скрипт в функциях, можно объявить переменную как local , и это можно будет редактировать.

Из руководства bash 4.3, local описание:

... Когда local используется в функции, это приводит к тому, что имя переменной имеет видимую область видимости, ограниченную этой функцией и ее дочерними элементами. ...

Пример:

#!/bin/bash

outter()
{
    for i in $(seq 1 3)
    do
        var=$i
    done
}

main()
{
    local var=0
    outter
    echo $var
}
main "$@"
$ ./testscript.sh                                                                                                        
3

Как вы можете видеть после 3 итераций функции цикла, переменная изменяется.

7
18.03.2016, 01:16
2 ответа

Согласно Брэду Спенглеру на https://forums.grsecurity.net/viewtopic.php?f=7&t=2522, существует тривиальный способ эскалации до uid 0 с помощью CAP_SYS_CHROOT (возможность использования chroot(2):

CAP_SYS_CHROOT: generic: От Julien Tinnes/Chris Evans: если у вас есть доступ на запись в ту же файловую систему, что и suid root бинарник, создайте chroot окружение с backdoored libc, а затем выполните жестко связанный suid root бинарник внутри chroot и получите полные привилегии root через бэкдор

4
27.01.2020, 20:17

chroot(2)не меняет рабочий каталог, поэтому после вызова .может находиться вне дерева с корнем в /. Затем вы можете запустить любой двоичный файл setuid из chroot, используя относительный путь. Вероятно, есть много способов использовать это. Например, изменив /etc/ld.so.preloadвнутри вашего каталога chroot, вы можете выполнять произвольный код с привилегиями root. Вы можете посмотреть пример .

2
27.01.2020, 20:17

Теги

Похожие вопросы