Всем здравствуйте! В данной статье будем разбираться с машинкой Pickle Rick с сайта Try Hack Me. В ходе решения разберем достаточно популярные и часто используемые инструменты, которые точно пригодятся начинающему CTFеру, пентестеру и просто интересующемуся безопасностью. На повестке у нас nmap для сканирования сети, gobuster для брутфорса директорий, reverse shell, linpeas и другие сопутствующие инструменты. Не пугайтесь страшных неизвестных слов, сейчас будем разбираться.

Подключаемся к машинке

Для начала запускаем машинку на сайте Try Hack Me, а также нашу собственную, на которой мы и будем решать задание, в моем случае это Kali Linux.

Для подключения к машинке понадобится утилита openvpn и специальный файл конфигурации с расширением .ovpn, который вы должны скачать с сайта Try Hack Me. Инструкция по подключению есть там же, поэтому не буду дублировать её здесь.

Нажмите на Access Machines чтобы получить инструкцию
Нажмите на Access Machines чтобы получить инструкцию

Подключаемся к машинке и проверяем соединение.

Подключение с openvpn
Подключение с openvpn
Проверка с помощью ping
Проверка с помощью ping

Сбор данных

Первым делом воспользуемся сканером сети nmap, который поможет узнать данные об открытых портах, сервисах, которые на них работают, версии этих сервисов и многое другое. Также можно получить данные и об операционной системе устройства.

Опции -sC и -sV используются для подключения скриптов для сканирования (в данном случае дефолтные) и для определения версий сервисов. Утилита nmap содержит огромное количество опций и возможностей их использования, поэтому с данным инструментов точно нужно быть знакомым и уметь им пользоваться.

Сканирование nmap
Сканирование nmap

Сканирование показало, что на исследуемом устройстве работают ssh и http. Наличие shh пока ничего нам не дает, а вот веб сервер проверить мы можем: зайдем браузер и перейдем по адресу машинки.

Сайт по адресу исследуемой машинки
Сайт по адресу исследуемой машинки

На первый взгляд ничего интересного, но внешность обманчива, нужно копать глубже: проверим исходный код страницы.

Исходный код с именем пользователя
Исходный код с именем пользователя

Находим в комментарии зацепку – имя пользователя, которое в дальнейшем может нам пригодиться.

Перебор директорий

Что же дальше? Пока мы знаем только о главной странице сайта, а есть ли еще страницы на этом домене, которые мы можем просмотреть и найти там какую-либо информацию? Здесь на помощь приходит gobuster. Это мощный инструмент, который может использоваться для перебора директорий на сайте. На самом деле имеется множество инструментов, схожих по функционалу, например, dirb, dirbuster и другие. Ознакомьтесь с несколькими и используйте в дальнейшем понравившийся.

Синтаксис команды следующий: -u для указания URL, -w для указания словаря перебора данных, -x для расширений файлов/директорий которые мы ищем и -t для указания потоков работы.

В данном репозитории можете найти различные словари для разных целей - https://github.com/gmelodie/awesome-wordlists

Перебор директорий с помощью gobuster
Перебор директорий с помощью gobuster

Получаем в результате несколько директорий, проверим их.

robots.txt
robots.txt

В robots.txt лежит фраза, которую Рик часто использовал, и она здесь явно не просто так, поэтому записываем ее и идем дальше.

Далее проверим portal.php, который переносит нас на страницу логина. Вспоминаем, что у нас было имя пользователя, которое мы нашли в исходном коде страницы, а также та самая фраза в robots.txt, которая может оказаться паролем. Проверим нашу догадку.

Страница логина
Страница логина

Отлично, мы внутри и перед нами текстовое поле, в котором мы может выполнять команды.

Командная строка

Попробуем выполнить несколько известных команд для изучения файловой системы.

Просмотр содержимого директории командой ls
Просмотр содержимого директории командой ls

Обнаруживаем секретный ингредиент. Кажется, это именно то, что нам нужно. Попробуем вывести содержимое и…

Вывод содержимого файла командой cat
Вывод содержимого файла командой cat
Вывод начальных строк из файла командой head
Вывод начальных строк из файла командой head

