Методы проникновения в линуксовые системы (часть 5): Конфигурирование уязвимого сервера
В этой статье будет рассказано о конфигурировании линуксового сервера с уязвимостями, рассмотренными в предыдущих четырех частях этой серии, чтобы вы смогли отработать все предложенные техники у себя дома. Как обычно, статья предназначена тех, кто только начинает изучать тестирование на проникновение. Кроме того, надеюсь, что и все остальные смогут подчерпнуть для себя нечто новое.
Виртуальная машина с Kali Linux и установка зависимостей
В рассматриваемых лабораторных работах мы будем настраивать уязвимые службы на стандартном образе с 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
Переходим к настройке сервера для конкретных сценариев.
Лабораторная работа 1: Rsync
Этот сценарий атаки подробно описан в первой части данной серии.
В этом разделе мы рассмотрим, как настроить уязвимый сервер с 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
Далее запускаем службу rsync:
systemctl enable rsync
systemctl start rsync
или
systemctl restart rsync
Проверяем конфигурацию:
rsync 127.0.0.1::
rsync 127.0.0.1::files
Лабораторная работа 2: NFS
Этот сценарий атаки подробно описан во второй части данной серии.
В этом разделе мы рассмотрим конфигурирование небезопасных 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
Создание файлов, содержащих имена пользователей и паролей:
echo "user2:test" > /root/user2.txt echo "test:password" > /tmp/creds.txt echo "test:test" > /tmp/mypassword.txt
Разрешение аутентификации при помощи пароля через 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
Проверяем возможность выполнения бинарного файла от имени непривилегированного пользователя:
Лабораторная работа 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».
Далее создаем скрипт, доступный для записи всем пользователям, который будет выполняться в качестве задания в cron:
mkdir /scripts echo "echo hello world" >> /scripts/rootcron.sh
Создаем задание для cron с правами суперпользователя, выполняющего скрипт каждую минуту:
echo "* * * * * /scripts/rootcron.sh" > mycron
Проверяем, что задание добавлено:
crontab -l
Лабораторная работа 4: Sudoers
Этот сценарий атаки подробно описан в четвертой части данной серии.
В этом разделе рассматривается создание конфигурации для файла 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: