CTF (Capture the Flag) – RootMe. TryHackMe.
Здравствуйте, дорогие друзья. Сегодня будем проходить комнату сервиса TryHackMe, которая называется RootMe.
Это задачка, для начинающих, и подойдет новичкам в начале пути.
В качестве атакующей машины, у меня будет Kali Linux, и я рекомендую использовать эту ОС. Как всегда, мы начинаем исследовать машину при помощи сканирования. Я буду использовать Nmap, где команда будет выглядеть как: «nmap -A -vv -sV -sC 10.10.63.134»:
![nmap -A -vv -sV -sC 10.10.63.134](https://timcore.ru/wp-content/uploads/2021/11/screenshot_1-3.png)
Параметры можете узнать сами, с помощью справки nmap —help.
После некоторого ожидания, мы видим 2 открытых порта:
![После некоторого ожидания, мы видим 2 открытых порта](https://timcore.ru/wp-content/uploads/2021/11/screenshot_2-3.png)
Сразу запускаем gobuster, чтобы узнать скрытые директории.
Если Вы работаете в Kali Linux сервиса TryHackMe, инструмент gobuster не будет предустановлен. Для начала нужно обновить пакеты в репозитории, с помощью команды: «apt update», и далее «apt install gobuster»:
![apt update && apt install gobuster](https://timcore.ru/wp-content/uploads/2021/11/screenshot_3-3.png)
Это команда: «gobuster dir -u http://10.10.63.134 -w /usr/share/dirb/wordlists/common.txt»:
![gobuster dir -u http://10.10.63.134 -w /usr/share/dirb/wordlists/common.txt](https://timcore.ru/wp-content/uploads/2021/11/screenshot_4-3.png)
После небольшого анализа директорий, в глаза бросается /panel:
![/panel/](https://timcore.ru/wp-content/uploads/2021/11/screenshot_5-3-1024x572.png)
При осмотре сайта и его директорий, ничего интересного я не нашел, кроме страницы для загрузки файлов.
Да, и не забудем про задания, которые нам нужно решить.
Мы знаем, что открыты 2 порта:
![открыты 2 порта](https://timcore.ru/wp-content/uploads/2021/11/screenshot_6-3.png)
Также знаем версию Apache, исходя из сканирования nmap:
![Также знаем версию Apache, исходя из сканирования nmap](https://timcore.ru/wp-content/uploads/2021/11/screenshot_7-3.png)
Сервис, который есть на порту 22 мы также знаем, исходя из сканирования:
![сервис ssh](https://timcore.ru/wp-content/uploads/2021/11/screenshot_8-2.png)
Все директории, которые существуют на сервере, мы узнали с помощью GoBuster:
![Все директории, которые существуют на сервере, мы узнали с помощью GoBuster](https://timcore.ru/wp-content/uploads/2021/11/screenshot_9-3.png)
И последний вопрос 2 таска мы также нашли:
![И последний вопрос 2 таска мы также нашли](https://timcore.ru/wp-content/uploads/2021/11/screenshot_10-3.png)
Переходим к 3-му таску. Исходя из найденной директории, вектор атаки мы будем строить так, чтобы у нас был reverse shell. Для начала, попробуем загрузить какой-то простенький файл, например, в текстовом формате:
![file txt download](https://timcore.ru/wp-content/uploads/2021/11/screenshot_11-3.png)
Все отлично грузится. Сервер позволяет нам загружать текстовые файлы. Это прекрасно.
Теперь попытаемся загрузить файл с расширением .php. Чтобы ускорить процесс, я сразу взял рабочий шелл с гитхаба — https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php, который написан на языке программирования «php»:
![reverse shell](https://timcore.ru/wp-content/uploads/2021/11/screenshot_12-3-1024x605.png)
В нем нужно отредактировать айпи адрес и порт, для работоспособности шелла:
![ip adress and port](https://timcore.ru/wp-content/uploads/2021/11/screenshot_13-3.png)
Итак, момент истины ))
![момент истины](https://timcore.ru/wp-content/uploads/2021/11/screenshot_14-3-1024x645.png)
И неудача. Как предсказуемо. Предлагаю поменять расширение файла. Можно это автоматизировать, с помощью BurpSuite, например; но, после некоторого подбора вариантов, у меня получилось залить шелл с расширением «.php5»:
![.php5](https://timcore.ru/wp-content/uploads/2021/11/screenshot_15-3.png)
Или, можно изменить расширение, с помощью команды: «mv reverse-shell.php reverse-shell.php5»:
![mv reverse-shell.php reverse-shell.php5](https://timcore.ru/wp-content/uploads/2021/11/screenshot_17-2.png)
Далее, нам нужно запустить netcat, для приема входящего соединения:
![nc -lnvp 4444](https://timcore.ru/wp-content/uploads/2021/11/screenshot_18-3.png)
Заливаем шелл на сервер и запускаем его:
![Заливаем шелл на сервер и запускаем его](https://timcore.ru/wp-content/uploads/2021/11/screenshot_16-3.png)
Принимаем входящее подключение:
![Принимаем входящее подключение](https://timcore.ru/wp-content/uploads/2021/11/screenshot_19-3.png)
Для решения 3 таска нам нужно найти файл user.txt. Это делается в одну команду: «find / -type f –iname user.txt 2> /dev/null». Тут пригодится знание командной строки Linux.
Параметры команды
/: Поиск по всему серверу
-type f: Искать только файлы (без каталогов)
-iname <имя файла>: поиск файла с именем <имя файла> (без учета регистра)
Примечание:
2> / dev / null в конце используется для перенаправления любых ошибок, которые могут возникнуть во время брутфорса, на / dev / null (NULL — это специальное устройство в Linux, которое уничтожает любые данные, которые ему отправляются):
![поиск файла user.txt](https://timcore.ru/wp-content/uploads/2021/11/screenshot_20-3.png)
Выводим наш флаг, с помощью команды cat:
![Выводим наш флаг, с помощью команды cat](https://timcore.ru/wp-content/uploads/2021/11/screenshot_21-3.png)
Сдаем флаг:
![Сдаем флаг](https://timcore.ru/wp-content/uploads/2021/11/screenshot_22-3.png)
Переходим к 4 таску – повышение привилегий.
Наша задача – это повышение привилегий до рута. Давайте посмотрим, есть ли в системе какие-либо файлы с установленным битом SUID и владельцем которых является пользователь root. Файлы с установленным битом SUID при запуске запускаются с разрешениями владельца файла. Таким образом, если есть двоичный файл, принадлежащий root, и у него установлен бит SUID, мы теоретически могли бы использовать этот двоичный файл для повышения наших разрешений. Команда для вывода будет выглядеть как: «find / -type f –user root –perm -4000 –exec ls –l + 2> /dve/null»:
![find / -type f –user root –perm -4000 –exec ls –l + 2> /dve/null](https://timcore.ru/wp-content/uploads/2021/11/screenshot_23-3.png)
Параметры команды
/: Сканировать все устройство
-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:
![/usr/bin/python](https://timcore.ru/wp-content/uploads/2021/11/screenshot_24-3.png)
Ответ на второй вопрос Вы можете найти на сайте CTFOBins https://gtfobins.github.io/
![CTFOBins](https://timcore.ru/wp-content/uploads/2021/11/screenshot_25-3.png)
Давайте попробуем ввести этот код, и посмотрим, сможем ли мы повысить привилегии до рута. Команда: «/usr/bin/python –c ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’»:
![/usr/bin/python –c ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’](https://timcore.ru/wp-content/uploads/2021/11/screenshot_26-3-1024x366.png)
У нас получилось.
Теперь, по аналогии с users.txt попробуем найти последний флаг:
![users.txt](https://timcore.ru/wp-content/uploads/2021/11/screenshot_27-2.png)
Сдаем флаг рута:
![Сдаем флаг рута](https://timcore.ru/wp-content/uploads/2021/11/screenshot_28-1-1024x578.png)
На этом все. Всем хорошего дня.