Найти в Дзене

CTF (Capture the Flag) – RootMe. TryHackMe.

Здравствуйте, дорогие друзья. Сегодня будем проходить комнату сервиса TryHackMe, которая называется RootMe.

Это задачка, для начинающих, и подойдет новичкам в начале пути.

В качестве атакующей машины, у меня будет Kali Linux, и я рекомендую использовать эту ОС, если не получится подключиться к VPN.

Как всегда, мы начинаем исследовать машину при помощи сканирования. Я буду использовать Nmap, где команда будет выглядеть как: «nmap -A -vv -sV -sC 10.10.63.134»:

Параметры можете узнать сами, с помощью справки nmap --help.

После некоторого ожидания, мы видим 2 открытых порта:

-2

Сразу запускаем gobuster, чтобы узнать скрытые директории.

Если Вы работаете в Kali Linux сервиса TryHackMe, инструмент gobuster не будет предустановлен. Для начала нужно обновить пакеты в репозитории, с помощью команды: «apt update», и далее «apt install gobuster»:

-3

Это команда: «gobuster dir -u http://10.10.63.134 -w /usr/share/dirb/wordlists/common.txt»:

-4

После небольшого анализа директорий, в глаза бросается /panel:

-5

При осмотре сайта и его директорий, ничего интересного я не нашел, кроме страницы для загрузки файлов.

Да, и не забудем про задания, которые нам нужно решить.

Мы знаем, что открыты 2 порта:

-6

Также знаем версию Apache, исходя из сканирования nmap:

-7

Сервис, который есть на порту 22 мы также знаем, исходя из сканирования:

-8

Все директории, которые существуют на сервере, мы узнали с помощью GoBuster:

-9

И последний вопрос 2 таска мы также нашли:

-10

Переходим к 3-му таску. Исходя из найденной директории, вектор атаки мы будем строить так, чтобы у нас был reverse shell. Для начала, попробуем загрузить какой-то простенький файл, например, в текстовом формате:

-11

Все отлично грузится. Сервер позволяет нам загружать текстовые файлы. Это прекрасно.

Теперь попытаемся загрузить файл с расширением .php.

Чтобы ускорить процесс, я сразу взял рабочий шелл с гитхаба - https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php, который написан на языке программирования «php»:

-12

В нем нужно отредактировать айпи адрес и порт, для работоспособности шелла:

-13

Итак, момент истины ))

-14

И неудача. Как предсказуемо. Предлагаю поменять расширение файла.

Можно это автоматизировать, с помощью BurpSuite, например; но, после некоторого подбора вариантов, у меня получилось залить шелл с расширением «.php5»:

-15

Или, можно изменить расширение, с помощью команды: «mv reverse-shell.php reverse-shell.php5»:

-16

Далее, нам нужно запустить netcat, для приема входящего соединения:

-17

Заливаем шелл на сервер и запускаем его:

-18

Принимаем входящее подключение:

-19

Для решения 3 таска нам нужно найти файл user.txt. Это делается в одну команду: «find / -type f –iname user.txt 2> /dev/null». Тут пригодится знание командной строки Linux.

Параметры команды

/: Поиск по всему серверу

-type f: Искать только файлы (без каталогов)

-iname <имя файла>: поиск файла с именем <имя файла> (без учета регистра)

Примечание:

2> / dev / null в конце используется для перенаправления любых ошибок, которые могут возникнуть во время брутфорса, на / dev / null (NULL - это специальное устройство в Linux, которое уничтожает любые данные, которые ему отправляются):

-20

Выводим наш флаг, с помощью команды cat:

-21

Сдаем флаг:

-22

Переходим к 4 таску – повышение привилегий.

Наша задача – это повышение привилегий до рута. Давайте посмотрим, есть ли в системе какие-либо файлы с установленным битом SUID и владельцем которых является пользователь root. Файлы с установленным битом SUID при запуске запускаются с разрешениями владельца файла. Таким образом, если есть двоичный файл, принадлежащий root, и у него установлен бит SUID, мы теоретически могли бы использовать этот двоичный файл для повышения наших разрешений.

Команда для вывода будет выглядеть как: «find / -type f –user root –perm -4000 –exec ls –l + 2> /dve/null»:

-23

Параметры команды

/: Сканировать все устройство

-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:

-24

Ответ на второй вопрос Вы можете найти на сайте CTFOBins https://gtfobins.github.io/

-25

Давайте попробуем ввести этот код, и посмотрим, сможем ли мы повысить привилегии до рута. Команда: «/usr/bin/python –c ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’»:

-26

У нас получилось.

Теперь, по аналогии с users.txt попробуем найти последний флаг:

-27

Сдаем флаг рута:

-28

На этом все. Всем хорошего дня.