Кажется, привычные команды для вывода содержимого файла запрещены.

Вывод содержимого файла командой less
Вывод содержимого файла командой less

Но явно не все, поэтому запоминаем команды, записываем ингредиент и двигаемся дальше. Помним, что среди содержимого был также и файл с зацепкой clue.txt.

clue.txt
clue.txt

Проверяем домашнюю директорию.

Директория /home
Директория /home

Проверяем папку пользователя rick и находим еще один ингредиент.

Директория пользователя rick
Директория пользователя rick

С помощью все той же команды less выводим.

Второй секретный ингредиент
Второй секретный ингредиент

Reverse shell

Итак, мы имеем уже два ингредиента, остался последний, но где же его искать. Кажется, опять тупик и нужно что-то придумывать. В таких случаях остается лишь предлагать различные догадки, которые использовались раньше на практике и проверять, куда же они приведут. Именно поэтому поначалу все это может казаться сложным, но со временем вы познакомитесь с различными инструментами и стратегиями, а также ситуациями, в которых их следует применять, и решение подобных задач уже не будет ставить вас в тупик.

Здесь же я решил использовать reverse shell, который поможет получить доступ к удаленной системе с моего собственного устройства. Для этого воспользуемся языком программирования Python, и для начала проверим, имеется ли он на удаленном устройстве.

Hello world на Python для проверки
Hello world на Python для проверки

Все работает, поэтому может переходить к установлению reverse shell. Перейдем на сайт https://www.revshells.com/, который поможет нам сгенерировать нужный код, а также покажет команду, которая откроет прослушивание на нашем устройства. Для этого нужно указать ip адрес и порт.

Сайт для генерации кода для reverse shell
Сайт для генерации кода для reverse shell

Ip адрес нашего устройства можем посмотреть командой ip a.

Просмотр ip адреса командой ip a
Просмотр ip адреса командой ip a

С помощью netcat запускаем прослушивание на порту, в моем случае 9999.

Прослушивание порта с netcat
Прослушивание порта с netcat

Теперь возвращаемся к сайту и генерируем код на Python.

Код на Python для установления reverse shell
Код на Python для установления reverse shell

Выполняем его на удаленной машине, замечаем, что сайт зависает, а на нашей собственной машине появляется подключение.

Выполняем код на удаленном устройстве
Выполняем код на удаленном устройстве

Здесь у нас, кстати, ограничений по командам уже нет.

Подключения на нашем устройстве
Подключения на нашем устройстве

Сканирование на уязвимости с linpeas

В общем случае на данном этапе следует просканировать систему на наличие уязвимостей. Для этого есть отличный инструмент linpeas. Сначала устанавливаем его на нашу машинку, а затем выполним удаленно с помощью python веб сервера и утилиты curl.

Поднимаем на нашем устройстве python сервер в директории, где находится файлик со скриптом.

Python web server
Python web server

Затем на удаленной машинке через curl выполняем скрипт с помощью следующей команды.

Удаленно выполняем скрипт на исследуемой машинке с помощью curl
Удаленно выполняем скрипт на исследуемой машинке с помощью curl

Анализируем содержимое вывода. Обнаруживаем, что наш пользователь может выполнять любые команды от имени суперпользователя без пароля. А это значит, что мы просто может открыть консоль от имени root.

Вывод скрипта
Вывод скрипта

Конечно, это мы могли и узнать без linpeas, воспользовавшись sudo -l. Однако вариант с linpeas более универсален. На практике же следует действовать по ситуации и проверять догадки от более простых к более сложным.

Команда sudo -l
Команда sudo -l

Теперь открываем конcоль от имени root и проверяем его домашнюю директорию, где и находим последний ингредиент.

Последний ингредиент
Последний ингредиент

Сдаем флаги и снимаем маску анонимуса.

Комментарии (2)


  1. redudri
    22.05.2023 04:02
    +2

    Обожаю CTF. Жалко только, что они занимают безумно много времени, и некогда их проходить.


  1. CobakaBCamoJlETE
    22.05.2023 04:02
    +1

    Было интересно, отличный разбор!