Writeup: THM tomghost

Writeup: THM tomghost

C0RS|E7

Всем привет, с вами снова C0RS, и сегодня мы будем ломать сервер Apache Tomcat на TryHackMe.

Начнем с активной разведки. В первую очередь, посмотрим с помощью nmap, что из себя представляет данная нам машина:

sudo nmap -A -v 10.10.181.92

Из интересующих нас портов здесь 22, 8009 и 8080. Начнем с последнего порта. Попробуем перейти через браузер и пофаззить каталоги с помощью ffuf.

Ничего интересного, на странице менеджеров - 403, форм авторизации найти не удалось. Фаззинг тоже не принес успеха. Так как это CTF простого уровня, то здесь мы не будем пытаться байпассить 403 и перейдем к исследованию следующего порта, 8009. Название говорит нам о том, что данная служба как-то связана с веб-сервером. Пойдем в гугл, чтобы получить больше информации по уязвимостям Apache Jserv (Protocol v1.3). Среди первых ссылок натыкаемся на уже знакомый нам порт. Читаем подробнее и натыкаемся на уже знакомое нам название 'Ghostcat' (вспоминаем картинку в начале поста). Оказывается, это CVE-2020-1938. Она состоит в том, что при некоторых манипуляциях сервер позволяет читать файлы конфигурации неавторизованным пользователям. Уязвимость крайне опасна и охватывает большое количество версий Tomcat, особенно в случае настройки по умолчанию. Идём на GitHub в поисках эксплоита, внимательно читаем описание и пробуем запускать :)

python3 ajpShooter.py http://10.10.181.92:8080 8009 /WEB-INF/web.xml read

Эксплоит отработал успешно, мы прочитали файл конфига сервера и нашли в нём учетные данные. Учитывая, что мы не нашли никаких форм логина, скорее всего эти данные подойдут в ssh. Пробуем подключиться.

Да будет шелл!
закрытый pgp-ключ - очень интересно

SSH-соединение установлено, двигаемся дальше. Посмотрим, кто мы такие, и что вокруг нас. В домашней директории видим файл .pgp, для расшифровки которого требуется пароль, и файл .asc, который, судя по содержанию, является закрытым pgp-ключом для расшифровки. Скачаем эти файлы на нашу машину с помощью команды scp для дальнейшей расшифровки, а пока поищем файл user.txt, содержащий первый флаг. Думаю, мы уже в состоянии его прочитать.

Забираем наш флаг и случайно обнаруживаем нового пользователя. Интересно, что же спрятано в зашифрованном файле? John поможет нам узнать ответ ;)

Используем gpg2john для передачи хэша файла tryhackme.asc и, собственно, john для взлома этого хэша.

gpg2john tryhackme.asc > hash

john --wordlist=/home/kali/SecLists/Passwords/Leaked-Databases/rockyou.txt hash

Пароль сбрутился, значит, мы можем импортировать ключ и расшифровать файл, введя добытый пароль.

gpg --import tryhackme.asc
gpg --decrypt credential.pgp

Оказывается, в зашифрованном файле находятся данные второго пользователя!

Коннектимся по ssh, используя новые креды. По стандартной схеме заходим и осматриваемся. У данного пользователя привилегии выше, но мы все равно ещё не являемся рутом. В первую очередь проверим sudo -l

Ага, утилита zip может запускаться этим пользователем с правами рута без пароля. Посмотрим на gtfobins, можем ли мы этим воспользоваться для повышения своих привилегий до root. И действительно, код для получения оболочки - с правами root:

TF=$(mktemp -u)
sudo zip $TF /etc/hosts -T -TT 'sh #'
sudo rm $TF

Команда сработала, наши привилегии теперь root, и мы можем насладиться ссх-соединением с рут-правами и забрать наш заслуженный второй флаг.

Подведем итог: мы обнаружили, что сервер имеет уязвимость CVE-2020-1938 и проэксплуатировали её, получив неавторизованный доступ к чувствительной информации. Далее мы обнаружили зашифрованный файл с паролем и хранящийся вместе с ним файл закрытого ключа, защищенный очень слабым паролем. Взломав зашифрованное хранилище пароля, мы получил учетные данные пользователя с более высокими правами, которому было разрешено выполнение команды zip от имени sudo без ввода пароля. Благодаря этому мы смогли повысить наши привилегии до root и получить полный контроль над системой.

C0RS|EAGER7

Report Page