• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Повышаем привилегии в Linux через симлинки

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,178
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе я покажу, как можно повысить привилегии в Linux, используя ссылки на важные файлы. Но прежде чем получить доступ к операционной системе, мы посканируем веб‑приложение и выгрузим его исходные коды для анализа. Также прочитаем критические данные через LFI в системе Ghost.
Наша цель — получение прав суперпользователя на машине 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
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Результат работы скрипта
Сканер нашел два открытых порта:
  • 22 — служба OpenSSH 8.9p1;
  • 80 — веб‑сервер Apache.
По отчету сканирования видно, что на сервере развернута CMS Ghost 5.58, а также доступен файл robots.txt, содержащий список каталогов, которые не должен индексировать веб‑сервер.

Главная страница сайта
Главная страница сайта

Точка входа​

На сайте ничего интересного найти не удалось, поэтому приступим к сканированию.

Справка: сканирование веба c ffuf​

Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде Для просмотра ссылки Войди или Зарегистрируйся и Для просмотра ссылки Войди или Зарегистрируйся.
Я предпочитаю легкий и очень быстрый Для просмотра ссылки Войди или Зарегистрируйся. При запуске указываем следующие параметры:
  • -w — словарь (я использую словари из набора Для просмотра ссылки Войди или Зарегистрируйся);
  • -t — количество потоков;
  • -u — URL;
  • -H — HTTP-заголовок.
Место перебора помечается словом FUZZ.
Задаем параметры и запускаем 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
Главная страница сайта dev
Главная страница сайта dev
На сайте ничего интересного, но мы еще можем посканировать новый домен на предмет скрытых файлов и каталогов. На этот раз возьмем Для просмотра ссылки Войди или Зарегистрируйся. При запуске используем следующие параметры:
  • -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-конфиг, но в каталоге его нет.

Содержимое файла Dockerfile.ghost
Содержимое файла Dockerfile.ghost
А вот в файле authentication.test.js есть два пароля, старый и новый.

Содержимое файла authentication.test.js
Содержимое файла authentication.test.js
Осталось найти имя пользователя. На одной из страниц сайта можно увидеть, что автор статьи — admin.

Содержимое страницы The Random Access Memory
Содержимое страницы The Random Access Memory
Так как в качестве логина нужно указать почту, попробуем использовать домен linkvortex.htb.

Страница авторизации
Страница авторизации
Все получилось, и у нас теперь есть доступ администратора к панели CMS Ghost.

Панель администратора
Панель администратора

LFI​

Обычно админка в CMS дает нам возможность получить RCE, поэтому стоит проверить, есть ли для Ghost готовые эксплоиты. Можем просто поискать их в Google.

Поиск эксплоитов в Google
Поиск эксплоитов в Google

Так нашелся Для просмотра ссылки Войди или Зарегистрируйся с эксплоитом для уязвимости Для просмотра ссылки Войди или Зарегистрируйся. CMS Ghost до версии 5.59.1 содержит уязвимость, которая позволяет аутентифицированным пользователям читать произвольные файлы. Для начала попробуем прочитать файл /etc/passwd.

python3 ghost_fileread.py -t Для просмотра ссылки Войди или Зарегистрируйся -u admin@linkvortex.htb -p OctopiFociPilfer45 -f /etc/passwd
Содержимое файла /etc/passwd
Содержимое файла /etc/passwd
Вспомним про 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
Содержимое файла config.production.json
Содержимое файла config.production.json
В файле есть учетные данные пользователя bob, а такая учетная запись была в файле /etc/passwd. Авторизуемся по SSH и забираем первый флаг.

Флаг пользователя
Флаг пользователя

Локальное повышение привилегий​

Теперь нам необходимо собрать информацию для повышения привилегий в ОС. Я буду использовать для этого скрипты PEASS.

Справка: скрипты PEASS​

Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки Войди или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. Затем посмотрим, что интересного он нашел.

Судя по настройкам sudoers, мы можем без ввода пароля выполнить скрипт /opt/ghost/clean_symlink.sh в привилегированном контексте.

Настройки sudoers
Настройки sudoers

Давай посмотрим, что это за скрипт. Он принимает в качестве аргумента файл с расширением .png. Внутри делается проверка: если файл — символическая ссылка, то она не должна указывать на каталоги etc и root. Если все проверки пройдены, то выполняется копирование файла. При этом если переменная среды CHECK_CONTENT установлена, то будет отображено содержимое файла.

Содержимое скрипта clean_symlink.sh
Содержимое скрипта clean_symlink.sh

Однако мы легко пройдем проверку, если символическая ссылка будет указывать на другую символическую ссылку. Вторую ссылку можем направить на приватный ключ 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

Содержимое ключа SSH
Содержимое ключа SSH
Сохраняем ключ на свою машину, назначаем необходимые права и подключаемся к серверу от имени root.

Код:
chmod 0600 id_rsa
ssh -i id_rsa root@10.10.11.47
Флаг рута
Флаг рута

Машина захвачена!
 
Activity
So far there's no one here
Сверху Снизу