В этой статье мы рассмотрели конфигурирование уязвимого линуксового сервера, чтобы вы могли потренироваться в безопасной среде.
Автор: Scott Sutherland
В этой статье будет рассказано о конфигурировании линуксового сервера с уязвимостями, рассмотренными в предыдущих четырех частях этой серии, чтобы вы смогли отработать все предложенные техники у себя дома. Как обычно, статья предназначена тех, кто только начинает изучать тестирование на проникновение. Кроме того, надеюсь, что и все остальные смогут подчерпнуть для себя нечто новое.
В этой секции коротко подытожим сценарии лабораторных работ на основе уже опубликованных частей, которые вы будете конфигурировать на сервере с уязвимостями.
# |
Удаленная уязвимость |
Локальная уязвимость |
Методика расширения привилегий |
1 |
Чрезмерные привилегии на сервере с Rsync |
Чрезмерные привилегии на сервере с Rsync. На сервере есть возможность запуска от имени root |
Создание нового привилегированного пользователя посредством добавление новых строк в файлы shadow, passwd, groups и sudoers |
2 |
Чрезмерные привилегии в NFS экспорте |
Небезопасный бинарный файл с флагом setuid, позволяющий запускать произвольный код от имени root |
Исследование бинарных файлов с флагом setuid на предмет прямого или косвенного запуска произвольного кода от имении root |
3 |
Слабые пароли в phpMyAdmin |
Чрезмерные привилегии в скрипте, позволяющим выполнять задания в cron от имени root. Скрипт доступен для записи всем пользователям |
Добавление команды в скрипт, доступный для записи всем и каждому, для запуска слушателя netcat. После запуска задания слушатель netcat начинает работать от имени root. Далее появляется возможность удаленного подключения к слушателям netcat для получения полноценных прав суперпользователя |
4 |
Слабые пароли для SSH |
Небезопасные конфигурации файла sudoers, дающие возможность произвольного выполнения кода от имени root через выполнение приложений при помощи команды sudo |
Ревизия приложений, доступных для запуска при помощи команды sudo на предмет прямого или косвенного выполнения произвольного кода от имени root. Примеры: sh, VI, python, netcat и пользовательский модуль для nmap. |
В рассматриваемых лабораторных работах мы будем настраивать уязвимые службы на стандартном образе с Kali Linux. Если у вас есть нет соответствующей виртуальной машины, можете загрузить с сайта. Как только виртуальная машина будет готова к работе, понадобится установка некоторых пакетов, которые требуются для различных сценариев. Кроме того, для установки всего необходимого нужны права суперпользователя.
Установка требуемых пакетов:
apt-get update apt-get install nfs-kernel-server apt-get install nfs-common apt-get install ufw apt-get install nmapУдаление ограничение фаервола:
iptables --flush ufw allow from any to any ufw status
Переходим к настройке сервера для конкретных сценариев.
Этот сценарий атаки подробно описан в первой части данной серии.
В этом разделе мы рассмотрим, как настроить уязвимый сервер с Rsync. После авторизации под пользователем root выполните команды, указанные ниже.
Начнем с создания конфигурационного файла rsyncd.conf:
echo "motd file = /etc/rsyncd.motd" > /etc/rsyncd.conf echo "lock file = /var/run/rsync.lock" >> /etc/rsyncd.conf echo "log file = /var/log/rsyncd.log" >> /etc/rsyncd.conf echo "pid file = /var/run/rsyncd.pid" >> /etc/rsyncd.conf echo " " >> /etc/rsyncd.conf echo "[files]" >> /etc/rsyncd.conf echo " path = /" >> /etc/rsyncd.conf echo " comment = Remote file share." >> /etc/rsyncd.conf echo " uid = 0" >> /etc/rsyncd.conf echo " gid = 0" >> /etc/rsyncd.conf echo " read only = no" >> /etc/rsyncd.conf echo " list = yes" >> /etc/rsyncd.conf
Рисунок 1: Создание файла rsyncd.conf
Далее запускаем службу rsync:
systemctl enable rsync
systemctl start rsync
или
systemctl restart rsync
Проверяем конфигурацию:
rsync 127.0.0.1::
rsync 127.0.0.1::files
Рисунок 2: Содержимое совместно используемого файлового ресурса
Этот сценарий атаки подробно описан во второй части данной серии.
В этом разделе мы рассмотрим конфигурирование небезопасных NFS экспортов и небезопасный бинарный файл с флагом setuid. После авторизации под пользователем root выполните команды ниже.
Создание NFS экспортов:
echo "/home *(rw,sync,no_root_squash)" >> /etc/exports echo "/ *(rw,sync,no_root_squash)" >> /etc/exports
Запуск NFS сервера:
systemctl start nfs-kernel-server.service systemctl restart nfs-kernel-server
Проверка NFS экспорта:
showmount -e 127.0.0.1
Рисунок 3: Создание и проверка NFS экспорта
Создание файлов, содержащих имена пользователей и паролей:
echo "user2:test" > /root/user2.txt echo "test:password" > /tmp/creds.txt echo "test:test" > /tmp/mypassword.txt
Рисунок 4: Создание файлов с учетными записями
Разрешение аутентификации при помощи пароля через SSH:
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config service ssh restart
Создание файла exec.c с исходным кодом бинарного файла, позволяющим выполнять произвольные команды операционной системы:
echo "#include " > /home/test/exec.c echo "#include " >> /home/test/exec.c echo "#include " >> /home/test/exec.c echo "#include " >> /home/test/exec.c echo " " >> /home/test/exec.c echo "int main(int argc, char *argv[]){" >> /home/test/exec.c echo " " >> /home/test/exec.c echo " printf(\"%s,%d\\n\", \"USER ID:\",getuid());" >> /home/test/exec.c echo " printf(\"%s,%d\\n\", \"EXEC ID:\",geteuid());" >> /home/test/exec.c echo " " >> /home/test/exec.c echo " printf(\"Enter OS command:\");" >> /home/test/exec.c echo " char line[100];" >> /home/test/exec.c echo " fgets(line,sizeof(line),stdin);" >> /home/test/exec.c echo " line[strlen(line) - 1] = '\0'; " >> /home/test/exec.c echo " char * s = line;" >> /home/test/exec.c echo " char * command[5];" >> /home/test/exec.c echo " int i = 0;" >> /home/test/exec.c echo " while(s){" >> /home/test/exec.c echo " command[i] = strsep(&s,\" \");" >> /home/test/exec.c echo " i++;" >> /home/test/exec.c echo " }" >> /home/test/exec.c echo " command[i] = NULL;" >> /home/test/exec.c echo " execvp(command[0],command);" >> /home/test/exec.c echo "}" >> /home/test/exec.c
Компилирование exec.c:
gcc -o /home/test/exec exec.c rm exec.c
Настройка флага setuid с целью выполнения команд от имени суперпользователя:
chmod 4755 exec
Рисунок 5: Создание небезопасного бинарного файла с флагом setupid
Проверяем возможность выполнения бинарного файла от имени непривилегированного пользователя:
Рисунок 6: Запуск файла exec от имени непривилегированного пользователя
Лабораторная работа 3: phpMyAdmin
Этот сценарий атаки подробно описан в третьей части данной серии.
В этом разделе мы рассмотрим небезопасную конфигурацию экземпляра phpMyAdmin, выполнение заданий cron от имени root и скрипт, доступный для записи всем пользователям. После авторизации от имени root выполните команды ниже.
Начинаем с изменения пароля пользователя root у локального экземпляра MySQL, который должен устанавливаться по умолчанию в дистрибутиве Kali (если нет, вначале нужно установить).
# Stop mysql /etc/init.d/mysql stop # Start MySQL in safe mode and log in as root mysqld_safe --skip-grant-tables& mysql -uroot # Select the database to use use mysql; # Reset the root password update user set password=PASSWORD("password") where User='root'; flush privileges; quit # Restart the server /etc/init.d/mysql stop /etc/init.d/mysql start # Confirm update by logging in with new password mysql -u root -p exitУстанавливаем phpMyAdmin:
apt-get install phpmyadmin
После появления графического интерфейса следуйте инструкциям ниже:
В качестве веб-сервера выберите apache2. Предупреждение: когда появится первая подсказка, apache2 будет подсвечен, но не выбран. Если вы не нажмете Пробел для выбора Apache, установщик не переместит нужные файлы во время инсталляции. Нажмите Пробел, Tab, а затем Enter для выбора Apache.
Выберите Yes, когда вас спросят, нужно ли использовать dbconfig-common для настройки базы данных.
Затем появится окно для указания пароля администратора, который нужно установить как «password», чтобы соответствовать сценарию этой лабораторной работы.
После установки нужно сделать еще несколько вещей.
Создаем мягкую ссылку в корневой директории к папке phpmyadmin:
ln -s /usr/share/phpmyadmin/ /var/www/phpmyadmin
Перезапускаем нужные службы:
service apache2 restart service mysql restart
Добавляем пользователя admin, которого мы будем обнаруживать позже:
mysql -u root use mysql; CREATE USER 'admin'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; exit
Конфигурируем расширенные привилегии для корневой директории:
cd /var/www/ chown -R www-data * chmod -R 777 *
После того как все сделано нужно зайти по адресу http://127.0.0.1/phpmyadmin и проверить авторизацию под учетной записью «admin» и паролем «password».
Рисунок 7: Интерфейс для работы с базами данных в phpmyadmin
Далее создаем скрипт, доступный для записи всем пользователям, который будет выполняться в качестве задания в cron:
mkdir /scripts echo "echo hello world" >> /scripts/rootcron.sh
Создаем задание для cron с правами суперпользователя, выполняющего скрипт каждую минуту:
echo "* * * * * /scripts/rootcron.sh" > mycron
Проверяем, что задание добавлено:
crontab -l
Рисунок 8: Проверка успешности добавления задания
Этот сценарий атаки подробно описан в четвертой части данной серии.
В этом разделе рассматривается создание конфигурации для файла sudoers, позволяющей запуск приложений, которые могут выполнять произвольные команды.
Команда ниже позволяет создать зашифрованный пароль для генерации тестовых пользователей. Изначальной я нашел эту методику в статье https://askubuntu.com/questions/94060/run-adduser-non-interactively.
openssl passwd -crypt test
Затем вы можете добавлять новых пользователей при помощи сгенерированного пароля. Это требование не является обязательным, но удобно при создании сценариев:
useradd -m -p O1Fug755UcscQ -s /bin/bash test useradd -m -p O1Fug755UcscQ -s /bin/bash user1 useradd -m -p O1Fug755UcscQ -s /bin/bash user2 useradd -m -p O1Fug755UcscQ -s /bin/bash user3 useradd -m -p O1Fug755UcscQ -s /bin/bash tempuser
Конфигурация файла sudoers, показанная ниже, позволяет командам vi, nmap, python и sh запускаться от имени root пользователями test и user1.
echo "Cmnd_Alias ALLOWED_CMDS = /usr/bin/vi, /usr/bin/nmap, /usr/bin/python3.6, /usr/bin/python3.7, /usr/bin/sh" > /etc/sudoers echo "test ALL=(ALL) NOPASSWD: ALLOWED_CMDS" >> /etc/sudoers echo "user1 ALL=(ALL) NOPASSWD: ALLOWED_CMDS" >> /etc/sudoers
Когда все вышеперечисленные манипуляции выполнены, попробуйте залогиниться под именем ранее созданного пользователя и проверить доступность запуска приложений при помощи команды sudo:
Рисунок 9: Проверка доступности запуска приложений при помощи команды sudo
В этой статье мы рассмотрели конфигурирование уязвимого линуксового сервера, чтобы вы могли потренироваться в безопасной среде. Надеюсь, эта серия статей оказалась полезной для тех, кто только начинает изучать пентесты.
Всего наилучшего.
Спойлер: она начинается с подписки на наш канал