Лично я, использую debian на десктопе и иногда хочется пощупать то чего нет в репозитории, но ссыкотно. Как быть? Изолируем файловую систему с помощью chroot, а что бы прога не вылезла в сеть будем использовать ip netns. Докер или виртуальная машина - ламерский вариант ибо нет познания могущества ОСь. На VPS с 512 ОЗУ виртуалбокс не по поднимаешь. Короче, хакеры вникают, остальные мимо. Иногда есть желание покопаться в репозитариях kali, поэтому в качестве изолированной системы будем использовать её. А первым подопытным будет wso, потому что: "Куда без него, легендарного?". Поехали! Code: sudo bash mkdir /kali apt install debootstrap Начинаем установку и cпустя 10 секунд нажимаем Ctrl-C Code: debootstrap kali-rolling /kali http://http.kali.org/kali Видим надпись. Code: Cannot check Release signature; keyring file not available /usr/share/keyrings/kali-archive-keyring.gpg Вбиваем в утку site:kali.org kali-archive-keyring Переходим сюда https://http.kali.org/pool/main/k/kali-archive-keyring/ И видим ключики. Качаем. Code: wget -O /tmp/kali-archive-keyring_2024.1_all.deb https://http.kali.org/pool/main/k/kali-archive-keyring/kali-archive-keyring_2024.1_all.deb Ставим. Code: dpkg -i /tmp/kali-archive-keyring_2024.1_all.deb Запускаем ещё раз и cпустя 10 секунд нажимаем Ctrl-C Code: debootstrap kali-rolling /kali http://http.kali.org/kali Находим. Code: I: Valid Release signature (key id 44C6513A8E4FB3D30875F758ED444FF07D8D0BF6) Теперь можно найти зеркало, что бы быстрее качало https://http.kali.org/README?mirrorlist Теперь едем до конца. Code: debootstrap kali-rolling /kali https://mirrors.dotsrc.org/kali/ После того как Кали встала, следует подключить виртуальные файловые системы, что бы работа chroot была без глюков. Подключаем. Code: mount -B /dev /kali/dev mount -t devpts none /kali/dev/pts mount -t proc none /kali/proc mount -t sysfs none /kali/sys chroot /kali Дома! Code: apt update apt upgrade apt install screen vim git php-cli net-tools Создадим домашнюю директорию самому не привелигированному пользователю. Code: mkdir /nonexistent chown nobody:nogroup /nonexistent chmod 700 /nonexistent Становимся никем. Code: su -P -s /bin/sh -l nobody -c bash Теперь можно качать всякую дрянь с github Code: git clone https://github.com/MegaBedder/wsoshell.git Но воздержимся от запуска, вдруг в сеть полезет и как начнёт данные передавать, запилим сетевой изолятор. Выйдем в родительскую систему и создадим новое сетевое пространство. Code: ip netns add isolator Войдём в это сетевое пространство. Code: ip netns exec isolator chroot /kali screen Поглядим на сетевухи. Code: ifconfig -a Настроим loopback. Code: ifconfig lo up 127.0.0.1/24 Становимся никем. Code: su -P -s /bin/sh -l nobody -c bash Запускаем wso. Code: php -S 127.0.0.1:8080 -t /nonexistent/wsoshell/ Теперь надо как-то увидеть это. Для этого запустим браузер внутри изолятора с помощью скрипта. /usr/local/bin/isolated_firefox Code: #!/bin/sh FILE=`/usr/bin/realpath $0` UID=`/usr/bin/id -r -u` if test $UID -eq 0 then export USER="${1}" export DISPLAY="${2}" export XAUTHORITY="${3}" export PROFILE_DIR="${4}" ip netns exec isolator su -s /bin/sh -w DISPLAY,XAUTHORITY -l ${USER} -c "firefox --profile ${PROFILE_DIR}" else PROFILE_DIR="${HOME}/.config/ilamp_firefox" if test ! -d ${PROFILE_DIR} then mkdir -p ${PROFILE_DIR} fi pkexec ${FILE} ${USER} ${DISPLAY} ${XAUTHORITY} ${PROFILE_DIR} fi Если в системе нету pkexec, то Code: apt install pkexec Запускаем скрипт из под обычного пользователя. Code: /usr/local/bin/isolated_firefox Переходим на http://127.0.0.1:8080/wso2.5.1.php и облом. Смотрим что BblcpaJL php. Code: [500]: GET /wso2.5.1.php - Uncaught Error: Call to undefined function set_magic_quotes_runtime() in /nonexistent/wsoshell/wso2.5.1.php:20 Stack trace: #0 {main} thrown in /nonexistent/wsoshell/wso2.5.1.php on line 20 Ну что же e6JLR началась. Как пользоваться screen и vim учить не буду. Открываем исходник. Code: cd /nonexistent/wsoshell/ cp wso2.5.1.php wso2.5.1.php.orig vim /nonexistent/wsoshell/wso2.5.1.php Ошибка говорит что вызывается не существующая функция. Закоментируем 20 строчку и посмотрим что дальше. На 23 таже фигня, повторяем только закоментируем весь if, смотрим. ХА! Всего делов. Для тех у кого не получилось. diff ./wso2.5.1.php.orig wso2.5.1.php Code: 20c20 < @set_magic_quotes_runtime(0); --- > #@set_magic_quotes_runtime(0); 23c23 < if(get_magic_quotes_gpc()) { --- > /*if(get_magic_quotes_gpc()) { 29c29 < } --- > }*/ Осталось сделать так что бы изолятор запускался в автомате и было автоматическое монтирование виртуальных файловых систем. Запускать изолятор будет скрипт. /usr/local/sbin/isolator Code: #!/bin/sh start () { /usr/bin/ip netns add isolator if test ${?} -ne 0 then /usr/bin/logger -p user.err -t "isolator: can't create a new named network namespace" return 255 fi /usr/bin/ip netns exec isolator /usr/sbin/ifconfig lo up 127.0.0.1/24 if test ${?} -ne 0 then /usr/bin/logger -p user.err -t "isolator: can't up loopback in named network namespace" return 255 fi return 0 } stop () { /usr/bin/ip netns exec isolator /usr/sbin/ifconfig lo down if test ${?} -ne 0 then /usr/bin/logger -p user.err -t "isolator: can't down loopback in named network namespace" return 255 fi /usr/bin/ip netns delete isolator if test ${?} -ne 0 then /usr/bin/logger -p user.err -t "isolator: can't delete named network namespace" return 255 fi return 0 } case "${1}" in start) start if test ${?} -ne 0 then /usr/bin/logger -p user.err -t "isolator: can't start isolated network" exit 255 else /usr/bin/systemd-notify --ready --status="isolated network creating complete" exit 0 fi ;; stop) stop if test ${?} -ne 0 then /usr/bin/logger -p user.err -t "isolator: can't correct stop isolated network" exit 255 else /usr/bin/systemd-notify --ready --status="isolated network stoped" exit 0 fi ;; *) /usr/bin/logger -p user.err -t "isolator: incorrect command line argument" exit 255 ;; esac Пропишем запуск и остановку скрипта в systemd. /lib/systemd/system/isolator.service Code: [Unit] Description=Isolated network After=network.target [Service] Type=notify RemainAfterExit=yes ExecStart=/usr/local/sbin/isolator start ExecStop=/usr/local/sbin/isolator stop [Install] WantedBy=multi-user.target Активизируем запуск Code: systemctl enable isolator.service Пропишем монирование виртуальных файловых систем. /etc/fstab Code: /dev /kali/dev none defaults,bind 0 0 devpts /kali/dev/pts devpts defaults 0 0 proc /kali/proc proc defaults 0 0 sysfs /kali/sys sysfs defaults 0 0 Остались мелочи - удобный запуск. Удобный chroot. /usr/local/bin/netns Code: /usr/bin/ip netns exec isolator chroot /kali screen Code: chmod 755 /usr/local/bin/netns sudo netns Изолированный firefox в меню. /usr/share/applications/isolated_firefox.desktop Code: [Desktop Entry] Encoding=UTF-8 Name=Isolated FireFox Exec=/usr/local/bin/isolated_firefox Icon=firefox-esr StartupNotify=true Terminal=false Type=Application Categories=Network; Game over!
Chroot это если ты очень смелый и не боишься экспериментов над собцтвенной задницей В свое время было множество статей про побег из-под chroot. Вот так рандомно, например: https://www.stableit.blog/2013/08/chroot-chroot.html Если подопытный вздумает сопротивляться - может быть очень бо-бо. Если он использует уязвимости, мудрит с дровами, получает рута и прочее - chroot просто бесполезен. Какбэ да... для "нормального" софта - самое оно. Зачем городить виртуалку, если я вон щас тем же самым debootstrap из под арча получу Debian поиграться, поставлю заShitу и начну веселье. А можно же это еще делать в оперативке, чтоб оно летало как ненормальное ! Но это не полноценный rohgoh. =========== А так вообще - полезно, есессно
Побег из chroot имея root, таки да. Но здесь скрипт исполняется из под nobody. ЗЫ: Я слышал о случаях побега из VirtualBox https://www.exploit-db.com/exploits/45372 из Docker https://www.exploit-db.com/exploits/47147 А так что бы рута поднять на свежей системе надо зеродей иметь a Boo6LLLe roHgoH Ha cBo:EM xye He noMo]I[eT ecJLu Te6R 6e3 roHgoHa e6yT B ]I[ony