June 29, 2021

Методы проникновения в линуксовые системы (часть 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

После появления графического интерфейса следуйте инструкциям ниже:

  1. В качестве веб-сервера выберите apache2. Предупреждение: когда появится первая подсказка, apache2 будет подсвечен, но не выбран. Если вы не нажмете Пробел для выбора Apache, установщик не переместит нужные файлы во время инсталляции. Нажмите Пробел, Tab, а затем Enter для выбора Apache.
  2. Выберите Yes, когда вас спросят, нужно ли использовать dbconfig-common для настройки базы данных.
  3. Затем появится окно для указания пароля администратора, который нужно установить как «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: