Методы проникновения в линуксовые системы (часть 5): Конфигурирование уязвимого сервера

Методы проникновения в линуксовые системы (часть 5): Конфигурирование уязвимого сервера

В этой статье мы рассмотрели конфигурирование уязвимого линуксового сервера, чтобы вы могли потренироваться в безопасной среде.

Автор: 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 и установка зависимостей

В рассматриваемых лабораторных работах мы будем настраивать уязвимые службы на стандартном образе с 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

Рисунок 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: Содержимое совместно используемого файлового ресурса

Лабораторная работа 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

Рисунок 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

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

  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».

Рисунок 7: Интерфейс для работы с базами данных в phpmyadmin

Далее создаем скрипт, доступный для записи всем пользователям, который будет выполняться в качестве задания в cron:

mkdir /scripts
echo "echo hello world" >> /scripts/rootcron.sh

Создаем задание для cron с правами суперпользователя, выполняющего скрипт каждую минуту:

	 echo "* * * * * /scripts/rootcron.sh" > mycron

Проверяем, что задание добавлено:

	 crontab -l

Рисунок 8: Проверка успешности добавления задания

Лабораторная работа 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:

Рисунок 9: Проверка доступности запуска приложений при помощи команды sudo

Заключение

В этой статье мы рассмотрели конфигурирование уязвимого линуксового сервера, чтобы вы могли потренироваться в безопасной среде. Надеюсь, эта серия статей оказалась полезной для тех, кто только начинает изучать пентесты.

Всего наилучшего.

Ваша приватность умирает красиво, но мы можем спасти её.

Присоединяйтесь к нам!