CTF (Capture the Flag) – RootMe. TryHackMe.
Здравствуйте, дорогие друзья. Сегодня будем проходить комнату сервиса TryHackMe, которая называется RootMe.
Это задачка, для начинающих, и подойдет новичкам в начале пути.
В качестве атакующей машины, у меня будет Kali Linux, и я рекомендую использовать эту ОС. Как всегда, мы начинаем исследовать машину при помощи сканирования. Я буду использовать Nmap, где команда будет выглядеть как: «nmap -A -vv -sV -sC 10.10.63.134»:
Параметры можете узнать сами, с помощью справки nmap —help.
После некоторого ожидания, мы видим 2 открытых порта:
Сразу запускаем gobuster, чтобы узнать скрытые директории.
Если Вы работаете в Kali Linux сервиса TryHackMe, инструмент gobuster не будет предустановлен. Для начала нужно обновить пакеты в репозитории, с помощью команды: «apt update», и далее «apt install gobuster»:
Это команда: «gobuster dir -u http://10.10.63.134 -w /usr/share/dirb/wordlists/common.txt»:
После небольшого анализа директорий, в глаза бросается /panel:
При осмотре сайта и его директорий, ничего интересного я не нашел, кроме страницы для загрузки файлов.
Да, и не забудем про задания, которые нам нужно решить.
Мы знаем, что открыты 2 порта:
Также знаем версию Apache, исходя из сканирования nmap:
Сервис, который есть на порту 22 мы также знаем, исходя из сканирования:
Все директории, которые существуют на сервере, мы узнали с помощью GoBuster:
И последний вопрос 2 таска мы также нашли:
Переходим к 3-му таску. Исходя из найденной директории, вектор атаки мы будем строить так, чтобы у нас был reverse shell. Для начала, попробуем загрузить какой-то простенький файл, например, в текстовом формате:
Все отлично грузится. Сервер позволяет нам загружать текстовые файлы. Это прекрасно.
Теперь попытаемся загрузить файл с расширением .php. Чтобы ускорить процесс, я сразу взял рабочий шелл с гитхаба — https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php, который написан на языке программирования «php»:
В нем нужно отредактировать айпи адрес и порт, для работоспособности шелла:
Итак, момент истины ))
И неудача. Как предсказуемо. Предлагаю поменять расширение файла. Можно это автоматизировать, с помощью BurpSuite, например; но, после некоторого подбора вариантов, у меня получилось залить шелл с расширением «.php5»:
Или, можно изменить расширение, с помощью команды: «mv reverse-shell.php reverse-shell.php5»:
Далее, нам нужно запустить netcat, для приема входящего соединения:
Заливаем шелл на сервер и запускаем его:
Принимаем входящее подключение:
Для решения 3 таска нам нужно найти файл user.txt. Это делается в одну команду: «find / -type f –iname user.txt 2> /dev/null». Тут пригодится знание командной строки Linux.
Параметры команды
/: Поиск по всему серверу
-type f: Искать только файлы (без каталогов)
-iname <имя файла>: поиск файла с именем <имя файла> (без учета регистра)
Примечание:
2> / dev / null в конце используется для перенаправления любых ошибок, которые могут возникнуть во время брутфорса, на / dev / null (NULL — это специальное устройство в Linux, которое уничтожает любые данные, которые ему отправляются):
Выводим наш флаг, с помощью команды cat:
Сдаем флаг:
Переходим к 4 таску – повышение привилегий.
Наша задача – это повышение привилегий до рута. Давайте посмотрим, есть ли в системе какие-либо файлы с установленным битом SUID и владельцем которых является пользователь root. Файлы с установленным битом SUID при запуске запускаются с разрешениями владельца файла. Таким образом, если есть двоичный файл, принадлежащий root, и у него установлен бит SUID, мы теоретически могли бы использовать этот двоичный файл для повышения наших разрешений. Команда для вывода будет выглядеть как: «find / -type f –user root –perm -4000 –exec ls –l + 2> /dve/null»:
Параметры команды
/: Сканировать все устройство
-type f: искать только файлы (без каталогов)
-user root: проверить, является ли владелец файла root
-perm -4000: искать файлы с правами не менее 4000.
4000 — это числовое представление для файла, для которого установлен бит SUID.
—exec: выполнить команду, используя результаты поиска
ls -l {} +: отображать результаты в развернутой форме ({} — это заполнитель для результатов, возвращаемых командой find. + в конце используется для завершения параметра -exec)
2> / dev / null в конце не требуется, но с его помощью мы отправляем любые ошибки, которые могут быть возвращены функцией find (каталоги, к которым невозможно получить доступ из-за отсутствия надлежащих разрешений), в NULL. NULL — это специальное устройство в Linux, которое удаляет все отправленные на него данные.
Глядя на вывод, мы видим, что двоичный файл python (Вы найдете его в выводе) — это не обычные разрешения для этого двоичного файла, поэтому мы могли бы использовать его для получения корневого доступа.
Ответ на первый вопрос будет показан в выводе. Это: /usr/bin/python:
Ответ на второй вопрос Вы можете найти на сайте CTFOBins https://gtfobins.github.io/
Давайте попробуем ввести этот код, и посмотрим, сможем ли мы повысить привилегии до рута. Команда: «/usr/bin/python –c ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’»:
У нас получилось.
Теперь, по аналогии с users.txt попробуем найти последний флаг:
Сдаем флаг рута:
На этом все. Всем хорошего дня.