Рик, Морти и CTF
Всем здравствуйте! В данной статье будем разбираться с машинкой Pickle Rick с сайта Try Hack Me. В ходе решения разберем достаточно популярные и часто используемые инструменты, которые точно пригодятся начинающему CTFеру, пентестеру и просто интересующемуся безопасностью. На повестке у нас nmap для сканирования сети, gobuster для брутфорса директорий, reverse shell, linpeas и другие сопутствующие инструменты. Не пугайтесь страшных неизвестных слов, сейчас будем разбираться.
Подключаемся к машинке
Для начала запускаем машинку на сайте Try Hack Me, а также нашу собственную, на которой мы и будем решать задание, в моем случае это Kali Linux.
Для подключения к машинке понадобится утилита openvpn и специальный файл конфигурации с расширением .ovpn, который вы должны скачать с сайта Try Hack Me. Инструкция по подключению есть там же, поэтому не буду дублировать её здесь.
Нажмите на Access Machines чтобы получить инструкцию
Подключаемся к машинке и проверяем соединение.
Подключение с openvpn
Проверка с помощью ping
Сбор данных
Первым делом воспользуемся сканером сети nmap, который поможет узнать данные об открытых портах, сервисах, которые на них работают, версии этих сервисов и многое другое. Также можно получить данные и об операционной системе устройства.
Опции -sC и -sV используются для подключения скриптов для сканирования (в данном случае дефолтные) и для определения версий сервисов. Утилита nmap содержит огромное количество опций и возможностей их использования, поэтому с данным инструментов точно нужно быть знакомым и уметь им пользоваться.
Сканирование nmap
Сканирование показало, что на исследуемом устройстве работают ssh и http. Наличие shh пока ничего нам не дает, а вот веб сервер проверить мы можем: зайдем браузер и перейдем по адресу машинки.
Сайт по адресу исследуемой машинки
На первый взгляд ничего интересного, но внешность обманчива, нужно копать глубже: проверим исходный код страницы.
Исходный код с именем пользователя
Находим в комментарии зацепку — имя пользователя, которое в дальнейшем может нам пригодиться.
Перебор директорий
Что же дальше? Пока мы знаем только о главной странице сайта, а есть ли еще страницы на этом домене, которые мы можем просмотреть и найти там какую-либо информацию? Здесь на помощь приходит gobuster. Это мощный инструмент, который может использоваться для перебора директорий на сайте. На самом деле имеется множество инструментов, схожих по функционалу, например, dirb, dirbuster и другие. Ознакомьтесь с несколькими и используйте в дальнейшем понравившийся.
Синтаксис команды следующий: -u для указания URL, -w для указания словаря перебора данных, -x для расширений файлов/директорий которые мы ищем и -t для указания потоков работы.
В данном репозитории можете найти различные словари для разных целей — https://github.com/gmelodie/awesome-wordlists
Перебор директорий с помощью gobuster
Получаем в результате несколько директорий, проверим их.
robots.txt
В robots.txt лежит фраза, которую Рик часто использовал, и она здесь явно не просто так, поэтому записываем ее и идем дальше.
Далее проверим portal.php, который переносит нас на страницу логина. Вспоминаем, что у нас было имя пользователя, которое мы нашли в исходном коде страницы, а также та самая фраза в robots.txt, которая может оказаться паролем. Проверим нашу догадку.
Страница логина
Отлично, мы внутри и перед нами текстовое поле, в котором мы может выполнять команды.
Командная строка
Попробуем выполнить несколько известных команд для изучения файловой системы.
Просмотр содержимого директории командой ls
Обнаруживаем секретный ингредиент. Кажется, это именно то, что нам нужно. Попробуем вывести содержимое и…
Вывод содержимого файла командой cat
Вывод начальных строк из файла командой head
Кажется, привычные команды для вывода содержимого файла запрещены.
Вывод содержимого файла командой less
Но явно не все, поэтому запоминаем команды, записываем ингредиент и двигаемся дальше. Помним, что среди содержимого был также и файл с зацепкой clue.txt.
clue.txt
Проверяем домашнюю директорию.
Директория /home
Проверяем папку пользователя rick и находим еще один ингредиент.
Директория пользователя rick
С помощью все той же команды less выводим.
Второй секретный ингредиент
Reverse shell
Итак, мы имеем уже два ингредиента, остался последний, но где же его искать. Кажется, опять тупик и нужно что-то придумывать. В таких случаях остается лишь предлагать различные догадки, которые использовались раньше на практике и проверять, куда же они приведут. Именно поэтому поначалу все это может казаться сложным, но со временем вы познакомитесь с различными инструментами и стратегиями, а также ситуациями, в которых их следует применять, и решение подобных задач уже не будет ставить вас в тупик.
Здесь же я решил использовать reverse shell, который поможет получить доступ к удаленной системе с моего собственного устройства. Для этого воспользуемся языком программирования Python, и для начала проверим, имеется ли он на удаленном устройстве.
Hello world на Python для проверки
Все работает, поэтому может переходить к установлению reverse shell. Перейдем на сайт https://www.revshells.com/, который поможет нам сгенерировать нужный код, а также покажет команду, которая откроет прослушивание на нашем устройства. Для этого нужно указать ip адрес и порт.
Сайт для генерации кода для reverse shell
Ip адрес нашего устройства можем посмотреть командой ip a.
Просмотр ip адреса командой ip a
С помощью netcat запускаем прослушивание на порту, в моем случае 9999.
Прослушивание порта с netcat
Теперь возвращаемся к сайту и генерируем код на Python.
Код на Python для установления reverse shell
Выполняем его на удаленной машине, замечаем, что сайт зависает, а на нашей собственной машине появляется подключение.
Выполняем код на удаленном устройстве
Здесь у нас, кстати, ограничений по командам уже нет.
Подключения на нашем устройстве
Сканирование на уязвимости с linpeas
В общем случае на данном этапе следует просканировать систему на наличие уязвимостей. Для этого есть отличный инструмент linpeas. Сначала устанавливаем его на нашу машинку, а затем выполним удаленно с помощью python веб сервера и утилиты curl.
Поднимаем на нашем устройстве python сервер в директории, где находится файлик со скриптом.
Python web server
Затем на удаленной машинке через curl выполняем скрипт с помощью следующей команды.
Удаленно выполняем скрипт на исследуемой машинке с помощью curl
Анализируем содержимое вывода. Обнаруживаем, что наш пользователь может выполнять любые команды от имени суперпользователя без пароля. А это значит, что мы просто может открыть консоль от имени root.
Вывод скрипта
Конечно, это мы могли и узнать без linpeas, воспользовавшись sudo -l. Однако вариант с linpeas более универсален. На практике же следует действовать по ситуации и проверять догадки от более простых к более сложным.
Команда sudo -l
Теперь открываем конcоль от имени root и проверяем его домашнюю директорию, где и находим последний ингредиент.
Последний ингредиент
Сдаем флаги и снимаем маску анонимуса.