Привет, Хабр! В этой статье хочу вам рассказать про свой опыт прохождения лаборатории 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) открыты. Давайте же рассмотрим их.
Воспользуемся утилитой enum4linux для перечисления расшаренных ресурсов на хосте. Из вывода утилиты видно, что разрешено входить на ресурсы /general и /Development
Теперь нам необходимо проверить эти ресурсы.
С помощью smbclient //10.10.10.123/general находим файл creds.txt, содержащий некие учетные данные, сохраним его.
Воспользуемся утилитой 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 и забираем пользовательский флаг.
Загрузим на вулнбокс pspy64, чтобы отследить запущенные процессы.
Запускаем 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») и подождав какое-то время, чтобы скрипт запустился.
Мы получили корневой флаг. Победа!
Скажу сразу, что в правилах сервиса написано: «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») и подождав какое-то время, чтобы скрипт запустился.
Мы получили корневой флаг. Победа!