Привет, Хабр! В этой статье хочу вам рассказать про свой опыт прохождения лаборатории Friendzone на портале hackthebox. Для тех, кто не слышал, что такое hackthebox — это портал, на котором вы можете проверить свои умения пентеста на практике, имеются CTF таски и собственно лабораторные машины, о прохождении одной из которых и пойдет речь в этой статье.

Скажу сразу, что в правилах сервиса написано: «Dont share how you hacked each machine with other members. This includes the invite code generation and all challenges». Но так как эта машина уже не активна и хранится в разделе «Retired Machines», доступ к машинам в этом разделе и writeup'ам имеют только VIP-участники, то данная статья ничего не нарушает и вполне законна. И так начнем!



Сбор информации


Начнем разведку с запуска сканирования портов с помощью nmap.



Из приведенного выше видно, что порты 21 (ftp), 22(ssh), 53(domain), 80(http), 139(netbios-ssn), 443(https) открыты. Давайте же рассмотрим их.

Enumerate 139/tcp (netbios-ssn)


Воспользуемся утилитой enum4linux для перечисления расшаренных ресурсов на хосте. Из вывода утилиты видно, что разрешено входить на ресурсы /general и /Development



Теперь нам необходимо проверить эти ресурсы.

С помощью smbclient //10.10.10.123/general находим файл creds.txt, содержащий некие учетные данные, сохраним его.





DNS enumeration


Воспользуемся утилитой dig, которая дает возможность проверить записи на указанном DNS сервере для домена/поддомена. Имя домена friendzone.red взято из CommonName ssl-сертификата (вывод nmap для 443/tcp).



Заходим на 10.10.10.123



Замечаем почтовый ящик info@friendportal.red и снова воспользуемся dig.



Добавляем полученные записи в /etc/hosts

Теперь у нас есть список адресов, которые необходимо просмотреть для следующих зацепок. Опущу часть повествования, где страницы оказались кроличьими норами. Рассмотрим только полезные находки.

Заходим на administartor1.friendzone.red и вводим учетные данные, найденные на //10.10.10.123/general/creds.txt





Посещаем /dashboard.php



Просят ввести некие параметры для получения картинок. В итоге нам доступны 2 изображения.





Методом проб и ошибок понимаем, что страница уязвима к LFI (Local File Inclusion). И что мы можем загрузить шелл через smbclient и обратиться к нему с помощью данной уязвимости. Пробуем!

Загружаем шелл в Developments.





Возвращаемся на страницу и обращаемся к загруженному шеллу.



Перед этим, конечно, же запустив netcat на прослушивание порта 1234.



Получаем оболочку пользователя www-data.

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





Попробуем получить терминал и залогиниться под пользователем friend.



Заходим в домашнюю директорию /home/friend и забираем пользовательский флаг.

Захват root.txt


Загрузим на вулнбокс pspy64, чтобы отследить запущенные процессы.

Заголовок спойлера
pspy — это инструмент, предназначенный для отслеживания процессов без необходимости получения прав root. Он позволяет вам видеть команды, выполняемые другими пользователями, задания cron и т.д. по мере их выполнения.



Запускаем pspy64, перед этим выставив «исполнение» файлу chmod +x.



Замечаем, что reporter.py запускается от пользователя, у которого UID=0 (т.е. root). Посмотрим содержимое файла reporter.py



Практически все строки закомментированы и не несут смысла, кроме первой, где импортируется модуль os. Library hijacking?

У данного модуля os.py было разрешение 777, поэтому мы могли спокойно внести изменения от пользователя Friend.

Добавив в модуль os.py строку system(«cp /root/root.txt /home/Friend/root.txt») и подождав какое-то время, чтобы скрипт запустился.



Мы получили корневой флаг. Победа!

Комментарии (0)